Avatar billede Frederik Nybegynder
20. juli 2011 - 23:32 Der er 18 kommentarer og
1 løsning

Søgning i MySQL hvor resultater skal tilføjes i mailscript.

Hej.

Jeg har to problemstillinger:
1. Jeg har et søgescript der ikke rigtigt vil give noget resultat fra MySQL.
2. Når søgningen virker, skal resultatet (mailadresser)tilføjes i et script.


1. Her er koden til søgningen:
<?php
require("config.php");
$search = &$HTTP_POST_VARS['search'];
if(empty($search)) {
?>
 
  <br><a href="index.php?pageid=3">Fejl!Ingen indtastning i søgefeltet1.</a>
 
<?php
 
    } else {
                                $postnummer = &$HTTP_POST_VARS['postnummer'];
                                $town = &$HTTP_POST_VARS['town'];
                                $koen = &$HTTP_POST_VARS['koen'];
                                $alder1 = &$HTTP_POST_VARS['alder1'];
                                $alder2 = &$HTTP_POST_VARS['alder2'];
                                $region = &$HTTP_POST_VARS['region'];

if(empty($postnummer) AND empty($town) AND empty($koen) AND empty($alder1) AND empty($alder2) AND empty($region))

    {
    echo '<font color="red"><b>Fejl!</b></font><br>Søgefeltet skal udfyldes.
    <br><br>
    <a href="index.php?pageid=3"><b>Tryk her for at blive sendt til søgeformularen</b></a>';
    }

    else {
mysql_connect($mysql_host, $mysql_user, $mysql_pw);
mysql_select_db($mysql_db);
$query = mysql_query("SELECT * FROM brugergruppe WHERE ((postnummer = '$postnummer' OR town = '$town' OR koen = '$koen' OR region = '$region') AND (alder BETWEEN '$alder1' AND '$alder2')) ORDER BY id") or die(mysql_error());

if (mysql_num_rows($query) == 0)

{
echo ("Søgningen gav desværre ingen resultater.");
} else {

while($row = mysql_fetch_assoc($query)) {
  echo"
    <div id=\"searchresult\">".$row['fornavn']."</div>
    <div id=\"searchresult\">".$row['efternavn']."</div>
    <div id=\"searchresult\">".$row['adresse']."</div>
    <div id=\"searchresult\">".$row['alder']."</div>
    <div id=\"searchresult\">".$row['koen']."</div>
    <div id=\"searchresult\">".$row['email']."</div>
    <div id=\"searchresult\">".$row['tlfnr']."</div>
  ";
}
}
}
}
?>











Mailscriptet som resultaterne gerne skal tilføjes i er:
Og resultaterne skal gerne tilføjes der hvor der står:
'receiver@domain.org', 'other@domain.org'




require_once 'lib/swift_required.php';

//Create the Transport
$transport = Swift_SmtpTransport::newInstance('localhost', 25);

//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

//Create a message
$message = Swift_Message::newInstance('Emne')
  ->setFrom(array('mail@mail.com' => 'NoReply'))
  ->setBody('En eller anden besked')
  ;

//Send the message
$failedRecipients = array();
$numSent = 0;
$to = array('receiver@domain.org', 'other@domain.org' => 'A name');

foreach ($to as $address => $name)
{
  $message->setTo(array($address => $name));
  $numSent += $this->send($message, $failedRecipients);
}

printf("Sent %d messages\n", $numSent);




Jeg håber I kan hjælpe mig med at nå frem til en løsning!
Avatar billede vagnk Juniormester
21. juli 2011 - 04:07 #1
Kære xuzem
Her har du et forslag. Se om det er noget i den retning du søger. Mine kommentarer til din kodning og mine forslag er indlagt som ### comment.

Jeg understreger at det er helt utestet, men skulle der være fejl er de ikke større end at du selv kan finde dem. God vind.


<?php
require("config.php");
$search = &$HTTP_POST_VARS['search'];
if(empty($search)) {
  echo "<br><a href='index.php?pageid=3'>";
  echo "Fejl!Ingen indtastning i søgefeltet1.</a>\n";
}
else {
  ### Vi kommer fra en formular med en række felter
  ### der alle skal være udfyldt for at blive godkendt.
  ###
  ### $HTTP_POST_VARS frarådes i php-manualen.
  $fejl = false;
  foreach ($_POST as $nam => $val){
    if (empty($nam)){
      $fejl = true;
      break;
    }
  }
  if ($fejl){
    echo "<font color='red'><b>Fejl!</b></font>";
    echo "<br>Søgefeltet skal udfyldes.<br><br>";
    echo "<a href='index.php?pageid=3'>";
    echo "<b>Tryk her for at blive sendt til søgeformularen</b></a>\n";
    exit;
  }
 
  ### Nu er vi sikre på at alle felter er udfyldt.
  ### Dermed undgår vi fejl i query samt manglende
  ### indexes i $_POST vars.
  ###
  ### Du skulle overveje at give brugeren mulighed
  ### for at vælge enkelte felter.
  ### F.eks. alle kvinder i Køge uanset alder eller
  ### alle mellem 25 og 35 uanset hvor de bor.
  ###
  ### Se osse kommentar ved query.
  ###
  $postnummer = $_POST['postnummer'];
  $town = $_POST['town'];
  $koen = $_POST['koen'];
  $alder1 = $_POST['alder1'];
  $alder2 = $_POST['alder2'];
  $region = $_POST['region'];

  mysql_connect($mysql_host, $mysql_user, $mysql_pw);
  mysql_select_db($mysql_db);
 
  ### Postnummer og aldre bør være INT i tabellen og
  ### så er der ikke behov for quotes.
  ###
  ### Denne WHERE-clause ser mærkelig ud. Hvis han
  ### indtaster 2000 i postnummer og Roskilde i town
  ### får han så vidt jeg kan se alle i både Roskilde
  ### og Frederiksberg. Er det det der er meningen?
  ### Hvis du har en AND i stedet for OR vil der ikke
  ### være hit på 2000 og Roskilde - og det lyder
  ### logisk, men det er ikke sådan lige at skifte OR med AND.
  $sel = "SELECT * FROM brugergruppe ";
  $sel .= "WHERE ((postnummer = '$postnummer' ";
  $sel .= "OR town = '$town' ";
  $sel .= "OR koen = '$koen' ";
  $sel .= "OR region = '$region') ";
  $sel .= "AND (alder BETWEEN '$alder1' AND '$alder2')) ";
  $sel .= "ORDER BY id ";
  $query = mysql_query($sel) or die(mysql_error());

  if (mysql_num_rows($query) == 0){
    echo ("Søgningen gav desværre ingen resultater.");
  }
  else {
    $to_str = "";
    $navn_arr = $mail_arr = array();
    while($row = mysql_fetch_assoc($query)) {
      echo "<div id='searchresult'>".$row['fornavn']."</div>\n";
      echo "<div id='searchresult'>".$row['efternavn']."</div>\n";
      echo "<div id='searchresult'>".$row['adresse']."</div>\n";
     
      ### De tre næste har jeg tilføjet
      $navn = $row['fornavn'] . " " . $row['efternavn'];
      echo "<div id='searchresult'>".$row['mail']."</div>\n";
      $mail = $row['mail'];
     
      echo "<div id='searchresult'>".$row['alder']."</div>\n";
      echo "<div id='searchresult'>".$row['koen']."</div>\n";
      echo "<div id='searchresult'>".$row['email']."</div>\n";
      echo "<div id='searchresult'>".$row['tlfnr']."</div>\n";
     
      ### Dan en streng med mailadresser. Sådan ville jeg
      ### gøre til en normal mail(args);. Efter while-loppet
      ### renses strengen for de to første tegn.
      $to_str .= ", $navn <$mail>";
     
      ### Men det ser ud som om Swift forlanger det anderledes.
      ### To arrays til Swift_mail
      $navn_arr [] = $navn;
      $mail_arr [] = $mail;
    }
  }
}

/**
Mailscriptet som resultaterne gerne skal tilføjes i er:
Og resultaterne skal gerne tilføjes der hvor der står:
'receiver@domain.org', 'other@domain.org'
*/

require_once 'lib/swift_required.php';

//Create the Transport
$transport = Swift_SmtpTransport::newInstance('localhost', 25);

//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

//Create a message
$message = Swift_Message::newInstance('Emne')
  ->setFrom(array('mail@mail.com' => 'NoReply'))
  ->setBody('En eller anden besked')
  ;

//Send the message
$failedRecipients = array();
$numSent = 0;

### Her er vi ved et sted jeg ikke kender, så der må selv
### kigge i docs til SwiftMail.
### Der hvor jeg blandt andet er usikker er om
### setTo() i loopet selv monterer < og > omkring mailadr.
### Men umiddelbart og logisk:
$to = array($mail_arr => $navn_arr);
#$to = array('receiver@domain.org', 'other@domain.org' => 'A name');

foreach ($to as $address => $name)
{
  $message->setTo(array($address => $name));
  $numSent += $this->send($message, $failedRecipients);
}

printf("Sent %d messages\n", $numSent);

?>
Avatar billede Frederik Nybegynder
21. juli 2011 - 16:13 #2
Jeg forsøger med dit forslag.

lige et par tilføjelser og opfølgninger på dine kommentarer:

- Alle felter skal ikke nødvendigvis være udfyldte. bare mindst ét er. Er det muligt?

- Hvordan gøres så man kan gøre, som du fx siger: Søge på "mand alder 24-35" og så give de resultater der måtte forekomme, eller "region nordjylland samt alder 30-40"?

- det er meningen, at man skal kunne vælge fx postnummer, town og et alders interval... Den skal så retunere de resultater der passer på postnummer med aldersinterval samt town med aldersinterval.

- Er det muligt, at de mail's der bliver posted i $to = array er på formen "'receiver@domain.org',". Således de er separeret med et komma? Hvis det er muligt, sørger swiftmailer selv for at sende til hver enkelt mailadresse på en måde, således modtageren kun ser sig selv som modtager og ikke de andre modtagere.
Avatar billede Frederik Nybegynder
21. juli 2011 - 16:34 #3
Jeg får en række fejl:


Hvis der ikke er noget søgeresultat, får jeg følgende:

Søgningen gav desværre ingen resultater. Notice: Undefined variable: mail_arr in /customers/5/5/c/side.dk/httpd.www/name/search/searchresult.php on line 91 Notice: Undefined variable: navn_arr in /customers/5/5/c/side.dk/httpd.www/name/search/searchresult.php on line 91 Fatal error: Uncaught exception 'Swift_RfcComplianceException' with message 'Address in mailbox given [] does not comply with RFC 2822, 3.6.2.' in /customers/5/5/c/side.dk/httpd.www/name/lib/classes/Swift/Mime/Headers/MailboxHeader.php:308 Stack trace: #0 /customers/5/5/c/side.dk/httpd.www/name/lib/classes/Swift/Mime/Headers/MailboxHeader.php(238): Swift_Mime_Headers_MailboxHeader->_assertValidAddress('') #1 /customers/5/5/c/side.dk/httpd.www/name/lib/classes/Swift/Mime/Headers/MailboxHeader.php(96): Swift_Mime_Headers_MailboxHeader->normalizeMailboxes(Array) #2 /customers/5/5/c/side.dk/httpd.www/name/lib/classes/Swift/Mime/Headers/MailboxHeader.php(60): Swift_Mime_Headers_MailboxHeader->setNameAddresses(Array) #3 /customers/5/5/c/side.dk/httpd.www/name/lib/classes/Swift/Mime/SimpleHeaderFactory.php(60): Swift_Mime_Headers_MailboxHeader->setFieldBodyModel(Array) #4 /customers/5/5/c/side.dk/httpd.www/name/lib/classes/Swift/Mime/SimpleHeaderSet.php(75): Swift_Mime_SimpleHeaderFactory->cre in /customers/5/5/c/side.dk/httpd.www/name/lib/classes/Swift/Mime/Headers/MailboxHeader.php on line 308





