widersinniger Wert in onLoad bei Loadvars

Lloyd

Erfahrenes Mitglied
Hi,

ich habe ein Gästebuch geschrieben, das sich mit einer MySQL-Datenbank unterhält.
Bei klick auf abschicken wird folgender Code ausgeführt:
PHP:
gastvars.sendAndLoad("input.php3",gastvars,"POST"); 
	gastvars.onLoad = function(sucess) {
		   if (sucess) { txt_out = sucess; play(); }
			else { txt_out = sucess; trace("Fehler");}
		}
Das spanische daran: Offline also wenn es nicht funktionieren dürfte bekomme ich sucess==true. Online wenn tatsächlich auch etwas in die DB eingetragen wird, wird sucess zu false!?
Hab ich irgendwo einen Denkfehler?
Die Funktionsweise ist doch: eine Funktion wird ausgeführt, wenn das Event "onLoad" eintritt. Diese Funktion bekommt den Rückgabewert des Events als Parameter, der dann benutzt wird. Richtig?
Danke für Anregungen.
 
Hi,

der Wert, der der Funktion onLoad übergeben wird, ist true, wenn der Ladevorgang ansich erfolgreich war. Mit dem, was Dein PHP-Script macht, hat das im Endeffekt wenig zu tun.

Versuch einmal, die Funktion zu deklarieren, bevor Du sendAndLoad ausführst.

Verwende einmal testweise LoadVars.send() und schau Dir an, was das PHP-Script im Browser ausgibt. Wenn die Werte dort ankommen: Ignorier den "sucess"-Flag und lass Dir den Inhalt des LoadVars-Objektes ausgeben:
PHP:
gastvars.onLoad = function() {
    for (var i in this) {
        trace(i + ": " + this[i]);
    }
}

Gruß
.
 
Die Daten kommen korrekt beim php-Skript an. Sie werden ja auch in die DB geschrieben.
Daher funktioniert auch mein Code.
Es hat mich nur irritiert, das sucess false ist obwohl es true sein müsste.
Mit dem vorher Deklarieren meinst du sicher, im Skript die gastvars.onLoad-Anweisung vor gastvars.sendAndLoad zu schreiben. Hab ich getan. Funktioniert.
Auch sucess ist brav true. Manchmal denk ich da gibts Heinzelmänchen.
Aber Danke sehr.

Das sucess kann ich nicht ignorieren, das brauch ich zum debuggen, da ich einem Problem auf der Spur bin:
Einige Nutzer können nix in das Gästebuch eintragen, obwohl ich und viele andere es können. Seltsam.
Das Gästebuch ist auch nix besonderes und grosses, ähnlich wie deins Datic unter Tutorials.
Ist dir schon einmal so ein Problem untergekommen? Browser-spezifisch scheint es nicht zu sein.
Ich denke ja immer Flash verhält sich bei jedem Rechner gleich (abgesehn von der Geschwindigkeit).
Hat das möglicherweise was mit Verbindungs-Geschwindigkeiten zu tun (Modem/DSL)?
 
Hi,

dazu müsste ich Dein PHP-Script sehen.

Sicherheitshalber würde ich das Script gewisse Infos an Flash zurückgeben lassen:

- sind alle Daten in $_POST angekommen? (echo "data=ok&");

- SQL-Abfrage erfolgreich? (echo "insert=ok&" ansonsten Fehlermeldung)

Wie gesagt: Das success ist immer true, wenn der sendAndLoad-Vorgang erfolgreich war. dem LoadVars-Objekt ist es ansonsten egal, ob die Arbeit des PHP-Scripts nun geklappt hat oder nicht.

Gruß

P.S.: Man sollte immer Funktionen deklarieren, bevor man sie aufruft. Auch wenn Flash da manchmal tolerant ist, ist es kein guter Stil (wer mal C++ und Java angefasst hat, kommt sowieso nicht drum rum ;) ).
.
 
Das is eigentlich nix kompliziertes.
Es funktioniert ja auch bei mir nur bei einigen nicht, das ist das komische.
Hier die input.php3:
PHP:
  require("entry.php3");
$datenow=(date("d/m/Y (H:i)"));  
$db = mysql_connect($server,$user,$passwort); mysql_select_db($dbname,$db);
$sql = "INSERT INTO guesttest (id,datenow,name,email,url,details,ipnr) VALUES('$id','$datenow','$name','$email','$url','$details','$REMOTE_ADDR')";
  $result = mysql_query($sql);
  
   $send_result = "&result=";
   $send_result .= rawurlencode($result );
     echo "$send_result";
?>
Wie gesagt: Das success ist immer true, wenn der sendAndLoad-Vorgang erfolgreich war. dem LoadVars-Objekt ist es ansonsten egal, ob die Arbeit des PHP-Scripts nun geklappt hat oder nicht.
<---Ich weiss.
 
Hi,

bist Du sicher, dass REGISTER_GLOBALS auf on steht? Überprüfe lieber alle Variablen mit isset() und fülle sie ansonsten mit Leerstrings.

Was hat "result" denn für einen Wert bei den Abfragen, die scheitern?

Gruß

P.S.: Warum setzt Du alle Variablen in Anführungsstriche? Das ist kein guter Stil und führt oft zu Fehlern. Lieber so:
PHP:
echo $send_result;
// und so:
$sql = "... VALUES('".$id."','".$datenow."',...");
.
 
Ja REGISTER_GLOBALS ist on bei mir. Das Abfragen mit isset() ist wahrscheinlich schöne Programmierweise, aber ich überprüfe schon in Flash ob ein Name und ein Text ins Gästebuch geschrieben wurde. Der Übertragung per POST vertrau ich mal (quasi ohne Einschreiben ;) )
"results" hat bei mir den Wert 1 wenn das Eintragen erfolgreich war, ansonsten ist es undefined.
Warum setz ich Variablen in Anführungsstriche? Keine Ahnung, das hab ich vom ehrenwerten Herrn Kannengiesser übernommen.
Ich bin nicht so tief in php. Daher weiss ich leider nicht was die drei Zeichen in php bedeuten die du mir vorgeschlagen hast: " ' .
" denk ich ist die Bezeichnung einer Zeichenkette. Und ' verhindert die Auflösung der Variablen in ihren Wert, was ich in dem Zusammenhang nicht verstehe. Der . sagt mir nix.

Jedenfalls scheint mein ursprüngliches Problem gelöst zu sein. Mit diesem Code:
PHP:
gastvars.onLoad = function(sucess) {
		   if (sucess) {  play(); }
			else { trace("Fehler");}
		}
gastvars.sendAndLoad("input.php3",gastvars,"POST");
Zum ursprünglichen Code hab ich drei Änderungen vorgenommen.
-"POST" statt "GET"
-das weiterlaufen von sucess abhängig gemacht
-onLoad vor sendAndLoad deklariert.
Wobei letztere Änderung, am wahrscheinlichsten diejenige ist die das gelingen des Codes bei allen bewirkt.
Danke.
 
Hi,

Beim Debuggen sollte man nichts und niemand vertrauen. ;)

Der Punkt dient in PHP zum Verknüpfen von Zeichenketten:
PHP:
$var = "Hallo"."Welt";
echo($var);
ergibt "Hallo Welt".

Ich vermute eher, dass die Umstellung auf POST des Pudels Kern war; denn die Übertragung per Adresszeile unterliegt bestimmten Limitierungen.

Die Deklaration von onLoad vor sendAndLoad wirkt sich nur auf das Verhalten bei der Antwort des Scriptes aus, nicht auf das Senden der Variablen (ich kann ja mit sendAndLoad was verschicken, ohne eine Antwort zu wünschen - dann kann ich mir auch onLoad sparen).

Gruß
.
 
Zurück