28. januar 2006 - 23:35
Der er
40 kommentarer og 1 løsning
Select fra fra 1 - 3 felter skal kalde hele rækken.
Hej eksperter Jeg har bøvlet en hel del med dette problem. Fra søgefelterne "navn" "adr" "tlf" skal man kunne skrive et valgfrit navn, adr eller tlf, når der trykkes på submit hentes alle emner der passer det/de indtastede søgeord. Skrives der ingenting hentes hele tabellen. Søgeresultatet skulle så gerne kaldes frem på en ny side. Jeg har prøvet flere gange men jeg kan kun få alle emner frem på engang.
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
29. januar 2006 - 00:12
#1
Håber dette kan bruges til noget inspiration: //forbind til databasen... $whereArr = array(); if(isset($_POST['navn'])) { $navn = mysql_real_escape_string($_POST['navn']); $whereArr[] = "navn LIKE '%" . $navn . "%' "; } if(isset($_POST['adr'])) { $adr = mysql_real_escape_string($_POST['adr']); $whereArr[] = "adresse LIKE '%" . $adr . "%' "; } if(isset($_POST['tlf'])) { $tlf = mysql_real_escape_string($_POST['tlf']); $whereArr[] = "telefon LIKE '%" . $tlf . "%' "; } $where = ""; if(count($whereArr)>0) { $where = "WHERE "; foreach($where as $search) { $where .= $search; } } $query = mysql_query("SELECT * FROM tabel $where"); if(mysql_num_rows($query)>0) { while($row = mysql_fetch_assoc($query)) { echo $row['feltet']; } }
29. januar 2006 - 08:55
#2
Jacobdo! Det var lige det jeg skulle bruge. Skal bare ha´ sat resultattet pænt op. Smid et svar! Michael
29. januar 2006 - 09:28
#3
Jeg synes at der mangler en OR eller AND mellem de enkelte led i $where...
Dette kan man sagtens klare med noget passende logik i denne kodeblok:
$where = "";
if(count($whereArr)>0)
{
$where = "WHERE ";
foreach($where as $search)
{
$where .= $search;
}
}
- eller man kan simpelthen bruge funktionen implode() i stedet:
$where = "";
if (count($whereArr)>0)
{
$where .= "WHERE " . implode(" AND ", $whereArr); // alternativt " OR ".
}
Læs mere om implode() her:
http://dk.php.net/implode
29. januar 2006 - 10:07
#4
Okay jeg var lidt for hurtig! Jeg får fejl i denne linie. foreach($where as $search) //Warning: Invalid argument supplied for foreach() //Min tilrettede kode <? //db_access include("database.php"); //Henter forespørgelse $whereArr = array(); if(isset($_POST['efternavn'])) { $navn = mysql_real_escape_string($_POST['efternavn']); $whereArr[] = "efternavn LIKE '%" . $navn . "%' "; } if(isset($_POST['adresse'])) { $adr = mysql_real_escape_string($_POST['adresse']); $whereArr[] = "adresse LIKE '%" . $adr . "%' "; } if(isset($_POST['tlf'])) { $tlf = mysql_real_escape_string($_POST['tlf']); $whereArr[] = "tlf LIKE '%" . $tlf . "%' "; } $where = ""; if(count($whereArr)>0) { $where = "indtast"; foreach($where as $search) { $where .= $search; } } $query = mysql_query("SELECT * FROM klienter $where"); if(mysql_num_rows($query)>0) { while($row = mysql_fetch_assoc($query)) { echo "<table border=0 width=300> <tr><td>".$row["fornavn"]." ".$row["efternavn"]."</td></tr> <tr><td>".$row["adresse"]."</td></tr> <tr><td>".$row["adresse2"]."</td></tr> <tr><td>".$row["postnr"]."  ".$row["byen"]."</td></tr> <tr><td>Telefon: ".$row["tlf"]."</td></tr> <tr><td>RKI : ".$row["rki"]." Klient Id.nr.: ".$row[id]."</td></tr> <tr><td>Oprettet af ".$row["vet"]." d. ".$row["dato"]."</td></tr><br> <tr><td>Kommentar: </tr><tr><td>".$row["evt"]."</td></tr> <tr><td bgcolor=#C0C0cc> </td></tr></table>"; } } ?> Kan du se min fejl?
29. januar 2006 - 10:15
#5
Du skal rette: foreach($where as $search) - til: foreach($whereArr as $search) Men erstat hellere den der kodeblok med en implode() som vist i 29/01-2006 09:28:18.
29. januar 2006 - 11:16
#6
nielle Har skiftet din kodeblok ind, så kommer denne her linie //if(mysql_num_rows($query)>0) ud med denne fejl ""Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource".
29. januar 2006 - 11:21
#7
Prøv at ændre denne linje: $query = mysql_query("SELECT * FROM klienter $where"); - til: $sql = "SELECT * FROM klienter $where"; echo "DEBUG: " . $sql . "<br>"; $query = mysql_query($sql) or die(mysql_error()); - og fortæl så hvad du får ud af den.
29. januar 2006 - 11:29
#8
Din søgning i databasens DEBUG: SELECT * FROM klienter indtast efternavn LIKE '%%' or adresse LIKE '%%' or tlf LIKE '%%' You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'efternavn LIKE '%%' or adresse LIKE '%%' or tlf LIKE '%%'' at
29. januar 2006 - 11:46
#9
Prøv med dette i stedet: //Henter forespørgelse $whereArr = array(); if (isset($_POST['efternavn']) && trim($_POST['efternavn']) != "") { $navn = mysql_real_escape_string($_POST['efternavn']); $whereArr[] = "efternavn LIKE '%" . $navn . "%' "; } if (isset($_POST['adresse']) && trim($_POST['adresse']) != "") { $adr = mysql_real_escape_string($_POST['adresse']); $whereArr[] = "adresse LIKE '%" . $adr . "%' "; } if (isset($_POST['tlf']) && trim($_POST['tlf']) != "") { $tlf = mysql_real_escape_string($_POST['tlf']); $whereArr[] = "tlf LIKE '%" . $tlf . "%' "; }
29. januar 2006 - 12:05
#10
Du får ihf lige et svar fra mig! (kan se Nielle er ved at rette min slamkode til) :o)
29. januar 2006 - 12:05
#11
Prøver lige igen!
29. januar 2006 - 12:13
#12
OK nu får jeg ingen fejl, men et tomt skema. //kode //db_access include("database.php"); //Henter forespørgelse $whereArr = array(); if (isset($_POST['efternavn']) && trim($_POST['efternavn']) != "") { $efternavn = mysql_real_escape_string($_POST['efternavn']); $whereArr[] = "efternavn LIKE '%" . $navn . "%' "; } if (isset($_POST['adresse']) && trim($_POST['adresse']) != "") { $adresse = mysql_real_escape_string($_POST['adresse']); $whereArr[] = "adresse LIKE '%" . $adr . "%' "; } if (isset($_POST['tlf']) && trim($_POST['tlf']) != "") { $tlf = mysql_real_escape_string($_POST['tlf']); $whereArr[] = "tlf LIKE '%" . $tlf . "%' "; } $where = ""; if (count($whereArr)>0) { $where .= "indtast " . implode(" or ", $whereArr); // alternativt " OR ". } echo "<table border=0 width=300> <tr><td>".$row["fornavn"]." ".$row["efternavn"]."</td></tr> <tr><td>".$row["adresse"]."</td></tr> <tr><td>".$row["adresse2"]."</td></tr> <tr><td>".$row["postnr"]."  ".$row["byen"]."</td></tr> <tr><td>Telefon: ".$row["tlf"]."</td></tr> <tr><td>RKI : ".$row["rki"]." Klient Id.nr.: ".$row[id]."</td></tr> <tr><td>Oprettet af ".$row["vet"]." d. ".$row["dato"]."</td></tr><br> <tr><td>Kommentar: </tr><tr><td>".$row["evt"]."</td></tr> <tr><td bgcolor=#C0C0cc> </td></tr></table>"; ?>
29. januar 2006 - 12:19
#13
Hvis det her kommer til at virke, skal der såmen nok blive point til jer begge. Jeg var aldrig kommet så langt uden jer, og lidt har jeg jo nok lært undervejs.
29. januar 2006 - 12:22
#14
DAMM! Jeg skal lige i byen. kommer senere!
29. januar 2006 - 14:41
#15
I din sidste postede kode, der mangler du at "skyde" sql'en af: $query = mysql_query("SELECT * FROM klienter $where"); while($row = mysql_fetch_assoc($query)) { //din tabel kode fra dit indlæg: 29/01-2006 12:13:16 echo "<table....... }
29. januar 2006 - 19:03
#16
Har du fået afprøvet det?
29. januar 2006 - 21:43
#17
Ja jeg har prøvet det nu. (familien kaldte) det virke fint med blank søgning. Men ved søgning på navn,adr, eller tlf sker der dette: "Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource" (samtidig bryder mine tablerammer i stykker) //Min kode ser nu sådan ud: <? //db_access include("database.php"); //Henter forespørgelse $whereArr = array(); if (isset($_POST['efternavn']) && trim($_POST['efternavn']) != "") { $efternavn = mysql_real_escape_string($_POST['efternavn']); $whereArr[] = "efternavn LIKE '%" . $navn . "%' "; } if (isset($_POST['adresse']) && trim($_POST['adresse']) != "") { $adresse = mysql_real_escape_string($_POST['adresse']); $whereArr[] = "adresse LIKE '%" . $adr . "%' "; } if (isset($_POST['tlf']) && trim($_POST['tlf']) != "") { $tlf = mysql_real_escape_string($_POST['tlf']); $whereArr[] = "tlf LIKE '%" . $tlf . "%' "; } $where = ""; if (count($whereArr)>0) { $where .= "indtast " . implode(" or ", $whereArr); // alternativt " OR ". } $query = mysql_query("SELECT * FROM klienter $where"); while($row = mysql_fetch_assoc($query)) { echo "<table border=0 width=300> <tr><td>".$row["fornavn"]." ".$row["efternavn"]."</td></tr> <tr><td>".$row["adresse"]."</td></tr> <tr><td>".$row["adresse2"]."</td></tr> <tr><td>".$row["postnr"]."  ".$row["byen"]."</td></tr> <tr><td>Telefon: ".$row["tlf"]."</td></tr> <tr><td>RKI : ".$row["rki"]." Klient Id.nr.: ".$row[id]."</td></tr> <tr><td>Oprettet af ".$row["vet"]." d. ".$row["dato"]."</td></tr><br> <tr><td>Kommentar: </tr><tr><td>".$row["evt"]."</td></tr> <tr><td bgcolor=#C0C0cc> </td></tr></table>"; } ?>
29. januar 2006 - 21:49
#18
fejlen ligger angiveligt i denne linie: //while($row = mysql_fetch_assoc($query))
29. januar 2006 - 21:49
#19
Prøv lige med den debug-kode som jeg skrev i 29/01-2006 11:21:33. Hvad skriver den når det går galt?
29. januar 2006 - 22:01
#20
Jeg tror at jeg kan se fejlen. Ret: $where = ""; if (count($whereArr)>0) { $where .= "indtast " . implode(" or ", $whereArr); // alternativt " OR ". } - til: $where = ""; if (count($whereArr)>0) { $where .= "WHERE " . implode(" or ", $whereArr); // alternativt " OR ". }
29. januar 2006 - 22:05
#21
DEBUG: SELECT * FROM klienter indtast efternavn LIKE '%%' You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'efternavn LIKE '%%'' at line 1
29. januar 2006 - 22:09
#22
Se lige din kode: $efternavn = mysql_real_escape_string($_POST['efternavn']); $whereArr[] = "efternavn LIKE '%" . $navn . "%' "; Du skal selvfølgelig bruge: $whereArr[] = "efternavn LIKE '%" . $efternavn . "%' ";
29. januar 2006 - 22:14
#23
nielle Er rettet iflg. dit forslag, nu kommer der resultat i ved alle forespørgsler, men stadig hele databasens emner. Både ved blank søgning og ved indtastning i et eller flere felter.
29. januar 2006 - 22:17
#24
Kan det skyldes at hver eneste række i din database stemmer over ens med mindst et af søgekriterierne? Prøv evt. med: $where .= "WHERE " . implode(" AND ", $whereArr); // alternativt " OR " - altså med AND-søgning i stedet for en OR-søgning.
29. januar 2006 - 22:20
#25
Det har jeg selv lige prøvet! Samme resultat. Kan det være fordi min søgeform har 3 indtast feltet, men kun en submit?
29. januar 2006 - 22:21
#26
Nej, det lyder ikke som forklaringen. Prøv lige at poste resultatet af en debug-udskrift af en af de SQL'er som giver alt for mange resultater.
29. januar 2006 - 22:24
#27
DEBUG: SELECT * FROM klienter WHERE efternavn LIKE '%%'
29. januar 2006 - 22:26
#28
Se lige jakobdo's rettelse 29/01-2006 22:09:30 - der var nelig en lille fejl ved netop efternavn.
29. januar 2006 - 22:27
#29
... og også her: $adresse = mysql_real_escape_string($_POST['adresse']); $whereArr[] = "adresse LIKE '%" . $adr . "%' "; Den sidste linje skal rettes til: $whereArr[] = "adresse LIKE '%" . $adresse . "%' ";
29. januar 2006 - 22:34
#30
KÆRE VENNER!! I LÆSER NU EN HILSEN FRA AFTENES LYKKELIGST MAND!!!! JEG ACCEPTER LIGE jakobdo´s SVAR, OG SÅ LAVER JEG ET SPØGSMÅL MERE TIL nielle: Tusind mange tak for hjælpen, og tålmodigheden. Michael
29. januar 2006 - 22:35
#31
Ingen grund til det - og i øvrigt må du faktisk ikke give mere en d maks. 200 point for et spørgsmål.
29. januar 2006 - 22:36
#32
Ups har gjort det! Og i har også fortjent det!
30. januar 2006 - 07:48
#33
Nielle, vil du have 50 point her fra? Så har vi delt i porten?
30. januar 2006 - 07:48
#34
Og mibu, tak for point!
30. januar 2006 - 09:43
#35
Jeg har en lille forsigtig forspørgels. Når jeg i min nye fine søgeformular, søger på et ord der ikke findes i databasen. Så kommer der naturligvis ingenting frem. Men min brække lidt ud af rammen. SPØGSMÅL: Kan man rimelig simpelt lave en "default" kunde som dukker op "IF NO MATCH" ? Kunden kan jo opettes i basen og hentes via id. PS. Gør nu ikke noget stort arbejde ud af det. Jeg kan jo også oprette et nyt spørgsmål!
30. januar 2006 - 09:47
#36
Du kan efter din $query = mysql_query()... Lave: if(mysq_num_rows($query)>0) { //Vi har fundet noget... } else { //Vi fandt ikke noget, vis din default besked. }
30. januar 2006 - 09:52
#37
Ja, du kan sagtens lave et default-resultat til hvis den oprindelige søgning ikke giver noget resultat: $query = mysql_query("SELECT * FROM klienter $where"); if (mysql_num_rows($query) > 0) { while ($row = mysql_fetch_assoc($query)) { echo "<table border=0 width=300> <tr><td>".$row["fornavn"]." ".$row["efternavn"]."</td></tr> <tr><td>".$row["adresse"]."</td></tr> <tr><td>".$row["adresse2"]."</td></tr> <tr><td>".$row["postnr"]."  ".$row["byen"]."</td></tr> <tr><td>Telefon: ".$row["tlf"]."</td></tr> <tr><td>RKI : ".$row["rki"]." Klient Id.nr.: ".$row[id]."</td></tr> <tr><td>Oprettet af ".$row["vet"]." d. ".$row["dato"]."</td></tr><br> <tr><td>Kommentar: </tr><tr><td>".$row["evt"]."</td></tr> <tr><td bgcolor=#C0C0cc> </td></tr></table>"; } } else { // Udtræk default-resultat: $sql = "SELECT * FROM klienter WHERE id=42"; $query = mysql_query("SELECT * FROM klienter $where"); // Og så koden for at vise oplysningerne her... }
30. januar 2006 - 09:52
#38
:*)
30. januar 2006 - 09:54
#39
Nielle, vil du have 50 point her fra? > Helt ok med mig :^)
30. januar 2006 - 09:55
#40
30. januar 2006 - 10:20
#41
Takker!
Vi tilbyder markedets bedste kurser inden for webudvikling