Webdesign in Siegen

Daten vergleichen

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

Daten vergleichen

Beitragvon veNom am 30.08.2007, 14:15

hiho,

mal wieder ein PHP Problem, bzw weiß ich nicht wonach ich suchen soll in Google.

Ich habe ein "edit" Script, also wo ich Daten ändern kann, da ich aber nicht einfach alles neu eintragen möchte, würde ich gerne die Daten erst vergleichen.

verglichen werden sollen die vorhanden einträge der Datenbank die durch "$row["name"]" ausgelesen werden und die von dem editier Formular "$_POST["name"]", alle die dann ungleich sind sollen ddann upgedated werden, da ich nicht hunderttausend IF-Abfragen verschachtelt haben möchte, versuche ich eine bequemere, kürzere Lösung zu finden.

Werd natürlich weiterhin versuchen in Google was zu finden, aber vielleicht kennt ihr ja genau das was ich suche.
All you get is all you need
Benutzeravatar
veNom
Mitglied
 
Beiträge: 1660
Registriert: 29.12.2005, 23:31
Wohnort: Wien

Beitragvon Basti am 30.08.2007, 14:40

Wieso denn so kompliziert, wo es doch viel simpler geht? ;)

Meiner Meinung nach ist es viel zu umständlich, extra zu überprüfen, ob Daten geändert wurden oder nicht und dann einzeln zu aktualisieren.

Ich handhabe das bei mir immer so, dass alle zu editierenden Felder geupdatet werden, egal ob Änderungen vorgenommen wurden oder nicht.
In deinem Formular gibst du ja wahrscheinlich alles Werte aus, die geändert werden können.
Wenn du das Formular abschickst, dann lässt du einfach alles ändern, selbst wenn die Daten im Prinzip unverändert sind.
Das erspart die viel Arbeit und einen Nachteil in Sachen Performance oder sonst was solltest du dadurch auch nicht bekommen.
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Beitragvon veNom am 30.08.2007, 15:52

Ok, damit hast du mich überzeugt aber da wäre noch ein problem wo ich nun seit knapp einer Stunde mit meinen Arbeitskollegen darüber diskutiere und versuche eine Lösung zu finden wie man dies am besten Löst.

Die Situation ist folgende:
Beim erstellen habe ich 2 Radio Buttons, einer heist "direct" der andere "indirect", wähle ich "direct" aus kommt darunter ein div-layer mit weiteren feldern zum ausfüllen bzw sind ausgefüllt, bei Indirect das selbe. Fiese Felder heißen verschieden bei den 2 Typen.

Das mit dem Eintragen ist kein Problem, da ist nur um die Situation richtig zu verstehen, das Problem ist die Abfrage bei der Bearbeitung.

Angenommen man hat bei der Erstellung direct ausgewählt, der user ändert lediglich einen eintrag bei direct, nur ein Update Passiert. Nun wechselt der User aber von direct zu indirect und trägt dort seine Daten ein, dann soll bei direct der eintrag aus der datenbank gelösscht werden und bei indirect ein neuer erstellt werden.
Und umgekehrt natürlich genauso...

Ich hoffe ich habe mich verständlich ausgedrückt, wie haben dies hier nun nach 1 Stunde ausgearbeitet und würden gerne eure Meinung dazu hören.
Code: Alles auswählen
if($row["method"] == 'direct' && $_POST["method"] == 'direct') {
   UPDATE DIRECT
}
else {
   DEL DIRECT
   INSERT INDIRECT
}

if($row["method"] == 'indirect' && $_POST["method"] == 'indirect') {
   UPDATE INDIRECT
}
else {
   DEL INDIRECT
   INSERT DIRECT
}
All you get is all you need
Benutzeravatar
veNom
Mitglied
 
Beiträge: 1660
Registriert: 29.12.2005, 23:31
Wohnort: Wien

Beitragvon Basti am 30.08.2007, 18:23

Ja, die if-Abfragen sind da schon nötig, wenn es das war, was du wissen wolltest ;)

Ich nehme an die SQL-Befehle sollen nur angedeutete Queries sein, oder?
Wenn ich euer Vorhaben nun richtig verstanden habe ist die Lösung so auch ok und eigentlich ist auch nix falsch oder unnötig umständlich.
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Beitragvon veNom am 30.08.2007, 18:33

Haben rausgefundunden das, dass so doch nicht geht, wir hatten es noch nicht getestet, bin jetzt zuhause, aber wir werden morgen weiter daran arbeiten, vielleicht habt ihr ja ideen wie es gehen könnte.
Wir haben 2 Stunden vor dem Teil gesessen um eine ordentliche, einfache und vorallen kurze Methode finden, denn wir wollen das Script nicht unnötig verlangsamen mit zuvielen if-abfragen...
All you get is all you need
Benutzeravatar
veNom
Mitglied
 
Beiträge: 1660
Registriert: 29.12.2005, 23:31
Wohnort: Wien

Beitragvon Basti am 30.08.2007, 21:00

Ok, ich kann gerne mal mitüberlegen.

Aber dazu bräuchte ich dann mal eine ungefähre Vorstellung davon, wie das ganze konzipiert ist und wie die Datenbankstruktur aussieht.
Weil im Moment muss ich mir das meiste erschließen ;)
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Beitragvon veNom am 31.08.2007, 09:28

So ich hoffe ich erklär das jetzt auch wirklich so wie es ist und verständlich :lol: ...

Das Formular is wie folgt aufgebaut bei der Problemstelle:
2 Radio Buttons die vià Javascript angesteuert werden, je nach dem welchen man anklickt erscheint der Div-Layer mit den dazugehörigen Formularelementen.
Der Code der Radio Buttons:
Code: Alles auswählen
           <?php
               if($row["method"] == 'direct') {
            ?>
               <input type="radio" name="method" id="direct" value="direct" onclick="oncheck1()" checked="checked" /><label for="direct">Direct use</label><br />
               <input type="radio" name="method" id="indirect" value="indirect" onclick="oncheck2()" /><label for="indirect">Indirect use</label><br />
            <?php
            }
               if($row["method"] == 'indirect') {
            ?>
               <input type="radio" name="method" id="direct" value="direct" onclick="oncheck1()" /><label for="direct">Direct use</label><br />
               <input type="radio" name="method" id="indirect" value="indirect" onclick="oncheck2()" checked="checked" /><label for="indirect">Indirect use</label><br />
         <?php
            }
         ?>


Hier wird bereits rausgefunden welche der 2 in der Datenbank steht, dieses wird dann ausgewählt und angezeigt. Dazu gibts es noch eine weitere Abfrage beim Div-Layer die ich mir aber sparen werde.

Der Datenbank aufbau ist wiefolgt:
mv_record
Hier wird alles eingetragen, die entscheidendten Felder hier heißen "method" und "methodid", weiters gibts es 2 Tabellen mit namen "mv_direct" und "mv_indirect", in diesen werden die dazugehörigen Informationen eingetragen, beim Eintragen läuft ein kleines Script das raus findet welches die nächste ID bei dem EIntrag in "mv_direct" oder "mv_indirect" sein wird. Die nächste ID wird dann in das Feld "methodid" eingetragen, in das Feld "method" kommt entweder der Wert "direct" oder "indirect". Durch diese 2 Felder lässt sich nun herausfinden welches Methode gewählt wurde und welcher Eintrag zu dem jeweiligen Record gehört.

Soweit zum Aufbau des ganzen Scriptes, unser Problem liegt nun bei der Änderung der Daten.
Ein Script soll überprüfen ob die Methode geändert wurde, wurde diese geändert soll der alte Eintrag der vorherigen Methode gelöscht werden und der neue Eintrag bei der neuen Methode soll eingetragen werden.
Ist die Methode die selbe soll lediglich der Eintrag upgedated werden.

So ich hoffe ich habe es euch richtig erklärt, so das ihr mir vielleicht beim logischen Teil weiterhelfen könnt, das Problem liegt eigentlich nur darin das ich logisch total verpeilt denke bei dem Thema.

edit:
Abfrage ist geschafft, es wird richtig upgedated und richtig gelöscht und neu eingetragen, allerdings ist jetzt ein anderes Problem aufgetaucht.

Angenommen, man hat 1 Eintrag, man wechselt von direct auf indirect, der Eintrag von direkt wird gelöscht und indirect erstellt. So nun ist es ja so das wenn ich nun wieder wechsel und bei direct wieder ein Eintrag gemacht wird, nimmt mysql die nächste ID und nicht die 1te da diese schon einmal existiert hat. Mein Script aber lest die nächste ID aus, das wäre dann 1, aber eigentlich ist es ja 2...

Wie kann man das lösen?

edit2:
Lösung war nun das die ID mit eingetragen wird und nicht automatisch von mysql, so kann man das problem umgehen mit der falschen ID.

So vorerst habe ich nun keine Fragen mehr, auch wenn ich mir selbst geholfen habe, Danke für euer Interesse :)
All you get is all you need
Benutzeravatar
veNom
Mitglied
 
Beiträge: 1660
Registriert: 29.12.2005, 23:31
Wohnort: Wien

Beitragvon Basti am 31.08.2007, 12:58

Freut mich, dass du es noch selbst geschafft hast ;)

So lernt man ja noch immer am besten 8)
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast