Firefox und SQL-update
Stefan Rolf Paff
- php
Liebe Programmierer,
mir ist aufgefallen, daß unter Firefox (1.5, ob frühere auch betroffen sind, ist mir nicht bekannt) folgende Skript-Funktionalität im Gegensatz zu anderen Browsern (IE, Netscape 7.*) nicht mehr gegeben ist:
// das selbstaufrufende (über die steuernde Variable aendern) PHP-Skript in alter, unsicherer Programmiertechnik heißt aendern_vortraege.php:
....
$query1 = "update vortraege set name = '$name1, thema = '$thema' where id = '$id'";
mysql_db_query("db1",$query1);
$num = mysql_affected_rows(); if $num < 1 then echo "Meckern !!";
....
$query2 = "select * from vortraege where (id = '$id')"
$res = mysql_db_query("db1",$query2);
$num = mysql_num_rows($res);
// in Tabelle eingearbeitet:
for ($i=0; $i<$num; $i++)
{
$id = mysql_result($res, $i, "id");
$name1 = mysql_result($res, $i, "name1");
$thema = mysql_result($res, $i, "thema");
....
<form action ='aendern_vortraege.php?aendern=ja&id=".$id."&aktiv=".$aktiv."' method = 'post'>
Name: <input name='name' value='$name'>
Thema: <input name='thema' value='$thema'>
</form>
....
}
Mit Firefox werden die Variablen scheinbar (laut echo-Befehlen an verschiedenen Stellen) korrekt an das Skript wieder übergeben, das SQL-Statement korrekt zusammengebaut, die Var. aus dem Result-Feld des mysql_db_query(..) korrekt wieder ausgelesen und korrekt wieder in der Tabelle angezeigt.
Schaut man jedoch im PHPMyAdmin nach oder ruft man ein anderes Skript auf, das die selben Daten aus der DB holt, sieht man, daß sämtliche Varchar-Felder LEER sind und sämtliche (oben nicht angegebenen) int-Felder gleich 0 (außer natürlich id). Übergebe ich die Variablen $id und $aktiv nicht über die URL, sondern über ein hidden-input-Feld funktioniert es wieder. Mit Netscape, IE,.. ist dieser Fehler nicht zu beobachten !
Bei Interesse schicke ich das SQL-Create und das original-PHP-Skript zu.
Browser: Firefox 1.5.0.1, Win 2000 SP 0, PHP 4.02 läuft auf Intranet-Server mit völlig ungepatchter Installation SUSE Linux 7.1
öhm der browser hat damit nichts zu tun ;) php ist serverbasiert, d.h. das dafür der server verantwortlich ist
Hi there,
öhm der browser hat damit nichts zu tun ;) php ist serverbasiert, d.h. das dafür der server verantwortlich ist
Und was glaubst Du, wie die Daten vom Formular auf den Server kommen? Könnte es sein, daß der Browser da zumindest ein bisschen mithilft?
Hi there,
öhm der browser hat damit nichts zu tun ;) php ist serverbasiert, d.h. das dafür der server verantwortlich ist
Und was glaubst Du, wie die Daten vom Formular auf den Server kommen? Könnte es sein, daß der Browser da zumindest ein bisschen mithilft?
ja, aber was hat SQL damit zu tun?
auserdem wird eine TCP verbindung aufgebaut und die daten gesendet bzw gespeichert ;)
der browser tut den html code anzeigen ;)
Hi there,
ja, aber was hat SQL damit zu tun?
nichts natürlich, aber der OP schreibt irgendwas von Variablenübergabe an das Skript, und da ist sehr wohl der Browser involviert...
der browser tut den html code anzeigen ;)
ja, dazu ist er da ;)
Hi there,
öhm der browser hat damit nichts zu tun ;) php ist serverbasiert, d.h. das dafür der server verantwortlich ist
Und was glaubst Du, wie die Daten vom Formular auf den Server kommen? Könnte es sein, daß der Browser da zumindest ein bisschen mithilft?
ja klar !
ja, aber was hat SQL damit zu tun?
auserdem wird eine TCP verbindung aufgebaut und die daten gesendet bzw gespeichert ;)der browser tut den html code anzeigen ;)
Ich glaube nicht an einen Fehler auf TCP-Ebene. Eher an
Wie wärs mit einem Unterschied in der Interpretation der URL, der dazu führt, daß die Variablen unterschiedliche Werte oder Gültigkeitsbereiche haben ?
Oder in der Übernahme der Variablen aus dem aufrufenden Skript ?
Ich hab leider zu wenig Infos über das, was da unter der Haube geschieht...
Das interessante ist, daß alle echo-Befehle in dem aufgerufenen Skript vor und hinter dem SQL-update-Befehl und vor und hinter dem erneuten Zuweisen der aus der Datenbank wieder eingelesenen Daten an die entsprechenden Variablen den richtigen Wert ausgeben, während ein gleichzeitiger Zugriff auf die selben Daten in der selben Datenbanktabelle per PHPMyAdmin oder anderem Skript nur LEERE zeigt !
Für mich riechts danach, daß der PHP-Interpreter im per echo angezeigten SQL-Update-Statement zwar die richtigen Werte anzeigt, aber nur Leere in die DB schreibt. Die Bedingungen dafür sind aber nicht ganz klar. Ist es die dritte Variable in der URL ?
hi,
Für mich riechts danach, daß der PHP-Interpreter im per echo angezeigten SQL-Update-Statement zwar die richtigen Werte anzeigt, aber nur Leere in die DB schreibt.
Und warum sollte er das tun?
The Ghost in the Machine ...?
gruß,
wahsaga
hi,
Für mich riechts danach, daß der PHP-Interpreter im per echo angezeigten SQL-Update-Statement zwar die richtigen Werte anzeigt, aber nur Leere in die DB schreibt.
Und warum sollte er das tun?
The Ghost in the Machine ...?
gruß,
wahsaga
hi wahsaga,
natürlich nicht. Aber zähl mal die beschriebenen Fakten zusammen:
Vars lt. echo vor und nach dem SQL-update korrekt, SQL ausgeführt, und Vars vor und nach dem Wieder-Auslesen lt. echo korrekt, aber de facto in der DB nicht.
Viele Möglichkeiten bleiben da nicht !
Eine weitere wäre, daß die Vars auf verschiedenen "Ebenen" existieren und nicht korrekt gemappt werden.
Gruß
öhm der browser hat damit nichts zu tun ;) php ist serverbasiert, d.h. das dafür der server verantwortlich ist
ist mir bekannt. Aber die Variablenübergabe über die URL sprich die Interpretation der URL hat schon was mit dem Browser zu tun. Der Verdacht fällt ja auch nur auf den Browser, weil sich NUR der Firefox so verhält, der IE und der Netscape 7.* nicht.
Ich habe andere ältere Skripte, die ähnlich aufgebaut sind, aber nur 2 Vars über die URL übergeben, diese laufen interessanterweise sauber ...
Hi,
hast Du das mal ausprobiert (id statt name):
Name: <input id='name' value='$name'>
Thema: <input id='thema' value='$thema'>
?
hth Robert
Hi,
hast Du das mal ausprobiert (id statt name):
Name: <input id='name' value='$name'>
Thema: <input id='thema' value='$thema'>?
hth Robert
interessante Anregung, war mir nicht bekannt, danke !
Ich werds bei Gelegenheit ausprobieren. Derzeit habe ich den Workaround per hidden-input in Funktion
Heißa, Stefan,
mir ist aufgefallen, daß unter Firefox (1.5, ob frühere auch betroffen sind, ist mir nicht bekannt) folgende Skript-Funktionalität im Gegensatz zu anderen Browsern (IE, Netscape 7.*) nicht mehr gegeben ist:
Wie bereits gesagt, mit dem Browser dürfte das nichts zu tun haben, außer dein HTML-Code ist so fehlerhaft, dass ein neuerer Browser das Formular nicht mehr richtig absendet.
> $query1 = "update vortraege set name = '$name1, thema = '$thema' where id = '$id'";
Hier fehlt schonmal irgendwo ein einfaches Anführungszeichen (und ich glaube nicht, dass das in $name1 drinnen steht). Mich dünkt, dass du hier irgendwie $name1 mit $name verwechselst, aber da du uns leider nicht geschrieben hast, wo $name1 oder $name herkommt, kann ich da nichts genaueres sagen.
> $name1 = mysql_result($res, $i, "name1");
[…]
> Name: <input name='name' value='$name'>
Man hat hier wieder das Gefühl, dass du $name mit $name1 vertauschst oder so, ob dem so ist, weiß ich nicht, dazu verstehe ich deinen Scriptausschnitt zu wenig.
Gautera!
Grüße aus Biberach Riss,
Candid Dauth
Wie bereits gesagt, mit dem Browser dürfte das nichts zu tun haben, außer dein HTML-Code ist so fehlerhaft, dass ein neuerer Browser das Formular nicht mehr richtig absendet.
> $query1 = "update vortraege set name = '$name1, thema = '$thema' where id = '$id'";
Hier fehlt schonmal irgendwo ein einfaches Anführungszeichen (und ich glaube nicht, dass das in $name1 drinnen steht). Mich dünkt, dass du hier irgendwie $name1 mit $name verwechselst, aber da du uns leider nicht geschrieben hast, wo $name1 oder $name herkommt, kann ich da nichts genaueres sagen.
$name1 = mysql_result($res, $i, "name1");
[…]
Name: <input name='name' value='$name'>
>
> Man hat hier wieder das Gefühl, dass du $name mit $name1 vertauschst oder so, ob dem so ist, weiß ich nicht, dazu verstehe ich deinen Scriptausschnitt zu wenig.
Sorry, das waren Tipfehler bei der Erstellung des vereinfachten Codes für die Darstellung hier ... ich wollte Euch nicht mit dem kompletten Skript langweilen ;-)