• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Datenbanksuche

Status
Für weitere Antworten geschlossen.

mou

Neues Mitglied
ich verstehe das nicht, ich will eigentlic nur nach dem ersten buchstaben des namens in der DB suchen, aber irgendwie geht das nicht. Hier der Code: [php:1:c9bdef43c7]<?php
$alles_aus = mysql_query("SELECT * FROM `adressen` WHERE `nachname` = '$letter%' AND `usr` = '$user'");
$teil_aus = mysql_query("SELECT * FROM `adressen` WHERE `usr` = '$user'");

echo'<table border="0"><tr><td colspan="2"><h3>vorhandene Adressen</h3></td></tr>';
echo'<tr><td colspan="2">alleABCDEFGHIJKLMNOPQRSTUVWXYZ';

if($letter == ''){
while($aus = mysql_fetch_object($alles_aus)){
echo'<tr><td colspan="2"><a href="javascript:showadress(\'ads.php?ID='.$aus->ID.'\')">'.$aus->nachname.', '.$aus->vorname.'</td></tr>';
}
}
elseif($letter != ''){
while($suche = mysql_fetch_object($teil_aus)){
echo'<tr><td width="250">'.$suche->nachname.', '.$suche->vorname.'</td><td><a href="adressen.php?action=change&ID='.$suche->ID.'"> | <a href="adressen.php?action=delete&ID='.$suche->ID.'">
delete.gif
</td></tr>';
}
}
?>[/php:1:c9bdef43c7]

hier wird irgendwie alles angezeigt, kp warum
 
Werbung:
hallo (:

wenn du nur das erste zeichen eines wertes suchen möchtest ist die überprüfung in sql mit dem '=' zeichen nicht korrekt.
dafür ist LIKE da (:

[php:1:e9d9e46746]<?php
$alles_aus = mysql_query("SELECT * FROM `adressen` WHERE `nachname` LIKE '$letter%' AND `usr` = '$user'");
?>[/php:1:e9d9e46746]
 
Werbung:
kanns vielleicht sein, dass er immer nur in den teil der abfrage geht, der alle einträge ausgibt?
denn wenn's am sql liegen würde, würde er meckern, denk ich.
 
ja das denke ich auch ich habe das mal anders versucht zu lösen, dies brachte aber keinen Erfolg:

[php:1:88cbcf7b0d]
<?
if($letter == ''){
$alles_aus = mysql_query("SELECT * FROM `adressen` WHERE `nachname` LIKE '$letter%' AND `usr` = '$user'");
}
else{
$alles_aus = mysql_query("SELECT * FROM `adressen` WHERE `usr` = '$user'");
}

echo'<center><table border="0"><tr><td colspan="2"><h3>vorhandene Adressen</h3></td></tr>';

echo'<tr><td colspan="2">alleABCDEFGHIJKLMNOPQRSTUVWXYZ';

while($aus = mysql_fetch_object($alles_aus)){
echo'<tr><td colspan="2" width="250">'.$aus->nachname.', '.$aus->vorname.'</td><td><a href="adressen.php?action=change&ID='.$aus->ID.'"> | <a href="adressen.php?action=delete&ID='.$aus->ID.'">
delete.gif
</td></tr>';
}
echo'</table></center>';

?>
[/php:1:88cbcf7b0d]
 
Werbung:
also ich hab mal deinen code genommen und im grunde nur die inhalte der abfragen geändert und das funktioniert einwandfrei. :>
spingt je nach dem ob $letter leer ist oder nicht zwischen if und else hin und her.

daran kann's dann also auch nicht liegen.
 
Werbung:
Hallo,
dies reicht als SQL Abfrage völlig aus.

[php:1:8ba44e836d]<?php
$alles_aus = mysql_query("SELECT * FROM `adressen` WHERE `nachname` LIKE '$letter%' AND `usr` = '$user'");
?>[/php:1:8ba44e836d]

Die Sache mit if und else kannst du auch weglassen.

Weil, wenn deine Variable
Code:
$letter
leer ist gibt das like eh alles zurück, so als wenn das
Code:
nachname LIKE '$letter%'
gar nicht da wäre. Es kommt dann nur die 2te Bedingung zum tragen
Code:
usr = '$user'

Des weiteren würde ich die einfachen Anführungszeichen bei dem Tabellenamen und beim Spaltennamen weglassen.

mfg
MadMax777
 
Werbung:
MadMax777 schrieb:
Die Sache mit if und else kannst du auch weglassen.

Weil, wenn deine Variable
Code:
$letter
leer ist gibt das like eh alles zurück, so als wenn das
Code:
nachname LIKE '$letter%'
gar nicht da wäre. Es kommt dann nur die 2te Bedingung zum tragen
Code:
usr = '$user'
mfg
MadMax777

wuerde ich nicht machen. da muss sich nur mysql mehr anstrengen um erstmal alle zeilen zu vergleichen
 
ich habe noch ein Problem:
hier zeigt er immer an, dass keine Ergebniss vorhanden sind.

[php:1:d0eab2ed0f]
<?
echo'<center><table border="0"><tr><td colspan="2" align="center"><h3>Suche</h3></td></tr>';
echo'<form action="search.php?action=search" method="post"><tr><td width="150">Suchwort:</td><td><input type="text" name="suchen" maxlength="255" size="30" value="'.$_POST['suchen'].'"></td></tr>';
echo'<tr><td width="150">Suchart:</td><td><input type="radio" name="art" value="vorname" maxlength="255" checked> Vorname <input type="radio" name="art" value="nachname" maxlength="255"> Nachname <input type="radio" name="art" value="strasse" maxlength="255"> Strasse <input type="radio" name="art" value="ort" maxlength="255"> Ort <input type="radio" name="art" value="email" maxlength="255"> Email</td></tr>';
echo'<tr><td colspan="2" align="center"><input type="submit" value="suchen"></td></tr></form>';

switch($action){
case"search":
$suchwort = $_POST['suchen'];
$art = $_POST['art'];
$alles_aus = mysql_query("SELECT * FROM `adressen` WHERE '$art' LIKE '%$suchwort%' AND `usr` = '$user'");
$anz_ergebnisse = mysql_num_rows($alles_aus);
echo'<tr><td colspan="2" align="center"><h4>Suchergebnisse</h4></td></tr>';
if($anz_ergebnisse == 0){
echo'<tr><td colspan="2" align="center"><font color="red">keine Adressen gefunden</font></td></tr>';
}
else{
while($aus = mysql_fetch_object($alles_aus)){
echo'<tr><td colspan="2" width="250">'.$aus->nachname.', '.$aus->vorname.'</td><td><a href="adressen.php?action=change&ID='.$suche->ID.'"> | <a href="adressen.php?action=delete&ID='.$suche->ID.'">
delete.gif
</td></tr>';
}
}
break;
}
?>
[/php:1:d0eab2ed0f]
 
niklasboelter schrieb:
wuerde ich nicht machen. da muss sich nur mysql mehr anstrengen um erstmal alle zeilen zu vergleichen

Stimmt,

bei kleinen Datenmengen ist es nicht so dramatisch, aber bei größeren Datenmengen würde die Abfrage viel zu lange dauern.
 
Werbung:
Code:
"SELECT * FROM `adressen` WHERE '$art' LIKE   '%$suchwort%' AND `usr` = '$user'"
das ist doch so kompletter muell? wenn du ueberpruefen willst ob $suchwort in $art drin ist mach das mit php und nicht mit mysql. (substr_count() z.b.)

dann wuerde ein bedingtes [in einer if abfrage stehendes]
Code:
SELECT spalte1, spalte FROM adresse WHERE usr = '$user'
reichen.

"SELECT *" solltest du _NIEMALS_ verwenden. warum es von mysql geduldet wird wundert mich langsam. es ist auf jedenfall langsamer als die manuelle eingabe aller feldnamen und bei struktur erweiterungen entstehen so keine unerklärlichen programm fehler wenn du mit numerierten indices arbeitest :)
 
was ist den daran müll???

ich kann doch einfach das auslesen, was da steht und dann funktioniert das normalerweise auch
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben