12. juli 2011 - 16:22Der er
12 kommentarer og 1 løsning
Søgning i MySQL med mulighed for at sende mail til resultat.
Hej.
Jeg har en database med navn og email. Hvordan laver jeg en søgning på navn? Herefter skal der være mulighed for at afkrydse en boks, hvis der skal sendes en mail til personen.
Jeg er med på, at der skal bruges noget i stil med: En POST-form med søgefeltet og så: <?php require("config.php"); $search = &$HTTP_POST_VARS['search']; if(empty($search)) { ?> <br><a href="index.php?pageid=2">Intet resultat.</a> <?php } else {
$navn = &$HTTP_POST_VARS['navn']; if(empty($navn)) { echo 'Feltet skal udfyldes.<br>
Hvis du bruger LIKE skal det i det mindste se ud som noget i retning af "WHERE navn LIKE '%$navn%'", men så risikerer du at sende ud til nogen som ikke har bedt om mail.
Hvis der er UNIQUE INDEX på 'navn' kan du bare hente navnet og du behøver ikke ORDER BY når du kun får 1 rec tilbage. $query = mysql_query("SELECT * FROM table WHERE navn = $navn";);
I øvrigt er 'table' et dårligt navn til en tabel, hvis det er virkeligheden.
Nu har jeg fået lavet sådan at den henter navnet frem, hvis det eksisterer i databasen, MEN jeg får fejlen
Unknown column 'søgetekst' in 'where clause'
hvis navnet ikke står i databasen.
Hvordan gør jeg sådan, at den giver en melding om "Ingen resultater" hvis der ikke er noget der passer på søgningen?
Er det desuden muligt at søge på flere kriterier hvor et eller flere skal være opfyldte for at give et søgeresultat?
min kode er nu: <?php require("config.php"); $add = &$HTTP_POST_VARS['search']; if(empty($search)) { ?> <br><a href="index.php?pageid=5">Fejl!Ingen indtastning i søgefeltet.</a> <?php } else {
$fornavn = &$HTTP_POST_VARS['fornavn'];
if(empty($fornavn)) { echo '<font color="red"><b>Fejl!</b></font><br>Søgefeltet skal udfyldes.<br><br> <a href="index.php?pageid=5"><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 fornavn = $fornavn ORDER BY id") or die(mysql_error()); while($row = mysql_fetch_assoc($query)) { echo" <tr> <td width=\"50%\"><p align=\"center\">".$row['fornavn']."</p></td> </tr> "; } } } ?>
Unknown column 'søgetekst' in 'where clause' Der må være en fejl et andet sted. Det er MySQL der giver den, men det kan være alt mulig andet end en SELECT. Den query du har angivet kan ikke være årsagen. Prøv at lave dine queries om således: $sel = "den helvedes lange querystreng du skal sende afsted"; echo "$sel <br />"; $qry = mysql_query($sel) or die(mysql_error());
Hvordan gør jeg sådan, at den giver en melding om "Ingen resultater" hvis der ikke er noget der passer på søgningen? if (mysql_num_rows($query) == 0) echo "Ingen resultater";
Er det desuden muligt at søge på flere kriterier hvor et eller flere skal være opfyldte for at give et søgeresultat? Ja, du skal bruge AND og OR sammen med nødvendige (), men der bliver du nødt til at læse om tingene.
Jeg har nu forsøgt at tilføje "Ingen resultater" og ændre det du sagde, men nu får jeg bare en blank skærm ved at trykke på søg. Jeg får heller ikke nogen fejlmeddelelse hvis der ikke er indtastet noget i felterne.
if(empty($fornavn)) { echo '<font color="red"><b>Fejl!</b></font><br>Søgefeltet skal udfyldes.<br><br> <a href="index.php?pageid=5"><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); $sel = mysql_query("SELECT * FROM brugergruppe WHERE fornavn = $fornavn ORDER BY id") echo "$sel <br />"; $qry = mysql_query($sel) or die(mysql_error()); if (mysql_num_rows($query) == 0) { echo ("Ingen resultater"); } else { while($row = mysql_fetch_assoc($query)) { echo" <tr> <td width=\"50%\"><p align=\"center\">".$row['fornavn']."</p></td> </tr> "; } } } ?>
if(empty($fornavn AND empty($efternavn) AND empty($adresse) AND empty($alder) AND empty($koen) AND empty($email) AND empty($tlfnr))
{ echo '<font color="red"><b>Fejl!</b></font><br>Søgefeltet skal udfyldes.<br><br> <a href="index.php?pageid=5"><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 (fornavn = '$fornavn' AND efternavn = '$efternavn') ORDER BY id") or die(mysql_error());
typisk... har slemt at slutte en parantes... i empty($fornavn).. Nu virker scriptet.
Nu til min anden problemstilling.. Jeg skal nu kunne vælge hvilke af søgeresultaterne der skal modtage en mail, evt. med en checkbox. Hvordan udvælger jeg dem og sender dem videre til et mailscript?
Det synes jeg du skal spørge om i en ny tråd med en ny overskrift der er lisså sigende som den du har på dette spørgsmål. Husk på folk der søger kigger bl.a. på overskriften.
Jeg værtsætter den hjælp jeg allerede har fået af dig, men du har egentligt kun givet mig en halv besvarelse. Overskriften her indeholder også mit andet problem, og det er desuden udspecificeret i teksten under overskriften: "Søgning i MySQL MED MULIGHED FOR AT SENDE MAIL TIL RESULTAT."
samt: Jeg har en database med navn og email. Hvordan laver jeg en søgning på navn? HEREFTER SKAL DER VÆRE MULIGHED FOR AT AFKRYDSE EN BOKS, HVIS DER SKAL SENDES EN MAIL TIL PERSONEN.
Jeg føler derfor ikke umiddelbart selv der bør oprettes et nyt spørgsmål.
Har du mulighed for at hjælpe med den sidste del af spørgsmålet?
OK. Men for at kunne hjælpe dig må jeg forstå dit problem, og det betyder at du må beskrive det nøjere.
1. Den SQL du sender afsted forlanger et resultat hvor både fornavn og efternavn er samme som det brugeren har indtastet. Hvis du kan forvente flere hits med den query er der noget helt galt med din database. Du skulle kun kunne forvente 1 eller 0.
Well, jeg ser bort fra at du kan have 6 brugere der hedder "Jens Jensen". Hvis det er tilfældet mår du konstruere noget der kan adskille dem f.eks. et unikt brugernavn.
Altså er dit loop med while($row = mysql_fetch_assoc($query)) { - ikke forkert, men kan skrives bedre. Se php-manualen under "mysql".
2.Du vedholder din "ORDER BY". Altså må man forvente at der alligevel kan komme flere, hvilket må betyde at du i din søgeformular har mulighed for at brugeren kan skrive "Vi%" og dermed forvente at få brugere der hedder Viggo og Viola eller Jens og Jette med "je%". Hvilket betyder at dit loop alligevel er i orden.
3.Det er da rigtigt at din kode som den er nu mangler både <HTML>, <BODY> og <TABLE>. Bortset fra at jeg ikke kan se hvad du har i din "config.php", er det jo ting der skal spørges om et andet sted.
4.Når alt det er på plads, kan vi begynde at se på hvordan man kommer videre med rent faktisk at sende en mail til den (eller dem) du har fået fat i. Det var det jeg mente med at det var et helt andet problem end det du oprindeligt havde. Du kan starte med at kigge i php-manualen "mail".
Da der egentlig ikke er blevet løst noget og du selv fandt fejlen med den manglende parantes - synes jeg du selv skal smide et svar. Så kunne du jo lægge pointene oveni det nye spørgsmål.
Synes nu du hjalp mig frem til løsningen, så smid et svar :) Kan heller ikke finde ud af at redigere point til det nye spørgsmål jeg allerede havde oprettet. Så det er mest fair du får dem her :)
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.