Er der et søgeresultat får jeg fejlen:

Notice: Undefined index: mail på linje 55
Dvs. echo "<div id='searchresult'>".$row['mail']."</div>\n";


og


Notice: Undefined index: mail på linje 56
Dvs. $mail = $row['mail'];


og


Warning: Illegal offset type på linje 91
Dvs. $to = array($mail_arr => $navn_arr);
Avatar billede Frederik Nybegynder
21. juli 2011 - 18:33 #4
Efter nærmere eftertanke, er det, som jeg har behov for, at få præsenteret et søgeresultat, hvorefter jeg kan afvinge/afkrydse de brugere som der skal sendes mails til. Dvs. det ikke nødvendigvis er dem alle sammen der skal have en mail.


Desuden skal søgekriterierne tilpasses lidt. Har forsøgt, men kan ikke få det rigtige resultat.

Det jeg gerne skal bruge er:
hvis søgefeltet er udfyldt skal kriteriet være opfyldt og hvis søgekriteriet ikke er udfyldt skal den godtage en NULL/empty værdi.

For at dele det op, tager jeg lige søgefunktionen for sig selv, og når det virker håber jeg, at I kan hjælpe med at få tilføjet mail-delen:


<?php
require("config.php");
if (!isset($_POST['search'])) {
    $search = NULL;
} else {
$search = $_POST['search'];             
}
if(empty($search)) {
?>



 
  <br><a href="index.php?pageid=3">Fejl!Ingen indtastning i søgefeltet1.</a>
 
<?php
 
    } else {
                                $postnummer = $_POST['postnummer'];
                                $town = $_POST['town'];
                                $koen = $_POST['koen'];
                                $alder1 = $_POST['alder1'];
                                $alder2 = $_POST['alder2'];
                                $region = $_POST['region'];

if(empty($postnummer) AND empty($town) AND empty($koen) AND empty($alder1) AND empty($alder2) AND empty($region))

    {
    echo '<font color="red"><b>Fejl!</b></font><br>Søgefeltet skal udfyldes.
    <br><br>
    <a href="index.php?pageid=3"><b>Tryk her for at blive sendt til søgeformularen</b></a>';
    }

    else {
mysql_connect($mysql_host, $mysql_user, $mysql_pw);
mysql_select_db($mysql_db);
$query = mysql_query("SELECT * FROM brugergruppe WHERE (((postnummer = '$postnummer' OR postnummer = 'NULL') AND town = '$town' AND koen = '$koen' AND region = '$region') AND (alder BETWEEN '$alder1' AND '$alder2')) ORDER BY id") or die(mysql_error());

if (mysql_num_rows($query) == 0)

{
echo ("Søgningen gav desværre ingen resultater.");
} else {

while($row = mysql_fetch_assoc($query)) {
  echo"
    <div id=\"searchresult\">".$row['fornavn']."</div>
    <div id=\"searchresult\">".$row['efternavn']."</div>
    <div id=\"searchresult\">".$row['adresse']."</div>
    <div id=\"searchresult\">".$row['alder']."</div>
    <div id=\"searchresult\">".$row['koen']."</div>
    <div id=\"searchresult\">".$row['email']."</div>
    <div id=\"searchresult\">".$row['tlfnr']."</div>
  ";
}
}
}
}
?>
Avatar billede vagnk Juniormester
22. juli 2011 - 08:05 #5
Ad #3

Den Fatal du får er fra Swift. Den siger: Address in mailbox given [] does not comply with RFC 2822, 3.6.2.
Det er sikkert linjen med "$message->setTo(array($address => $name));" der genererer nogle forkerte adresser. Her må vi lave lidt arbejdsfordeling. Som jeg skrev var jeg ikke sikker på hvordan Swift forventede data. Det er din opgave at finde ud af i detaljer hvordan Swifts metoder forventer data. Skal der < og > med til Swift eller skal det bare være to strenge med hhv mailadr. og navn eller skal det være arrays? Det står garanteret i deres doc.

Så får du Undefined variable: mail_arr og Undefined variable: navn_arr på linje 91. Hvad står der i linje 91? Har du husket linjen med "$navn_arr = $mail_arr = array();"? Hvis søgningen ikke giver noget resultat, kommer du aldrig ind i det loop der sætter de to arrays. Det betyder at linjen med "$to = array($mail_arr => $navn_arr);" fuldt berettiget kvabber sig over at de to arrays aldrig er blevet dannet.

Med andre ord: find ud af hvad du vil hvis der ingen hits er.

Det med logikken tager vi fat i når du har tingene oppe at køre.
Avatar billede vagnk Juniormester
22. juli 2011 - 08:23 #6
Du skriver:

Er der et søgeresultat får jeg fejlen:

Notice: Undefined index: mail på linje 55
Dvs. echo "<div id='searchresult'>".$row['mail']."</div>\n";
og
Notice: Undefined index: mail på linje 56
Dvs. $mail = $row['mail'];
og
Warning: Illegal offset type på linje 91
Dvs. $to = array($mail_arr => $navn_arr);


Midt i loopet skrev jeg:
### De tre næste har jeg tilføjet
$navn = $row['fornavn'] . " " . $row['efternavn'];
echo "<div id='searchresult'>".$row['mail']."</div>\n";
$mail = $row['mail'];

Det betyder på dansk at du ikke bare skal skøjte henover. Har du et felt i tabellen der hedder "mail" eller noget lignende der indeholder en mailadresse?
Avatar billede Frederik Nybegynder
22. juli 2011 - 15:54 #7
Mail-adresserne skal tilføjes som array:

fra http://swiftmailer.org/docs/messages.html står det:
"If you want to include a name then you must use an associative array."

kode:
$message->setTo(array('some@address.tld', 'other@address.tld'));







Det der står i linje 91 er:
$to = array($mail_arr => $navn_arr);

og ja, har husket linjen med:
$navn_arr = $mail_arr = array();

Denne linje er placeret lige ovenover:
    while($row = mysql_fetch_assoc($query)) {
      echo "<div id='searchresult'>".$row['fornavn']."</div>\n";
      echo "<div id='searchresult'>".$row['efternavn']."</div>\n";
      echo "<div id='searchresult'>".$row['adresse']."</div>\n";




Hvis der ikke er nogle hits, skal den give en melding om, at der ikke er noget søgeresultat.





Har desuden rettet mail til email, hvilket er hvad min tavel hedder i databasen.


Men ved et resultat får jeg følgende fejl nu:

Warning: Illegal offset på linje 91 som før..







Der er dog en ting jeg godt kunne tænke mig var muligt.

Søge i databasen først, derefter vælge hvilke resultater der skal sendes mail til og så først der sende en mail. Er det muligt?
Avatar billede vagnk Juniormester
23. juli 2011 - 03:50 #8
Du vil gøre os begge en tjeneste ved ikke at stille så mange spørgsmål på en gang. Prøv at sortere dine problemer og stil dine spørgsmål lidt mere grupperet. Måske ville andre byde ind hvis dine spørgsmål var lidt mere strukturerede. Søgelogikken taget vi fat i når programstumpen kører.

1:
Efter linjen :
echo ("Søgningen gav desværre ingen resultater.");

tilføjer du:
exit;

Du skal naturligvis lave en knap eller et link (som vist i en anden af dine tråde) så han kommer tilbage til siden med søgefelter.

2:
Jeg forstår ikke helt denne
"If you want to include a name then you must use an associative array."

En "associative array" - er en array der er bygget op med den specielle array konstruktion "=>". På dansk har vi indenfor psykologi en association når en tankerække føder en ny tankerække. I en associeret array ville "Vagn K" => "vagns_mail@adresse.nu" medføre at man bruger "Vagn K" som index til at få hans mailadresse. Jeg kalder det sommetider en indekseret array, men det er vist lidt upræcist.
Eksemplet
"$message->setTo(array('some@address.tld', 'other@address.tld'));"
er ikke en associeret array men bare en endimensional array.
Det første led "If you want to include a name" henviser til den  mailadresse konstruktion der ligner "Vagn K <vagns_mail@adresse.nu>" - altså et navn efterfulgt af en mailadresse omkranset af < og >.

Så jeg tror ikke på at det er det eneste eksempel Swift har i deres dokumentation. Den arbejdsdeling jeg tidligere har talt om, er blandt andet en opfordring til at læse Swifts doc lidt grundigere. Jeg kan godt sidde og gætte på forskellige løsninger, men så bliver dette en lang tråd. Jeg kunne osse selv downloade Swift og læse dokumentationen, men det synes jeg er lidt for flovt for den ene af os.

Det vi skal er at vi inde i loopet laver en associative array.
Et eller andet der ligner
$swift_arr .= "'$navn' => '$mail'";

Hvis du vil læse lidt om dem har du et link her http://dk2.php.net/manual/en/language.types.array.php. Før eller siden skal du alvorligt i gang med dem, så tiden er ikke spildt.

I den næste uges tid sidder jeg på en klit med meget lidt adgang til spindet, så hvis min opmærksomhed her ikke er helt på dupperne er der en forklaring.
Avatar billede Frederik Nybegynder
29. juli 2011 - 19:27 #9
Jeg har fået det til at virke med at ændre $to til dette:

$to = array_combine($mail_arr, $navn_arr);

Nu får jeg sendt mails som de skal se ud - så det er helt super!


Jeg er dog interesseret i at vide, om det er muligt at lave en funktion således, at man kan søge på de forskellige kriterier, og derefter udvælge de resultater som man så ønsker at sende mails til?

dvs.

1. Søgning der opfylder kriterier
2. Få listen med resultater frem.
3. Udvælge bestemte resultater fra listen og derefter sende mails til de udvalgte.
Avatar billede Frederik Nybegynder
26. august 2011 - 22:48 #10
Jeg har nu forsøgt at lave følgende kode:

$navn = $row['fornavn'] . " " . $row['efternavn'];
      $mail = $row['email'];
    echo "<form action='index.php?pageid=6' method='post'>";
    echo "<div id='searchresult'>".$row['fornavn']." ".$row['efternavn'].", ".$row['adresse'].", ".$row['postnummer'].", ".$row['town'].", ".$row['alder'].", ".$row['koen'].", ".$row['email'].", ".$row['tlfnr']."<input type='checkbox' name='box[]' value='$mail'></div>\n";
    echo "<div id='right'><input type='submit' name='check' value='Vælg'></form></div>";




og i index.php?pageid=6 har jeg:


<?php
require("config.php");
$checked = $_POST['box'];
if(empty($checked)) {
  echo "Fejl!\n";
}
else {
echo "$checked";
    }


Den giver meddelelsen "array".

Det jeg gerne skal have gemt i den er alle de oplysninger der er trukket ud fra databasen. dvs.

Fornavn, efternavn, adresse, postnummer, town, alder, koen, email og tlfnr.

Er der en måde, hvor jeg kan få sendt de oplysninger videre til den nye side, hvis feltet "checkbox" bliver vinget af?


Håber I kan hjælpe!
Avatar billede vagnk Juniormester
27. august 2011 - 11:10 #11
Med
<input type='checkbox' name='box[]' value='$mail'>

har du sat name='box[]' hvor [] netop gør checkboxen til en array og det er osse korrekt.

Så prøv med:
foreach ($_POST['box'] as $box => $mailadr){
  echo "Checkbox $box indeholder $mailadr<br />\n";
}


Mit bud er at du kun får de mailadresser at se som er markeret.
Avatar billede Frederik Nybegynder
27. august 2011 - 13:33 #12
Super! nu får jeg et resultat.

Checkbox 0 indeholder mail@mail.com


Er det mulig, at tilføje således felterne "fornavn" og "efternavn" også kommer med?

Jeg skal gerne have det til at stå på formen:
   
      $navn_arr [] = $navn;
      $mail_arr [] = $mail;

Således det kan bruges videre i mailscriptet.
Avatar billede vagnk Juniormester
02. september 2011 - 10:02 #13
Til en checkbox er 'box' faktisk et dårligt navn brug hellere 'mail' og det skal sæføli osse rettes i den næste side.
Foran eller efter
"<input type='checkbox' name='mail[]' value='$mail'>"
kunne du lave en
"<input type='hidden' name='navn[]' value='$navn'>".
I skrivende stund er jeg i tvivl om der er behov for [] den sidste, men eksperimenter lidt med det.

Hvis du lægger følgende øverst i modtage-siden får du samtlige POST-variable:
foreach ($_POST as $nam => $val){
  echo "$nam=$val<br />\n";
}
Avatar billede Frederik Nybegynder
02. september 2011 - 19:34 #14
Hvis jeg indsætter:

foreach ($_POST as $nam => $val){
  echo "$nam=$val<br />\n";
}

Får jeg følgende resultat:
navn=Testnavn
mail=Array
check=Vælg


Hvis jeg indsætter:
<?php
require("config.php");
foreach ($_POST['mail'] as $mail => $mailadr);
foreach ($_POST['navn'] as $navn => $navne);
{
  echo "Checkbox $mail indeholder $navne $mailadr<br />\n";
}
    ?>

Får jeg:
Notice: Undefined variable: navne in
Checkbox 1 indeholder Testmail2@mail.com


Selvom jeg har valgt flere checkbokse..

Min kode ser således ud:

<form action='index.php?pageid=6' method='post'>
<?php
require("config.php");
$search = $_POST['search'];
if(empty($search)) {
  echo "<br><a href='index.php?pageid=4'>";
  echo "Fejl!Ingen indtastning i søgefeltet1.</a>\n";
}
else {

  $fejl = false;
  foreach ($_POST as $nam => $val){
    if (empty($nam)){
      $fejl = true;
      break;
    }
  }
  if ($fejl){
    echo "<font color='red'><b>Fejl!</b></font>";
    echo "<br>Søgefeltet skal udfyldes.<br><br>";
    echo "<a href='index.php?pageid=4'>";
    echo "<b>Tryk her for at blive sendt til søgeformularen</b></a>\n";
    exit;
  }
 

  $postnummer = $_POST['postnummer'];
  $town = $_POST['town'];
  $koen = $_POST['koen'];
  $alder1 = $_POST['alder1'];
  $alder2 = $_POST['alder2'];
  $region = $_POST['region'];

  mysql_connect($mysql_host, $mysql_user, $mysql_pw);
  mysql_select_db($mysql_db);
 

  $sel = "SELECT * FROM brugergruppe ";
  $sel .= "WHERE ((postnummer = '$postnummer' ";
  $sel .= "OR town = '$town' ";
  $sel .= "OR koen = '$koen' ";
  $sel .= "OR region = '$region') ";
  $sel .= "AND (alder BETWEEN '$alder1' AND '$alder2')) ";
  $sel .= "ORDER BY id ";
  $query = mysql_query($sel) or die(mysql_error());

  if (mysql_num_rows($query) == 0){
    echo ("Søgningen gav desværre ingen resultater.");
    exit;
  }
  else {
    $to_str = "";
    $navn_arr = $mail_arr = array();
    while($row = mysql_fetch_assoc($query)) {
      $navn = $row['fornavn'] . " " . $row['efternavn'];
      $mail = $row['email'];

    echo "<div id='searchresult'>".$row['fornavn']." ".$row['efternavn'].", ".$row['adresse'].", ".$row['postnummer'].", ".$row['town'].", ".$row['alder'].", ".$row['koen'].", ".$row['email'].", ".$row['tlfnr']."<input type='hidden' name='navn' value='$navn'><input type='checkbox' name='mail[]' value='$mail'></div>\n";
 

     
      $to_str .= ", $navn <$mail>";
     

      $navn_arr [] = $navn;
      $mail_arr [] = $mail;
    }
  }
}

?>
<div id='right'><input type='submit' name='check' value='Vælg'></form></div>




Jeg kan ikke umiddelbart se hvor det går galt. Så håber, at du kan hjælpe.
Avatar billede vagnk Juniormester
03. september 2011 - 09:13 #15
Foroven:
Hvad er der galt i disse linjer?

foreach ($_POST['mail'] as $mail => $mailadr);
foreach ($_POST['navn'] as $navn => $navne);
{
  echo "Checkbox $mail indeholder $navne $mailadr<br />\n";
}


Længere nede:
Hvorfor insisterer du på at kalde dine inputfelter 'check' i stedet for noget beskrivende f.eks. 'subm'?

<div id='right'><input type='submit' name='check' value='Vælg'></form></div>


Nederst:

$to_str .= ", $navn <$mail>";

$navn_arr [] = $navn;
$mail_arr [] = $mail;


Brug hellere "&gt;" og "&lt;" omkring $mail i stedet for > og <. Tegnene har en betydning og bliver brugt af browseren.

Hvad laver de to sidste linjer?

Jeg bad dig om at eksperimentere lidt med at lave navnefeltet som array og ikke array. Hvad blev resultatet af den test?
Avatar billede Frederik Nybegynder
09. september 2011 - 17:32 #16
1.
Nu er jeg ikke helt sikker på hvad du mener med:
Hvad der er galt i linjerne:
foreach ($_POST['mail'] as $mail => $mailadr);
foreach ($_POST['navn'] as $navn => $navne);
{
  echo "Checkbox $mail indeholder $navne $mailadr<br />\n";
}

Hvis jeg indsætter ovenstående I index.php?pageid=6 får jeg:
Warning: Invalid argument supplied for foreach() in ..... on line 4
Notice: Undefined variable: navne in ........ on line 6
Checkbox 0 indeholder mail1@mail.com



2.
Navnet på inputfeltet er vel lige meget, bare der refereres til det pågældende navn senere? Der sker ikke nogen ændring i outputtet ved at ændre det til subm...

3.
Har forsøgt at indsætte "&gt;" og "&lt;" omkring $mail i stedet for > og <, men der er ikke nogen ændring i output.

4.
Med de sidste to linjer, mener du så?
?> (afslutte php scriptet)?
<div id='right'><input type='submit' name='subm' value='Vælg'></form></div> (afslutte postformen)?


5.
Resultatet ved ved at lave navnfeltet til et array, giver den, ved de to resultater der er I databsen ind til videre:
Hvis nr. 1 er valgt retuneres:  Checkbox 0 indeholder navn2 email1@mail.com
Hvis  nr.2 er valgt retuneres: Checkbox 0 indeholder navn2 email2@mail.com
Hvis nr. 1+2 er valgt retuneres: Checkbox 1 indeholder navn2 email2@mail.com
Avatar billede Frederik Nybegynder
09. september 2011 - 17:36 #17
Til 5.:


ved ikke at lave navnfeltet til et array giver den følgende:

Hvis nr. 1 er valgt retuneres: Warning: Invalid argument supplied for foreach() in .... on line 4
Notice: Undefined variable: navne in .... on line 6
Checkbox 0 indeholder mail1@mail.com



Hvis nr. 2 er valgt retuneres: Warning: Invalid argument supplied for foreach() in .... on line 4
Notice: Undefined variable: navne in .... on line 6
Checkbox 0 indeholder mail2@mail.com


Hvis nr. 1+2 er valgt retuneres: Warning: Invalid argument supplied for foreach() in .... on line 4
Notice: Undefined variable: navne in .... on line 6
Checkbox 1 indeholder mail2@mail.com
Avatar billede Frederik Nybegynder
13. september 2011 - 15:09 #18
Nogen forslag??
Avatar billede Frederik Nybegynder
18. september 2011 - 17:45 #19
- Lukker grundet manglende svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester