Variablenübergabe per Link an php
Variablenübergabe per Link an php
am 30.01.2005 18:38:03 von needful
Hallo zusammen,
ich habe untenstehenden php-Code bei dem folgendes Problem auftaucht:
Das SQL-Statement scheint nicht zu funktionieren. Die Variable
$Ort erhalte ich über den Aufruf der Seite abfrage.php?Ort=Gummersbach.
Wenn ich das auskommentierte Statement ausführe läuft alles (also
den Ort direkt im Code vorgebe), aber das ist ja nicht der Sinn der
Sache. Auch der Aufruf mit abfrage.php?Ort='Gummersbach' läuft nicht.
Was mache ich hier bloß falsch?
Viele Grüße
Jörg
Inhalt von abfrage.php
$conn = mysql_connect("db", "user", "password")
or die("Verbindungsfehler: ".mysql_error());
mysql_select_db("db118401434",$conn);
$Ort=$_GET["Ort"];
$sql="Select * FROM addresses WHERE Ort=$Ort";
//$sql="Select * FROM addresses WHERE Ort='Gummersbach'";
$result = mysql_query($sql);
$count_rows=mysql_num_rows($result);
$row = mysql_fetch_assoc($result);
echo "Anzahl:" . $count_rows;
echo "Vorname:" . $row["Vorname"];
mysql_close();
?>
Re: Variablenübergabe per Link an php
am 30.01.2005 18:54:52 von Tobias Kutzler
Jörg Zimmermann schrieb:
> Hallo zusammen,
>
> ich habe untenstehenden php-Code bei dem folgendes Problem auftaucht:
> Das SQL-Statement scheint nicht zu funktionieren. Die Variable
> $Ort erhalte ich über den Aufruf der Seite abfrage.php?Ort=Gummersbach.
> Wenn ich das auskommentierte Statement ausführe läuft alles (also
> den Ort direkt im Code vorgebe), aber das ist ja nicht der Sinn der
> Sache. Auch der Aufruf mit abfrage.php?Ort='Gummersbach' läuft nicht.
> Was mache ich hier bloß falsch?
Alle Tage wieder:
11.20. Warum funktionieren meine Formulare nicht?
http://www.php-faq.de/q/q-formular-register-globals.html
Kleiner Tipp noch am Rande: $_GET oder $_POST
Ciao,
Tobias
Re: Variablenübergabe per Link an php
am 30.01.2005 20:04:05 von Niels Braczek
Jörg Zimmermann schrieb:
> Was mache ich hier bloß falsch?
> Inhalt von abfrage.php
>
> $conn = mysql_connect("db", "user", "password")
> or die("Verbindungsfehler: ".mysql_error());
Hier machst du eine Fehlerbehandlung. Gut!
> mysql_select_db("db118401434",$conn);
Hier nicht ...
> $Ort=$_GET["Ort"];
> $sql="Select * FROM addresses WHERE Ort=$Ort";
> //$sql="Select * FROM addresses WHERE Ort='Gummersbach'";
> $result = mysql_query($sql);
.... und hier auch nicht. Schlecht.
> $count_rows=mysql_num_rows($result);
> $row = mysql_fetch_assoc($result);
> echo "Anzahl:" . $count_rows;
> echo "Vorname:" . $row["Vorname"];
> mysql_close();
Aus PHP-Sicht scheint mir ansonsten alles in Ordnung zu sein.
Mache trotzdem folgende Änderungen:
Übergebe per GET ohne Stingbegrenzer:
abfrage.php?Ort=Gummersbach
Füge diese Stringbegrenzer erst im SQL-Statement hinzu:
$sql = "SELECT feld1, feld2,...
FROM addresses
WHERE Ort='$Ort'";
Dann sollte es klappen.
MfG
Niels
--
'Geht nicht' gibt's nicht.
Es gibt nur ein 'Lohnt nicht'. [Niels Braczek]
Re: Variablenübergabe per Link an php
am 30.01.2005 20:05:10 von Niels Braczek
Tobias Kutzler schrieb:
> Jörg Zimmermann schrieb:
>> Was mache ich hier bloß falsch?
>
> Alle Tage wieder:
> 11.20. Warum funktionieren meine Formulare nicht?
> http://www.php-faq.de/q/q-formular-register-globals.html
Erheblich zu kurz geschossen. In dieser Hinsicht ist das Skript ok.
MfG
Niels
--
Informatiker haben Humor, allerdings lässt sich der nur schwer
im Quelltext ausdrücken. Ausnahme Microsoft: Dort arbeiten die
Kabarettisten der Informatik, die sogar lustigen Quelltext schreiben
können. [Oliver Schad in dclpm]
Re: Variablenübergabe per Link an php
am 30.01.2005 21:25:21 von Thomas Hamacher
Jörg Zimmermann schrieb:
> ich habe untenstehenden php-Code bei dem folgendes Problem auftaucht:
> Das SQL-Statement scheint nicht zu funktionieren. Die Variable
> $Ort erhalte ich über den Aufruf der Seite abfrage.php?Ort=Gummersbach.
> Wenn ich das auskommentierte Statement ausführe läuft alles (also
> den Ort direkt im Code vorgebe), aber das ist ja nicht der Sinn der
> Sache. Auch der Aufruf mit abfrage.php?Ort='Gummersbach' läuft nicht.
Da das statische Query funktioniert, ist wohl dein Query kaputt. Ich
vermute, dass ein \n am importierten Parameter hängt und daher dein
Query nicht funktioniert.
In solchen Fällen hilft es, ein Errorhandling einzubauen (siehe unten)
und einfach mal das Query ausgeben zu lassen (var_dump($sql)). Das
störende \n kannst du mit trim() bzw. rtrim() entfernen.
>
> $conn = mysql_connect("db", "user", "password")
> or die("Verbindungsfehler: ".mysql_error());
> mysql_select_db("db118401434",$conn);
Hier fehlt ein Errorhandling, falls die Datenbank nicht gewählt werden kann.
$conn = mysql_connect(...);
if(!is_resource($conn) || !mysql_select_db(...)) {
die("Verbindungsfehler: ".mysql_error());
}
> $Ort=$_GET["Ort"];
Hier solltest du den übergebenen Wert ggf. validieren und auf jeden Fall
so präparieren, dass er dir dein Query nicht kaputt machen kann.
$Ort = mysql_escape_string(trim($_GET['Ort']));
> $sql="Select * FROM addresses WHERE Ort=$Ort";
Übergib die Begrenzer nicht, sondern füg sie erst im Query hinzu.
-> abfrage.php?Ort=Gummersbach
$sql = "Select * From addresses Where Ort Like '$Ort'";
> //$sql="Select * FROM addresses WHERE Ort='Gummersbach'";
> $result = mysql_query($sql);
Hier fehlt wieder ein Errorhandling.
if(!is_resource($result)) {
die(...);
}
> $count_rows=mysql_num_rows($result);
> $row = mysql_fetch_assoc($result);
> echo "Anzahl:" . $count_rows;
> echo "Vorname:" . $row["Vorname"];
Hm, wieso gibst du hier nur einen Namen aus? Ohne Order By weisst du
doch gar nicht, welcher das sein wird...
echo "Anzahl: $count_rows
";
while($row = mysql_fetch_assoc($result)) {
echo "Vorname: $row[Vorname]
";
}
> mysql_close();
> ?>
Re: Variablenübergabe per Link an php
am 30.01.2005 22:46:48 von Daniel Jaenecke
Thomas Hamacher schrieb:
> Hier solltest du den übergebenen Wert ggf. validieren und auf jeden Fall
> so präparieren, dass er dir dein Query nicht kaputt machen kann.
>
> $Ort = mysql_escape_string(trim($_GET['Ort']));
Fast:
| Note: This function has been deprecated since PHP 4.3.0. Do not use this
| function. Use mysql_real_escape_string() instead.
Gruß
-dj-
--
Wer lesen kann ist klar im Vorteil.
Re: Variablenübergabe per Link an php
am 31.01.2005 06:56:10 von Frederik Ziebell
> Inhalt von abfrage.php
>
> $conn = mysql_connect("db", "user", "password")
> or die("Verbindungsfehler: ".mysql_error());
> mysql_select_db("db118401434",$conn);
> $Ort=$_GET["Ort"];
> $sql="Select * FROM addresses WHERE Ort=$Ort";
Meistens hilft es, sich das SQL-Statement ausgeben zu lassen und es dann
ggf. in einer MySQL-Shell überprüfen zu können. Ich würde dein Statement
so schreiben:
$sql="SELECT * FROM addresses WHERE Ort="'.$Ort.'";"
Re: Variablenübergabe per Link an php
am 31.01.2005 09:14:46 von Tobias Kutzler
Niels Braczek schrieb:
> Tobias Kutzler schrieb:
>
>>Jörg Zimmermann schrieb:
>
>
>>>Was mache ich hier bloß falsch?
>>
>>Alle Tage wieder:
>>11.20. Warum funktionieren meine Formulare nicht?
>>http://www.php-faq.de/q/q-formular-register-globals.html
>
>
> Erheblich zu kurz geschossen. In dieser Hinsicht ist das Skript ok.
>
> MfG
> Niels
>
Da hab ich wohl eine Zeile übersehen... So schnell kann das gehen. :-(
Re: Variablenübergabe per Link an php
am 31.01.2005 15:46:09 von Michael Fesser
.oO(Frederik Ziebell)
>Meistens hilft es, sich das SQL-Statement ausgeben zu lassen und es dann
>ggf. in einer MySQL-Shell überprüfen zu können. Ich würde dein Statement
>so schreiben:
>$sql="SELECT * FROM addresses WHERE Ort="'.$Ort.'";"
Dann laß Dir das mal ausgeben ... SCNR
Strings und Variablen mit dem '.'-Operator zu verknüpfen mag zwar in
Editoren mit Syntaxhighlighting die Übersichtlichkeit verbessern, kann
aufgrund der zahlreichen einfachen und doppelten Anführungszeichen aber
auch leicht zu obigen Fehlern führen.
Die direkte Verarbeitung der Variablen im String bzw. der Zusammenbau
der Query mittels sprintf() erscheint mir geeigneter und robuster.
Micha
Re: Variablenübergabe per Link an php
am 31.01.2005 16:04:39 von Frederik Ziebell
Michael Fesser wrote:
> Dann laß Dir das mal ausgeben ... SCNR
Was spricht gegen:
$sql="SELECT * FROM addresses WHERE Ort="'.$Ort.'";"
echo $sql; ??
Re: Variablenübergabe per Link an php
am 31.01.2005 16:12:44 von Tobias Kutzler
Frederik Ziebell schrieb:
> Michael Fesser wrote:
>
>> Dann laß Dir das mal ausgeben ... SCNR
>
> Was spricht gegen:
> $sql="SELECT * FROM addresses WHERE Ort="'.$Ort.'";"
> echo $sql; ??
Dass es falsch ist? Du hast einfache und doppelte Anführungszeichen
vertauscht:
$sql="SELECT * FROM addresses WHERE Ort='".$Ort."'"
Ciao,
Tobias
Re: Variablenübergabeper Link an php
am 31.01.2005 17:08:07 von Matthias Esken
Frederik Ziebell schrieb:
> Michael Fesser wrote:
>> Dann laß Dir das mal ausgeben ... SCNR
> Was spricht gegen:
> $sql="SELECT * FROM addresses WHERE Ort="'.$Ort.'";"
> echo $sql; ??
$sql = sprintf("SELECT * FROM addresses WHERE Ort='%s'", $Ort);
ist schöner. Vom * beim SELECT mal abgesehen.
Gruß,
Matthias
Re: Variablenübergabe per Link an php
am 31.01.2005 23:54:34 von Daniel Jaenecke
Tobias Kutzler schrieb:
> Frederik Ziebell schrieb:
>> $sql="SELECT * FROM addresses WHERE Ort="'.$Ort.'";"
>> echo $sql; ??
>
> Dass es falsch ist? Du hast einfache und doppelte Anführungszeichen
> vertauscht:
>
> $sql="SELECT * FROM addresses WHERE Ort='".$Ort."'"
MySQL ist da im Normalfall durchaus großzügig:
|
| (''') or double quote ('"') characters.
wenn auch
| If the server SQL mode has ANSI_QUOTES enabled, string literals can be
| quoted only with single quotes. A string quoted with double quotes will be
| interpreted as an identifier.
Nichtsdestotrotz halte ich die pauschale Aussage, daß Frederiks Statement
falsch sei für übertrieben.
Gruß
-dj-
--
Every once in a while, declare peace. "It confuses the hell out of your
enemies".
[Ferengi Rules of Acquisition #076]
Re: Variablenübergabe per Link an php
am 01.02.2005 00:09:53 von Thomas Hamacher
Daniel Jaenecke schrieb:
> Tobias Kutzler schrieb:
>> Frederik Ziebell schrieb:
>>> $sql="SELECT * FROM addresses WHERE Ort="'.$Ort.'";"
>> Dass es falsch ist?
>> $sql="SELECT * FROM addresses WHERE Ort='".$Ort."'"
> MySQL ist da im Normalfall durchaus großzügig:
> Nichtsdestotrotz halte ich die pauschale Aussage, daß Frederiks Statement
> falsch sei für übertrieben.
Das Ding erzeugt nen Parseerror, ich halte falsch da nicht für
übertrieben. Erst lesen, dann posten.
Re: Variablenübergabe per Link an php
am 01.02.2005 00:14:31 von Michael Fesser
.oO(Daniel Jaenecke)
>Tobias Kutzler schrieb:
>
>> Frederik Ziebell schrieb:
>
>>> $sql="SELECT * FROM addresses WHERE Ort="'.$Ort.'";"
>>> echo $sql; ??
>>
>> Dass es falsch ist? Du hast einfache und doppelte Anführungszeichen
>> vertauscht:
>>
>> $sql="SELECT * FROM addresses WHERE Ort='".$Ort."'"
>
>MySQL ist da im Normalfall durchaus großzügig:
>|
>| (''') or double quote ('"') characters.
Darum gings nicht.
>Nichtsdestotrotz halte ich die pauschale Aussage, daß Frederiks Statement
>falsch sei für übertrieben.
Probier es aus. ;)
Micha
Re: Variablenübergabe per Link an php
am 01.02.2005 00:18:18 von Niels Braczek
Daniel Jaenecke schrieb:
> Tobias Kutzler schrieb:
>> Frederik Ziebell schrieb:
>
>>> $sql="SELECT * FROM addresses WHERE Ort="'.$Ort.'";"
>>> echo $sql; ??
>>
>> Dass es falsch ist? Du hast einfache und doppelte Anführungszeichen
>> vertauscht:
>>
>> $sql="SELECT * FROM addresses WHERE Ort='".$Ort."'"
>
> MySQL ist da im Normalfall durchaus großzügig:
PHP aber nicht. Ein literaler String muss zumindest mit demselben
Begrenzer abgeschlossen werden, mit dem er eingeleitet wurde.
> Nichtsdestotrotz halte ich die pauschale Aussage, daß Frederiks
> Statement falsch sei für übertrieben.
Wenn du das Statement einmal durch PHP hättest laufen lassen, wüsstest
du, dass die Aussage sehr zutreffend ist.
MfG
Niels
--
A Microsoft Certified Systems Engineer is to computing what
a McDonalds Certified Food Specialist is to fine cuisine. [Slashdot
..sig]
Re: Variablenübergabe per Link an php
am 01.02.2005 00:30:32 von Daniel Jaenecke
Thomas Hamacher schrieb:
> Das Ding erzeugt nen Parseerror, ich halte falsch da nicht für
> übertrieben. Erst lesen, dann posten.
Ihr habt alle recht, Asche auf mein Haupt. Ich habe es natürlich nicht
parsen lassen, sondern mich von "Du hast einfache und doppelte
Anführungszeichen vertauscht" irritieren lassen.
-dj-
--
Just because someone's a member of an ethnic minority doesn't mean
they're not a nasty small-minded little jerk
[Terry Pratchett, Feet Of Clay]
Re: Variablenübergabe per Link an php
am 01.02.2005 09:32:49 von Tobias Kutzler
Daniel Jaenecke schrieb:
>
> Nichtsdestotrotz halte ich die pauschale Aussage, daß Frederiks Statement
> falsch sei für übertrieben.
Ich hätte vielleicht dazu schreiben sollen, warum ich der Meinung war,
dass das Statement falsch ist ;-) Aber die anderen haben erkannt, was
ich meinte. Es ging einfach darum, dass die Reihenfolge, in der die
Single-Quotes und Double-Quotes gesetzt waren nicht korrekt war.
Ciao,
Tobias
Re: Variablenübergabe per Link an php
am 01.02.2005 11:16:19 von Frederik Ziebell
Tobias Kutzler wrote:
> Daniel Jaenecke schrieb:
>
>>
>> Nichtsdestotrotz halte ich die pauschale Aussage, daß Frederiks Statement
>> falsch sei für übertrieben.
>
>
> Ich hätte vielleicht dazu schreiben sollen, warum ich der Meinung war,
> dass das Statement falsch ist ;-) Aber die anderen haben erkannt, was
> ich meinte. Es ging einfach darum, dass die Reihenfolge, in der die
> Single-Quotes und Double-Quotes gesetzt waren nicht korrekt war.
>
> Ciao,
> Tobias
Also eher nach dem Motto: Knapp daneben ist auch vorbei. Ich
entschuldige mich also vielmals, die beiden Quotes vertauscht zu haben
:-P, das kommt halt davon, wenn man nebenbei seine Seminarfacharbeit
über PHP und MySQL zu verteidigen hat.
Frederik