Diese Board wurde aus Spamschutz-Gründen auf minimale Funktionen beschränkt.
Nutze für neue Anfragen/Bug-Reports bitte meine Gitlab-Instanz.
Nutze für neue Anfragen/Bug-Reports bitte meine Gitlab-Instanz.
Erfassen eines Kontakts -> Mehrere Einträge in DB
-
- Beiträge: 6
- Registriert: So 25. Nov 2007, 09:02
Erfassen eines Kontakts -> Mehrere Einträge in DB
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?
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?
- der-domi
- Site Admin
- Beiträge: 673
- Registriert: Di 4. Apr 2006, 19:22
- Kontaktdaten:
Re: Erfassen eines Kontakts -> Mehrere Einträge in DB
Lustiges Verhalten ![Surprised :o](./images/smilies/icon_surprised.gif)
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.
![Surprised :o](./images/smilies/icon_surprised.gif)
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.
Nicht verzagen, Domi fragen
Viele Grüße
Dominik
Viele Grüße
Dominik
-
- Beiträge: 6
- Registriert: So 25. Nov 2007, 09:02
Re: Erfassen eines Kontakts -> Mehrere Einträge in DB
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?
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?
- der-domi
- Site Admin
- Beiträge: 673
- Registriert: Di 4. Apr 2006, 19:22
- Kontaktdaten:
Re: Erfassen eines Kontakts -> Mehrere Einträge in DB
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 ändern in 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.
das Skript wird neugeladen, damit man durch Drücken von F5 nicht nochmal einen Eintrag in die DB machen kann.
Du kannst diesen Befehl
Code: Alles auswählen
header( "location:{$_SERVER['PHP_SELF']}?$vars" );
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);
}
}
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);
}
}
Zur Info: Der Aufruf "$myDB->go()" führt einen SQL-Befehl aus.
Dann kommentiere mal den anderen, oberen SQL-Befehl aus.
Nicht verzagen, Domi fragen
Viele Grüße
Dominik
Viele Grüße
Dominik
-
- Beiträge: 6
- Registriert: So 25. Nov 2007, 09:02
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.
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.
- der-domi
- Site Admin
- Beiträge: 673
- Registriert: Di 4. Apr 2006, 19:22
- Kontaktdaten:
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:Was wird ausgegeben?
PHP läuft serverseitig ab. Deshalb gibt es keinen Datenverkehr mit dem Browser.
Code: Alles auswählen
// reload script and go to "change"
$vars = $myVar->getRequest("",FALSE,"&");
echo $vars;
//header( "location:{$_SERVER['PHP_SELF']}?$vars" );
PHP läuft serverseitig ab. Deshalb gibt es keinen Datenverkehr mit dem Browser.
Nicht verzagen, Domi fragen
Viele Grüße
Dominik
Viele Grüße
Dominik
-
- Beiträge: 6
- Registriert: So 25. Nov 2007, 09:02
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:
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
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:
Code: Alles auswählen
echo "{$_SERVER['PHP_SELF']}?$vars";
Code: Alles auswählen
/adresstest/index.php?menu=detail&contactid=8
Code: Alles auswählen
if ( isset($_REQUEST['sent']) && is_file("./includes/{$myVar->menu}_sent.php") )
Naja, dies ist zumindest meine Vermutung.
Liebe Grüsse, Azul
- der-domi
- Site Admin
- Beiträge: 673
- Registriert: Di 4. Apr 2006, 19:22
- Kontaktdaten:
Was meinst du denn mit "nach dem Einfügen"? Hast du die Funktion header() noch auskommentiert? Dann ist es richtig so.azul99 hat geschrieben:Ich habe mal die Variable 'sent' ausgegeben und siehe da, nach dem einfügen steht diese immer noch auf 'true'.
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();
}
Nicht verzagen, Domi fragen
Viele Grüße
Dominik
Viele Grüße
Dominik
-
- Beiträge: 6
- Registriert: So 25. Nov 2007, 09:02
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.
Deinen Codeschnipsel mit exit(); habe ich auch getestet. Keine Änderung. Die Kontakte werden immer noch mehrfach erfasst.
- der-domi
- Site Admin
- Beiträge: 673
- Registriert: Di 4. Apr 2006, 19:22
- Kontaktdaten:
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.azul99 hat geschrieben:Die Variablen bleiben also irgendwie erhalten.
Da es bei dir ja jetzt funktioniert, wird es ein wenig von meiner Seite dauern...
Danke
Nicht verzagen, Domi fragen
Viele Grüße
Dominik
Viele Grüße
Dominik
- der-domi
- Site Admin
- Beiträge: 673
- Registriert: Di 4. Apr 2006, 19:22
- Kontaktdaten:
-
- Beiträge: 6
- Registriert: So 25. Nov 2007, 09:02
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!
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!
- der-domi
- Site Admin
- Beiträge: 673
- Registriert: Di 4. Apr 2006, 19:22
- Kontaktdaten:
Hi.
Wie schon vorher erwähnt, kann ich mir das Verhalten einfach nicht erklären. Ich habe nun eineingefügt. Du kannst ja mal, wenn du wieder Zeit hast, danach ein einfügen und schauen, was passiert.
Wie schon vorher erwähnt, kann ich mir das Verhalten einfach nicht erklären. Ich habe nun ein
Code: Alles auswählen
unset($_POST['sent']);
Code: Alles auswählen
if ( isset($_POST['sent']) ) exit("immer noch aktiv");
Nicht verzagen, Domi fragen
Viele Grüße
Dominik
Viele Grüße
Dominik
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast