 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
04.09.2005, 11:35
|
#1
|
|
TP-Senior
Registriert seit: Oct 2001
Ort: schweiz
|
such-abfrage klappt nicht
Hallo zusammen,
ich versuche ein abfrage zu erstellen, leider klappt es nicht, denn sobald ich auf suchen klicke erscheint folgende siehe unten Fehler, vielen dank für eure hilfe.
Database error: Invalid SQL: SELECT * FROM news WHERE ORDER BY
MySQL Error: 1064 (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 'ORDER BY' at line 1)
Session halted.
PHP-Code:
<?php
$query_zusatz = "WHERE";
if(isset($_POST['Submit']) AND $_POST['Submit']=="Suchen"){
if(isset($_POST['id']) AND $_POST['id']!=""){
if($query_zusatz!="WHERE"){
$query_zusatz.=" AND ";
}
$query_zusatz .=" id=".$_POST['id']."";
}
if(isset($_POST['titel']) AND $_POST['titel']!=""){
if($query_zusatz!="WHERE"){
$query_zusatz.=" AND ";
}
$query_zusatz .=" titel='".$_POST['titel']."'";
}
$db->query("SELECT * FROM news ".$query_zusatz." ORDER BY ".$id);
while($db->next_record()) {
$stil=="#EFEFEF"?$stil = "#FFFFFF":$stil="#EFEFEF";
?>
|
|
|
04.09.2005, 11:55
|
#2
|
|
TP-Moderator
Registriert seit: Jun 2004
Ort: Hannover
|
Es wurde keine WHERE- Bedingung angegeben (WHERE feld Blabla = 'Blablub'). Da steht nur das WHERE im Query.. Deswegen kommt die Fehlermeldung.
Schreibe dein Query erst mal in eine Variabel und echoe die dann. Damit kannst du dann sehen, was wo wie wann nicht richtig zusammengesetzt wird..
__________________
Je größer der Deppenfaktor, desto gigantischer das Bescheidwissergefühl
-Dieter Nuhr
|
|
|
04.09.2005, 12:22
|
#3
|
|
TP-Senior
Registriert seit: Oct 2001
Ort: schweiz
|
error
klappt auch nicht, wie kann ich denn die query in ein Variabel nehmen?
PHP-Code:
<?php
$query_zusatz = "WHERE";
if(isset($_POST['Submit']) AND $_POST['Submit']=="Suchen"){
if(isset($_POST['id']) AND $_POST['id']!=""){
if($query_zusatz!="WHERE id"){
$query_zusatz.=" AND ";
}
$query_zusatz .=" id=".$_POST['id']."";
}
if(isset($_POST['titel']) AND $_POST['titel']!=""){
if($query_zusatz!="WHERE titel"){
$query_zusatz.=" AND ";
}
$query_zusatz .=" titel='".$_POST['titel']."'";
}
$db->query("SELECT * FROM news ".$query_zusatz." ORDER BY ".$id);
while($db->next_record()) {
$stil=="#EFEFEF"?$stil = "#FFFFFF":$stil="#EFEFEF";
?>
|
|
|
04.09.2005, 12:34
|
#4
|
|
TP-Moderator
Registriert seit: Jun 2004
Ort: Hannover
|
$query = "SELECT * FROM news ".$query_zusatz." ORDER BY ".$id.");
echo $query;
__________________
Je größer der Deppenfaktor, desto gigantischer das Bescheidwissergefühl
-Dieter Nuhr
|
|
|
04.09.2005, 12:40
|
#5
|
|
TP-Moderator
Registriert seit: Jun 2004
Ort: Hannover
|
Nur so zur Info: du setzt bei Query Zusatz ja das WHERE mit rein.. Aber du musst auch angeben, wie diese Bedingungen erfüllt wird.
Dein Query sieht immer maximal so aus (ich versuche es mal in einen Satz umzuformen):
Hole alle Felder aus der Tabelle news wo Feld und sortiere es nach
Du siehst, daß da irgendwie was fehlt. Und das musst du auch mitliefern und das tust du in deinem Script nicht.
__________________
Je größer der Deppenfaktor, desto gigantischer das Bescheidwissergefühl
-Dieter Nuhr
|
|
|
04.09.2005, 12:42
|
#6
|
|
TP-Senior
Registriert seit: Oct 2001
Ort: schweiz
|
kein fehlermeldung plötzlich
jetzt wird kein fehlermeldung angezeigt !!
was muss ich noch an den WHERE ändern damit die Suchabfrage funkt. ?
|
|
|
04.09.2005, 12:47
|
#7
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Hast du nen Debuger?
Dann teste es doch mal so aus
PHP-Code:
<?php // Test-Vars $_POST['Submit'] = "Suchen"; $_POST['id'] = 2; $_POST['titel'] = "test";
$query_zusatz = "WHERE";
if(isset($_POST['Submit']) AND $_POST['Submit']=="Suchen"){ if(isset($_POST['id']) AND $_POST['id']!=""){ if($query_zusatz!="WHERE"){ $query_zusatz.=" AND"; } $query_zusatz .=" id=".$_POST['id'].""; } if(isset($_POST['titel']) AND $_POST['titel']!=""){ if($query_zusatz!="WHERE"){ $query_zusatz.=" AND"; } $query_zusatz .=" titel='".$_POST['titel']."'"; }
echo "SELECT * FROM news ".$query_zusatz." ORDER BY id"; } ?>
Ausgabe: SELECT * FROM news WHERE id=2 AND titel='test' ORDER BY id
Aber:
-Warum soll die ORDER BY-Klausel eine Var sein? Willst du damit einen String angeben, oder soll nach id sortiert werden? Dann muss das $ weg (siehe Bsp.).
-Deine if-Abfrage zum hinzufügen eines AND ist nicht gerade logisch. Frag doch einfach so ab, das $query_zusatz nicht nur WHERE ist, sondern schon erweitert ist (siehe Bsp.)
|
|
|
04.09.2005, 12:49
|
#8
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
PHP-Code:
<?php
$query_zusatz = "WHERE";
if(isset($_POST['Submit']) AND $_POST['Submit']=="Suchen"){
if(isset($_POST['id']) AND $_POST['id']!=""){
$query_zusatz .=" id=".$_POST['id']." AND ";
}
if(isset($_POST['titel']) AND $_POST['titel']!=""){
$query_zusatz .=" titel='".$_POST['titel']."'";
}
if($query_zusatz=="WHERE") $query_zusatz="";
$db->query("SELECT * FROM news ".$query_zusatz." ORDER BY ".$id);
while($db->next_record()) {
$stil=="#EFEFEF"?$stil = "#FFFFFF":$stil="#EFEFEF";
?>
Deine Abfragen auf $query_zusatz waren falsch!
|
|
|
04.09.2005, 12:53
|
#9
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
@Steffen
Und was passiert, wenn man nur nach der id sucht?
Also ich würde es nicht so machen.
$query_zusatz zu leeren, wenn nur WHERE enthalten ist, ist nicht schlecht, aber ich würde dann ehr hingehen und die Suchfleder zu prüfen und dann auszugeben, dass kein Suchbegriff angegeben wurde.
|
|
|
04.09.2005, 12:54
|
#10
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
stimmt Mark.
Ich mach es eigentlich immer so und nehm dann die letzten Zeichen weg, also das letzte "AND "
if(substr($query_zusatz,-4)=="AND ") $query_zusatz=substr($query_zusatz,0,strlen($query_zusatz)-4));
Das ist hier vielleicht ein wenig überkandidelt, aber wenn man mehrere Suchbedingungen prüft, ist das die einfachste Form, ein WHERE zusammenzusetzen.
Geändert von steffenk (04.09.2005 um 12:59 Uhr).
|
|
|
04.09.2005, 13:02
|
#11
|
|
TP-Senior
Registriert seit: Oct 2001
Ort: schweiz
|
error
ich möchte nach id sortieren, das ist aber nicht wichtig, ich hab deine variante getestet und siehe fehlermeldung :
SELECT * FROM news WHERE ORDER BY id
Database error: Invalid SQL: SELECT * FROM news WHERE ORDER BY
MySQL Error: 1064 (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 'ORDER BY' at line 1)
Session halted.
|
|
|
04.09.2005, 13:03
|
#12
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
So, hier mal eine dyn Lösung, so muss man nicht zig Schleifen schreiben.
PHP-Code:
<?php
// Test-Vars
$_POST['Submit'] = "Suchen";
$_POST['id'] = 2;
$_POST['titel'] = "test";
$query_zusatz = "WHERE ";
if(isset($_POST['Submit']) AND $_POST['Submit']=="Suchen"){
foreach($_POST as $key => $value){
if($key != "Submit"){
if(isset($key) AND $key!=""){
if($query_zusatz!="WHERE ") $query_zusatz.=" AND ";
if(gettype($value) == "integer") $query_zusatz .=$key."=".$value;
else $query_zusatz .=$key."='".$value."'";
}
}
}
echo count($_POST) == 1 ? "SELECT * FROM news ORDER BY id" : "SELECT * FROM news ".$query_zusatz." ORDER BY id";
}
?>
|
|
|
04.09.2005, 13:05
|
#13
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Das einzig gefährliche bei Deiner Lösung ist count($_POST). Was ist, wenns noch weitere Felder im Formular gibt ? Das muss man wissen und statt 1 die Anzahl der nicht relevanten POST-Felder eintragen.
|
|
|
04.09.2005, 13:10
|
#14
|
|
TP-Senior
Registriert seit: Oct 2001
Ort: schweiz
|
klappt immer noch nicht
genau @Steffen, ich werde das formular erweitern und kommen ein paar weitere felder dazu, ich hab deine Lösung getestet leider immer gleich error :
Database error: Invalid SQL: SELECT * FROM news ORDER BY
MySQL Error: 1064 (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 '' at line 1)
Session halted.
hier nochmals den code:
PHP-Code:
<?php
$query_zusatz = "WHERE";
if(isset($_POST['Submit']) AND $_POST['Submit']=="Suchen"){
if(isset($_POST['id']) AND $_POST['id']!=""){
$query_zusatz .=" id=".$_POST['id']." AND ";
}
if(isset($_POST['titel']) AND $_POST['titel']!=""){
$query_zusatz .=" titel='".$_POST['titel']."";
}
if($query_zusatz=="WHERE") $query_zusatz="";
$db->query("SELECT * FROM news ".$query_zusatz." ORDER BY ".$id | | |