Diese Board wurde aus Spamschutz-Gründen auf minimale Funktionen beschränkt.
Nutze für neue Anfragen/Bug-Reports bitte meine Gitlab-Instanz.

Erfassen eines Kontakts -> Mehrere Einträge in DB

Hilfe bei Installation oder einem Update der Kontakteverwaltung. Behebung von aufgetretenen Fehlern.
Antworten
azul99
Beiträge: 6
Registriert: So 25. Nov 2007, 09:02

Erfassen eines Kontakts -> Mehrere Einträge in DB

Beitrag 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?
Benutzeravatar
der-domi
Site Admin
Beiträge: 673
Registriert: Di 4. Apr 2006, 19:22
Kontaktdaten:

Re: Erfassen eines Kontakts -> Mehrere Einträge in DB

Beitrag von der-domi »

Lustiges Verhalten :o

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
azul99
Beiträge: 6
Registriert: So 25. Nov 2007, 09:02

Re: Erfassen eines Kontakts -> Mehrere Einträge in DB

Beitrag 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?
Benutzeravatar
der-domi
Site Admin
Beiträge: 673
Registriert: Di 4. Apr 2006, 19:22
Kontaktdaten:

Re: Erfassen eines Kontakts -> Mehrere Einträge in DB

Beitrag 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

Code: Alles auswählen

header( "location:{$_SERVER['PHP_SELF']}?$vars" );
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.
Nicht verzagen, Domi fragen

Viele Grüße
Dominik
azul99
Beiträge: 6
Registriert: So 25. Nov 2007, 09:02

Beitrag 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.
Benutzeravatar
der-domi
Site Admin
Beiträge: 673
Registriert: Di 4. Apr 2006, 19:22
Kontaktdaten:

Beitrag 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.
Nicht verzagen, Domi fragen

Viele Grüße
Dominik
azul99
Beiträge: 6
Registriert: So 25. Nov 2007, 09:02

Beitrag 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:

Code: Alles auswählen

echo "{$_SERVER['PHP_SELF']}?$vars";
ist:

Code: Alles auswählen

/adresstest/index.php?menu=detail&contactid=8
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
Benutzeravatar
der-domi
Site Admin
Beiträge: 673
Registriert: Di 4. Apr 2006, 19:22
Kontaktdaten:

Beitrag 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!
Nicht verzagen, Domi fragen

Viele Grüße
Dominik
azul99
Beiträge: 6
Registriert: So 25. Nov 2007, 09:02

Beitrag 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.
Benutzeravatar
der-domi
Site Admin
Beiträge: 673
Registriert: Di 4. Apr 2006, 19:22
Kontaktdaten:

Beitrag 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
Nicht verzagen, Domi fragen

Viele Grüße
Dominik
Benutzeravatar
der-domi
Site Admin
Beiträge: 673
Registriert: Di 4. Apr 2006, 19:22
Kontaktdaten:

Beitrag 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!
Nicht verzagen, Domi fragen

Viele Grüße
Dominik
azul99
Beiträge: 6
Registriert: So 25. Nov 2007, 09:02

Beitrag 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!
Benutzeravatar
der-domi
Site Admin
Beiträge: 673
Registriert: Di 4. Apr 2006, 19:22
Kontaktdaten:

Beitrag von der-domi »

Hi.

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']);
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.
Nicht verzagen, Domi fragen

Viele Grüße
Dominik
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast