Seite 1 von 1
Erfassen eines Kontakts -> Mehrere Einträge in DB
Verfasst: So 25. Nov 2007, 09:24
von azul99
Hallo
Beim Erfassen von Kontakten habe ich das Problem, dass diese mehrfach in die DB geschrieben werden. Auf
http://www.azul.ch/AdressTest/index.php
kann man das nachvollziehen indem man einen neuen Kontakt erfasst, aber z.B. keine Gruppe auswählt.
Weis jemand Rat?
Re: Erfassen eines Kontakts -> Mehrere Einträge in DB
Verfasst: So 25. Nov 2007, 22:53
von der-domi
Lustiges Verhalten
Leider habe ich überhaupt keine Idee, woran das liegen könnte. Ich gehe mal davon aus, dass du das Originalskript (ohne Änderungen) verwendest.
Besteht die Möglichkeit, dass du mir einen FTP-Zugang geben kannst. Dann kann ich mal im Skript debuggen, an welcher Stelle im Skript der Fehler überhaupt auftritt.
Re: Erfassen eines Kontakts -> Mehrere Einträge in DB
Verfasst: Mo 26. Nov 2007, 18:29
von azul99
Tatsächlich ein lustiges Verhalten. Ich gebe dir gerne alle Informationen zum Script (parametrisierung) und kann auch gerne selber etwas debuggen, wenn du mir sagst wo und was. Einen FTP Zugang kann ich dir leider nicht geben.
Ich verwende den Originalscript und habe nichts angepasst ausser was ich sollte. Soweit ich im Code gesehen habe, gibt es ein Foreward so dass man nach dem erfassen wieder auf dem insert form landet. Allenfalls loop da irgend was?
Re: Erfassen eines Kontakts -> Mehrere Einträge in DB
Verfasst: Mo 26. Nov 2007, 21:07
von der-domi
Hi,
das Skript wird neugeladen, damit man durch Drücken von F5 nicht nochmal einen Eintrag in die DB machen kann.
Du kannst diesen Befehl
mal auskommentieren. Was passiert? Bitte auskommentiert lassen!
Dann gilt es heraus zu finden, welcher DB-Aufruf in einer SChleife hängt. Es gibt zwei Stück. Tue mal bitte die die Zeilen
Code: Alles auswählen
for ( $i = 0; $i < count($_POST['groups']); ++$i )
{
if ( (int)$_POST['groups'][$i] ) {
$sql = "INSERT INTO $myDB->contacts_groups (contacts_contactid, groups_groupid) VALUES ($id, {$_POST['groups'][$i]})";
$rs = $myDB->go($sql);
}
}
ändern in
Code: Alles auswählen
for ( $i = 0; $i < count($_POST['groups']); ++$i )
{
if ( (int)$_POST['groups'][$i] ) {
$sql2 = "INSERT INTO $myDB->contacts_groups (contacts_contactid, groups_groupid) VALUES ($id, {$_POST['groups'][$i]})";
$rs2 = $myDB->go($sql2);
}
}
also einfach die Variablen umbenennen. Irgendwelche Änderungen?
Zur Info: Der Aufruf "$myDB->go()" führt einen SQL-Befehl aus.
Dann kommentiere mal den anderen, oberen SQL-Befehl aus.
Verfasst: Mi 28. Nov 2007, 18:26
von azul99
Ciao
Code auskommentieren -> nach dem Einfügen wird die Detailansicht des Kontaktes angezeigt (nicht das form). Ist die Zeile auskommentiert funktioniert es tipp topp.
An die Variablen '2' anhängen, Code nicht(!) auskommentiert -> Keine Änderung. Der Script loopt...
Meine Vermutung: Der Script ruft sich selbst wieder auf und rennt im Kreis rum. Ich habe mal mit Wireshark zugeschaut: Der Browser/Client ist in diesen Loop nicht involviert. Dies verwirrt mich ein wenig.
Na ja, für mich ist es mit dem auskommentieren gelöst. Falls du möchtest, führe ich aber gerne weiter Tests für dich durch.
Verfasst: Mi 28. Nov 2007, 21:03
von der-domi
Uff, das hätte ich jetzt nicht erwartet. Wobei, es gibt eigentlich auch keine andere Möglichkeit. Interessant ist es noch, welche Variablen übergeben werden. Dazu ändere mal bitte den Quellcode folgendermaßen ab:
Code: Alles auswählen
// reload script and go to "change"
$vars = $myVar->getRequest("",FALSE,"&");
echo $vars;
//header( "location:{$_SERVER['PHP_SELF']}?$vars" );
Was wird ausgegeben?
PHP läuft serverseitig ab. Deshalb gibt es keinen Datenverkehr mit dem Browser.
Verfasst: Do 29. Nov 2007, 19:20
von azul99
Ciao
Ganz unerwartet ist es für mich nicht. Das PHP Serverseitig ausgeführt wird war mir klar. Was mich erstaunt hat: Mit header("location... setzt du eigentlich eine HTTP Information, die für den Browser bestimmt ist. Darum hätte ich erwartet, dass der Browser diesen HTTP Header erhält und anschliessend auf diese Seite zurück directet. Anscheinend fängt das PHP vor dem senden ab.
Die Ausgabe von:
ist:
Auf Zeile 76 in index.php steht folgende Zeile:
Code: Alles auswählen
if ( isset($_REQUEST['sent']) && is_file("./includes/{$myVar->menu}_sent.php") )
Ich habe mal die Variable 'sent' ausgegeben und siehe da, nach dem einfügen steht diese immer noch auf 'true'. Deshalb läuft der Script auch immer wieder in den insert und loopt.
Naja, dies ist zumindest meine Vermutung.
Liebe Grüsse, Azul
Verfasst: Do 29. Nov 2007, 20:19
von der-domi
azul99 hat geschrieben:Ich habe mal die Variable 'sent' ausgegeben und siehe da, nach dem einfügen steht diese immer noch auf 'true'.
Was meinst du denn mit "nach dem Einfügen"? Hast du die Funktion header() noch auskommentiert? Dann ist es richtig so.
Probiere mal bitte folgendes
Code: Alles auswählen
// reload script and go to "change"
$vars = $myVar->getRequest("",FALSE,"&");
if ( !headers_sent() )
{
header( "Location: {$_SERVER['PHP_SELF']}?$vars" );
exit();
}
Vielen Dank!
Verfasst: Mo 3. Dez 2007, 19:54
von azul99
Mit nach 'nach dem einfügen' meine ich, dass ich einen neuen Kontakt erfasst habe und dann die Variable 'sent' ausgegeben habe. Die Funktion header() habe ich eben nicht(!) auskommentiert. Die Variablen bleiben also irgendwie erhalten.
Deinen Codeschnipsel mit exit(); habe ich auch getestet. Keine Änderung. Die Kontakte werden immer noch mehrfach erfasst.
Verfasst: So 9. Dez 2007, 11:26
von der-domi
azul99 hat geschrieben:Die Variablen bleiben also irgendwie erhalten.
Dann kann es eigentlich nur an irgendwelchen Einstellungen liegen. Vielleicht kannst du mir mal eine Auszug von phpinfo() zu kommen lassen (per PM oder Mail). Dann vergleiche ich mal die Einstellungen.
Da es bei dir ja jetzt funktioniert, wird es ein wenig von meiner Seite dauern...
Danke
Verfasst: Fr 4. Jan 2008, 15:57
von der-domi
Hi,
ich habe in der aktuellsten Version eine Änderung gemacht. Kannst du bitte mal ausprobieren, ob das funktioniert. Das wäre super!
Danke dir!
Verfasst: Sa 5. Jan 2008, 08:45
von azul99
Ciao Domi
Danke für die neue Version und deine eMail. Ich habe diese getestet, sie steht unter
http://www.azul.ch/AdressTest zur Verfügung. Leider tritt der Fehler mit den Mehrfacheinträgen nach wie vor auf.
Ich bin im Moment etwas unter Druck und habe leider nicht viel Zeit für die Fehlersuche. Werde mich aber gerne daran machen, wenn ich etwas Luft habe.
Liebe Grüsse und Merci!
Verfasst: Sa 5. Jan 2008, 13:10
von der-domi
Hi.
Wie schon vorher erwähnt, kann ich mir das Verhalten einfach nicht erklären. Ich habe nun ein
eingefügt. Du kannst ja mal, wenn du wieder Zeit hast, danach ein
Code: Alles auswählen
if ( isset($_POST['sent']) ) exit("immer noch aktiv");
einfügen und schauen, was passiert.