Problem mit Suchfunktion für die Datenbank
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
argument
auge
ausgabe
befehl
code
datenbank
datum
ergebnis
fehler
fehlermeldung
gleichzeitig sachen
manual
message
ort
server
string
suche
syntax
tabelle
-
servus miteinander,
ich bin php einsteiger und peil grad nicht mehr durch :P
ich möchte meine datenbank durchsuchen lassen und hab dazu jetzt folgendes script geschrieben:
<?php $verbindung = mysql_connect ("LOCALHOST", "USER", "PASSWORT") or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch"); mysql_select_db("DATENBANK") or die ("Die Datenbank existiert nicht."); ?><br> <form action="SUCHEN.php" method="post"> Suche nach:<input type="text" name="suchen"> in <select name="ort" size="1"> <option>SPALTE1</option> <option>SPALTE2</option> </select> <input type="submit" value="Suchen"> </form> <?php $suche = $_POST["suchen"]; $ort = $_POST["ort"]; $abfrage = 'SELECT "$ort" FROM daten WHERE "$ort" = "$suche"'; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { echo "$row->'$ort'"; } ?>
Nur kommt dabei nichts raus O_o
was auch seltsam ist, wen ich bei $abfrage erst " " und innerhalb ' ' setze kommen nur fehlermeldungen. vertausch ich sie aber scheint es zu funktionieren... (ging mir jetzt schon öfters so...)
gruß -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das liegt daran das due Die Variaben nicht richtig in den String einfügst!
$variable = 'Hallo ich bins!';
//in einen string eingefügt!
$string = 'Wer ist da? '.$variable.'';
echo $string;
//ausgabe: Wer ist da? Hallo ich bins!
bsp:$abfrage = 'SELECT '.$ort.' FROM daten WHERE '.$ort.' = '.$suche.'';
wobei wenn in den Varibalen ein string steht (also zb in suche) muss es in Hochkommas gesetz werden (für die Datenbank) also
bsp2:$abfrage = 'SELECT '.$ort.' FROM daten WHERE '.$ort.' = \''.$suche.'\'';
hf Cracker
PS: wenn der string mit ' eröffnet und geschlossen wird muss auch die Variable mir '.$varibale.' eingefügt werden!
wenn der string mit " beginnt muss logischerweise auch die Variable ". $varibale." eingefügt werden!
Beitrag zuletzt geändert: 1.3.2009 21:28:20 von cracker0dks -
naja das klappt so leider auch nicht richtig.
ich habs jetzt auf dein 2tes bsp abgeändert:
$abfrage = 'SELECT '.$ort.' FROM daten WHERE '.$ort.' = \''.$suche.'\'';
jetzt kommt die fehlermeldung:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource -
Was cracker0dks sagt stimmt, es wäre besser die Abfrage so zu formulieren:
$abfrage = "SELECT ".$ort." FROM daten WHERE ".$ort." LIKE '%".$suche."%'";
Ich habe außerdem dein = durch LIKE und die Platzhalter % ersetzt. Das hat bei einer Suche den Vorteil, dass auch ähnliche Einträge gefunden werden. Beispiel, du suchst mit = nach dem Begriff 'hans'. Das würde dir nur Spöaten liefern, wo 'hans' steht, nicht aber z.B. 'hanswurst'. Mit LIKE und % wird hingegen auch 'hanswurst' und 'wursthans' gefunden.
Dann würde ich lieber mysql_fetch_assoc oder mysql_fetch_array verwenden, da ich mir nicht sicher bin, ob sich Objekte so benutzen lassen, wie du es hier versuchst. Somit würdest du folgendes bekommen:
while($row = mysql_fetch_assoc($ergebnis)) { echo $row[$ort]; }
-
versuch mal die Tabellen namen und spalten in ---> ` <--- zu setzen sprich
$abfrage = 'SELECT `'.$ort.'` FROM `daten` WHERE `'.$ort.'` = '.$suche.'';
PS: am besten du lässt dir einfach den PHP code vom PHPmy admin erzeugen.... dort kannst du auch vorher kontrollieren ob das Richtige Ergebnis rauskommt, und dann die Variablen einfach nurnoch per ".$varibale." einsetzetzen!
hf Cracker -
thx euch beiden.
jetzt läuft das teil!
das mit den % hab ich zuvor auch schon vergebens versucht :P
im php ist halt jedes ' " unentberlich...
ich hab jetzt die php code erzeugen von phpmyadmin gefunden...
würde die auch gerne nutzen, weil es so ja doch die comfortablere suchlösung ist, als meine mit der liste.
nun taucht hier jedoch das problem auf:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource
^^dabei spielt es keine rolle ob ich mysql_fetch_arry() oder sonstwas nimm... immer der selbe fehler
Beitrag zuletzt geändert: 1.3.2009 22:03:43 von losebettler1 -
dann hat das query wahrscheinlich noch immer nen fehler. mach mal hinter das mysql_query noch das dazu:
mysql_query(....) or die(mysql_error()); und schreib rein, was da steht. am besten noch mit der ganzen codezeile zum vergleichen dazu. so kann man den fehler am leichtesten finden -
jetzt meldet das script:
Fatal error: Call to undefined function mysql_fetch_query()
$abfrage = "SELECT * FROM 'DATENBANK.`TABELLE` WHERE '(`SPALTE1` LIKE \'%.$suche.%\' OR `SPALTE2` LIKE \'%.$suche.\' OR `SPALTE3` LIKE \'%.$suche.%\' OR ........... `SPALTE10` LIKE \'%.$suche.%\')"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_query($ergebnis) or die(mysql_error())) { echo $row[SPALTE1]; } ?>
-
ist klar. es gibt kein mysql_fetch_query. les dir meinen post nochmal durch und schau eine zeile über deiner schleife, da wird dir vlt eine ähnlichkeit auffallen ;)
auf deutsch: da schreib wieder mysql_fetch_assoc hin und das "or die(mysql_error())" hänge in der zeile darüber dazu. -
da warich heute morgen wohl noch zu verpennt :P
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 ''DATENBANK'.`TABELLE` WHERE '(`DATEN1` LIKE \'..%\' OR `DATEN2` LIKE \'%..%\' OR' at line 1
^^das ist die ausgabe
Beitrag zuletzt geändert: 2.3.2009 17:51:50 von losebettler1 -
der apostroph nach dem WHERE und vor dem ( gehört weg.
-
ist nun weg:
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 ''DATENBANK.`TABELLE` WHERE (`DATEN1` LIKE \'%..%\' OR `DATEN2` LIKE \'%..\'' at line 1 -
losebettler1 schrieb:
da warich heute morgen wohl noch zu verpennt :P
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 ''DATENBANK'.`TABELLE` WHERE '(`DATEN1` LIKE \'..%\' OR `DATEN2` LIKE \'%..%\' OR' at line 1
^^das ist die ausgabe
versuch das:
SELECT * FROM `DATENBANK.TABELLE` WHERE (`SPALTE1` LIKE '%$suche%' OR
`SPALTE2` LIKE '%$suche' OR `SPALTE3` LIKE \'%$suche%\' OR
`SPALTE10` LIKE '%$suche%')
Am besten testest Du den String immer mit einem Editor der Dir die Befehle Farblich markiert um Fehler schneller zu finden , oder hiermit:
http://rafb.net/p/Us8FzC12.html
edit : wenn du die Punkte "." schon benutzt dann so: " sql-befehle... ".$suche." noch mehr sql-befehle... ";
Wenn also $suche == "hallo" wäre , würde das rauskommen:
sql-befehle... hallo noch mehr sql-befehle...
Beitrag zuletzt geändert: 2.3.2009 18:51:13 von simuliertes -
das funktioniert so leider auch nicht
in der error message werden nur ".." ausgegeben weil das input-feld noch leer war... hätte ich für den suchbegriff"fritzhanswurst" eingebgeben wäre in der error message ".fritzhanswurst." gestanden -
Der Ausdruck DATENBANK.TABELLE ist in meinen Augen falsch und nicht zulässig. Etwas ähnliches wird gemacht, wenn man aus zwei Tabellen gleichzeitig Sachen auswählen oder verknüpfen möchte (JOIN), aber Datenbank-Identifier werden bei mysql_query als zweiter Parameter angegeben.
Abgesehen davon ist deine Verknüpfung der einzelnen Spalten recht aufwendig (OR...OR...OR), da würde ich mir nochmal Gedanken drüber machen oder es zumindest für die Fehlersuche vereinfachen. -
tct schrieb:
Der Ausdruck DATENBANK.TABELLE ist in meinen Augen falsch und nicht zulässig. Etwas ähnliches wird gemacht, wenn man aus zwei Tabellen gleichzeitig Sachen auswählen oder verknüpfen möchte (JOIN), aber Datenbank-Identifier werden bei mysql_query als zweiter Parameter angegeben.
Abgesehen davon ist deine Verknüpfung der einzelnen Spalten recht aufwendig (OR...OR...OR), da würde ich mir nochmal Gedanken drüber machen oder es zumindest für die Fehlersuche vereinfachen.
dieses DATENBANK.TABELLE habe ich vom phpmyadmin php-code. das "DATENBANK." kann man natürlich auch weglassen, da ich die Datenbank schon vorher definiert habe und nur eine verwende.
Wen ich aber jede spalte und jeden eintrag mit $suche durchsuchen möchte, wie soll ich den sonst alle spalten abklapern lassen? -
tct schrieb:
Der Ausdruck DATENBANK.TABELLE ist in meinen Augen falsch und nicht zulässig. Etwas ähnliches wird gemacht, wenn man aus zwei Tabellen gleichzeitig Sachen auswählen oder verknüpfen möchte (JOIN), aber Datenbank-Identifier werden bei mysql_query als zweiter Parameter angegeben.
Abgesehen davon ist deine Verknüpfung der einzelnen Spalten recht aufwendig (OR...OR...OR), da würde ich mir nochmal Gedanken drüber machen oder es zumindest für die Fehlersuche vereinfachen.
falsch. das darf man schon machen. die frage ist aber, ob die datenbank wirklich datenbank und die tabelle wirklich tabelle heisst, diverse syntax error jetzt mal außen vor gelassen.
im gegenteil, wenn man nicht zuvor ein mysql_select_db gemacht hat, muss man imho sogar db_name.tab_name schreiben...
und zum zweiten parameter: das ist die ID einer datenbank-verbindung, nicht einer datenbank selber. -
losebettler1 schrieb:
in der error message werden nur ".." ausgegeben weil das input-feld noch leer war... hätte ich für den suchbegriff"fritzhanswurst" eingebgeben wäre in der error message ".fritzhanswurst." gestanden
äh srry versteh ich jetzt nicht was du damit meinst
Also wenn du diese $suche im PHPmy admin benutzt könnte es schon sein das er dir da eine fehlermeldung ausspuckt,
weil diese Variablen im sql befehl ja eigentlich schon gefüllt sein müssten.
Am besten also im PHPmy admin zum ausprobieren
%".$suche."%
durch
%irgendeinwort% ersetzen. -
in phpmyadmin suche ich in meiner datenbank nach "%"
dannach erstelle ich für die suchergebnisse einen php code (macht phpmyadmin ja ganz gut)
jetzt erstetze ich das in phpmyadmin angegebene"%" mit meiner variable "$suche" die über das <input> feld gefüllt wird. -
achso alles klar dann ist ja ok und was kommt nun bei den von mir geposteten sql-befehl für eine Fehlermeldung?
Kanns schlecht selber testen...
jedenfalls waren die punkte in
SELECT * FROM 'DATENBANK.`TABELLE` WHERE '(`SPALTE1` LIKE \'%.$suche.%\' OR `SPALTE2` LIKE \'%.$suche.\' OR `SPALTE3` LIKE \'%.$suche.%\' OR ........... `SPALTE10` LIKE \'%.$suche.%\')
Falsch gesetzt (abgesehen von den teilweise falsch gesetzten ' und `) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage