Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2017-12-15, 22:39
  #1
Medlem
Linguass avatar
Jag försöker att få en while loop att fungera men det går inte så bra. Poängen är att den ska hämta uppgifter från en databas, skapa mail och skicka ut till samtliga som uppfyller kriterierna. Den skickar än så länge bara ut ett mail till en person...

Kod:
$dbcmysqli_connect($host,$user,$password$dbase)  
or die(
"Unable to select database"); 
 
$country    $_POST['country'];
        
$query "SELECT email, firstname FROM $table WHERE country = '$country'"
$result mysqli_query ($dbc$query)  
or die (
'Error querying database.'); 



        
$rows =  array();
        
while (
$row mysqli_fetch_array($result)) { 
        
$rows[] = $row;
        
$first_name    $row['firstname']; 
$email        $row['email']; 
$from         'info@gmail.com'
$subject             $_POST['heading']; 
$body         $_POST["message"];

mail($email$subject$body'From:' $from); 
            


Någon som vet vad som är felet?
__________________
Senast redigerad av Linguas 2017-12-15 kl. 22:41.
Citera
2017-12-15, 22:44
  #2
Medlem
ändra till:
$from = 'info@gmail.com' ;
Citera
2017-12-15, 22:45
  #3
Moderator
Protons avatar
Citat:
Ursprungligen postat av Linguas
Jag försöker att få en while loop att fungera men det går inte så bra. Poängen är att den ska hämta uppgifter från en databas, skapa mail och skicka ut till samtliga som uppfyller kriterierna. Den skickar än så länge bara ut ett mail till en person...

Kod:
$dbcmysqli_connect($host,$user,$password$dbase)  
or die(
"Unable to select database"); 
 
$country    $_POST['country'];
        
$query "SELECT email, firstname FROM $table WHERE country = '$country'"
$result mysqli_query ($dbc$query)  
or die (
'Error querying database.'); 



        
$rows =  array();
        
while (
$row mysqli_fetch_array($result)) { 
        
$rows[] = $row;
        
$first_name    $row['firstname']; 
$email        $row['email']; 
$from         'info@gmail.com'
$subject             $_POST['heading']; 
$body         $_POST["message"];

mail($email$subject$body'From:' $from); 
            


Någon som vet vad som är felet?
Börja med att läsa tråden (FB) Ska du sätta ihop en SQL dynamiskt, SE HIT!!. Efter det att du följt råden i den kanske du lyckas lura ut felet själv?

För övrigt undrar jag vad raden
Kod:
$rows[] = $row
fyller för funktion i ditt script, varför har du den där och vad ska den göra?
Citera
2017-12-15, 22:48
  #4
Medlem
Nu är jag inte php kunnig, men ditt vilkor blir tillsynes uppfyllt direkt.

Prova att lägg fetchen innan och for/while loop genom vektor sedan.
Citera
2017-12-15, 22:52
  #5
Medlem
Linguass avatar
Citat:
Ursprungligen postat av Proton
Börja med att läsa tråden (FB) Ska du sätta ihop en SQL dynamiskt, SE HIT!!. Efter det att du följt råden i den kanske du lyckas lura ut felet själv?

För övrigt undrar jag vad raden
Kod:
$rows[] = $row
fyller för funktion i ditt script, varför har du den där och vad ska den göra?

Du går ju inte ens igenom någon while loop i länken!

Sökte på internet och hittade en person med nästan samma fel, han hade fått svaret att han behövde samla alla i en array så försökte mig på samma sak utan framgång.

Såhär var exemplet

Kod:
$rows =  array();
while($row = mysql_fetch_array($result)) {
    $rows[] = $row;
}
return $rows;

Citat:
Ursprungligen postat av killing.fields
Nu är jag inte php kunnig, men ditt vilkor blir tillsynes uppfyllt direkt.

Prova att lägg fetchen innan och for/while loop genom vektor sedan.

Menar du att jag ska placera mail utanför?
__________________
Senast redigerad av Linguas 2017-12-15 kl. 22:55.
Citera
2017-12-15, 22:55
  #6
Moderator
Protons avatar
Citat:
Ursprungligen postat av Linguas
Du går ju inte ens igenom någon while loop i länken!

Sökte på internet och hittade en person med nästan samma fel, han hade fått svaret att han behövde samla alla i en array så försökte mig på samma sak utan framgång.
Hade man läst igenom inlägget ordentligt hade man sett följande del:

Citat:
nu kommer frågan skrivas ut och nu kan vi dessutom köra den direkt mot databasen för att se vad den gör. I detta läge blir det dessutom väldigt enkelt att upptäcka saknade tecken här och där, eller andra dumheter man kan ha försökt göra.

Så, är du säker på att din fråga verkligen ger dig mer än ett svar? Felet sitter knappast i whileloopen utan i termineringsvillkoret för whileloopen.
Citera
2017-12-15, 23:06
  #7
Medlem
Linguass avatar
Citat:
Ursprungligen postat av Proton
Hade man läst igenom inlägget ordentligt hade man sett följande del:



Så, är du säker på att din fråga verkligen ger dig mer än ett svar? Felet sitter knappast i whileloopen utan i termineringsvillkoret för whileloopen.

Nej det är det inte, felet är garanterat i WHILE loopen. Allt annat är redan kontrollerat.

Att skriva på följande sätt för ingen skillnad:

Kod:
$query = "SELECT * FROM $table WHERE country = '$country'"; 

Det var väll det du syftade på.
__________________
Senast redigerad av Linguas 2017-12-15 kl. 23:09.
Citera
2017-12-15, 23:17
  #8
Moderator
Protons avatar
Citat:
Ursprungligen postat av Linguas
Nej det är det inte, felet är garanterat i WHILE loopen. Allt annat är redan kontrollerat.

Att skriva på följande sätt för ingen skillnad:

Kod:
$query = "SELECT * FROM $table WHERE country = '$country'"; 

Det var väll det du syftade på.
Det gör ingen skillnad, men nu har du ju en chans att kunna få tag på den frågan du kör och köra den direkt mot databasen. Får du bara en rad där, vilket är rätt sannolikt?
Citera
2017-12-15, 23:55
  #9
Medlem
Linguass avatar
Löste det!
Citera
2017-12-16, 00:09
  #10
Medlem
Citat:
Ursprungligen postat av Linguas
Löste det!
Vad var problemet och hur löste du det?
Citera
2017-12-16, 10:36
  #11
Medlem
Linguass avatar
Citat:
Ursprungligen postat av e7andy
Vad var problemet och hur löste du det?

Postar hela koden sen när jag kommer hem och visar vart felet var.
Citera
2017-12-17, 10:08
  #12
Medlem
Citat:
Ursprungligen postat av Linguas
Postar hela koden sen när jag kommer hem och visar vart felet var.
Hejsan.

Hoppas att denna koden inte är tänkt att användas i produktion då den är mottaglig för SQL Injections.
Du måste sanitera inputen från användarna och/eller använda prepared statements.

MVH
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback