Variable in SQL-Befehl - wie gehts?
Nobody
- php
0 David Tibbe0 Nobody0 David Tibbe0 Nobody0 David Tibbe0 Nobody
0 manuel
Tag,
wieso wird folgender Code nicht angenommen?
$art_sql="SELECT * FROM art WHERE art_ID = $id";
$art_result=mysql_query($art_sql);
Anmerkung: Die Mysql-Verbindung klappt, die Übersicht wird korrekt ausgeführt. Nur wollte ich den Viewer per
www.seite.de/pfad/view_art.php?id=1
konfigurieren, das geht allerdings nicht.
Wo ist der Fehler?
Danke,
Nobody
Hallo
wieso wird folgender Code nicht angenommen?
Nein? Wie macht sich das bemerkbar? Wird er (vielleicht vom Drucker) wieder ausgeworfen? ;)
$art_sql="SELECT * FROM art WHERE art_ID = $id";
Setze das "$id" einmal in einfache Anführungszeichen (').
Lies auch dies:
16.14. Warum soll ich nicht SELECT * schreiben?
http://www.dclp-faq.de/q/q-sql-select.html
www.seite.de/pfad/view_art.php?id=1
Du bedenkst sicherlich auch, dass Register_gobals auf (hoffentlich) off ist und du an id per $_GET[#id'] heran kommst.
Wo ist der Fehler?
Eine Fehlerbeschreibung (was passiert? Was soll eigentlich passieren? MySQL-Fehlermelungen) deinerseits wäre sehr hilfreich.
Grüße
David
Du bedenkst sicherlich auch, dass Register_gobals auf (hoffentlich) off ist
Uhm.. auf meinem lokalen WAMP nicht.. schlecht?
und du an id per $_GET[#id'] heran kommst.
Muss ich das in den SQL-Befehl einbauen oder
$id=$_GET[#id'];
eingeben?
MySQL-Fehlermelungen) deinerseits wäre sehr hilfreich.
Keine, das ist ja der Spaß. Es wird einfach eine leere Seite mit verkrüppeltem <img> zurückgegeben.
Gruß
Nobody
Hallo
Du bedenkst sicherlich auch, dass Register_gobals auf (hoffentlich) off ist
Uhm.. auf meinem lokalen WAMP nicht.. schlecht?
Ja. Lies ein wenig im Archiv dazu, das wurde scon otmal behandelt "register_globals" wie gesagt als Suchbegriff nehmen.
Muss ich das in den SQL-Befehl einbauen oder $id=$_GET['id']; eingeben?
Wenn du einfach dort immer $_GET['id'] schreibst und id nun nicht überliefert wurde, bekommst du eine Warnmeldung. Es empfiehlt sich also immer, die Daten entsprechend zu überprüfe. zB so:
$id = isset($_GET['id']) ? $_GET['id'] : "WertWennIDnichtGesetzt";
das überprüft, ob id gesetzt ist. wenn ja, wird in $id jener parameter gespeichert, ansonsten hinten der defaultwert. Danach kannst du im Script mit $id arbeiten.
Lies vielleicht auch
12.1. Wie unterscheide ich böse Variablen von guten?
http://www.dclp-faq.de/q/q-security-variablen.html
und
12.11. Prüfe importierte Parameter. Traue niemandem
http://www.dclp-faq.de/q/q-sicherheit-parameter.html
Keine, das ist ja der Spaß. Es wird einfach eine leere Seite mit verkrüppeltem <img> zurückgegeben.
Ah, eine wertvolle Info, die bisher noch nicht da war. Aber es sollte eigentlich wie geschrieben an den ' liegen.
Grüße
David
Hallo,
ich testete das Script auf einem Server mit register_globals = off, setzte die 's und probierte die id=isset($GET['id']..-Methode. Leider wurde weiterhin die leere Seite ausgegeben. Ich poste mal den ganzen Code (den php-Teil / URLs/Namen z.T. ersetzt), vielleicht liegt der Fehler an einer ganz anderen Stelle:
<?php
$id = isset($_GET['id']) ? $_GET['id'] : "1";
require("mysql.inc.php");
$db = mysql_connect("$sqlhost","$sqluser","$sqlpass") or
die ("Verbindung fehlgeschlagen");
mysql_select_db("$database",$db);
$art_sql="SELECT * FROM art WHERE art_ID = '$id'";
$art_result=mysql_query($art_sql);
print $art_result['title'] ;
print "<br><br>" ;
print "<img src="http://www.url.de/" ;
print $art_result['file'] ;
print ""><br><br>" ;
print $art_result['comment'] ;
mysql_close();
?>
Anmerkung 1: Mir ist bekannt, dass sich die print-Befehle stark vereinfachen lassen.
Anmerkung 2: Die Inhalte/Arrays der Datenbank stimmen, sie wurden bereits in einem Testscript erkannt.
Gruß
Nobody
Hallo
Schaue einmal, was nah dem Auswerten in $id steht.
Schraube einmal das error_reporting auf E_ALL und schaue, ob es Fehlermeldungen gibt.
Du macht meine ich folgendes falsch: $art_result ist ein Zeiger auf Datenbankabfrageergebnis. Die Daten musst du normal mit mysql_fetch_array() oder so auswerten. Wenn sichergestellt ist, dass immer nur ein Ergebnis möglich ist, geht auch mysql_result(). Schaue dir die Funktionen einmal im Manual an.
Grüße
David
Hallo,
ich fügte nun
while($art=mysql_fetch_array($art_result)) {
hinter
$art_result=mysql_query($art_sql);
ein und deaktivierte die $GET-Methode, da diese immer "1" ausgab, nun funktioniert alles.
Vielen Dank für die Geduld
Nobody
Tag,
wieso wird folgender Code nicht angenommen?
$art_sql="SELECT * FROM art WHERE art_ID = $id"; $art_result=mysql_query($art_sql);
der fehler ist, dass $id nochmal in einzelnen hochkomma stehen muss. bisher setzt php folgenden befehl ab, wenn 4711 in der variable $id drinne steht: SELECT * FROM art WHERE art_ID = 4711 das ist für die datenbank so, als wenn es noch eine spalte "4711" gäbe, die den selben wert enthalten kann wie die spalte art_ID. mit den hochkome wird dann daraus: SELECT * FROM art WHERE art_ID = '4711' was die datenbank dann verstehen wird.
manuel