Daten vor änderung Speichern

Dieses Thema im Forum "Webentwicklung" wurde erstellt von ch-sokrates, 5. Januar 2006 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 5. Januar 2006
    Hallo,

    Folgendes Problem:

    Ich habe ein script geschrieben welches die daten von Kunden per mySQL ausliest.
    Der Kunde kann diese in diesem Formular auch ändern und genau das ist das Problem! Wenn der Kunde anstatt seinen Richtigen Namen xxxxxx eingibt währen die zuvor bei dem Produkt Kauf eingegebenen Daten weg.
    sprich wenn der Kunde seine Daten ändert werden zunächst seine alten Daten ausgelesen und in eine Tabelle z.b. system_logging geschrieben.
    Dann erst dürfen die neuen Daten in der biz_kunden gespeichert werden.
    So kann man immer zurückverfolgen wer wann welche Änderungen vorgenommen hat.


    hier mal das Script:

    Code:
    <?
    $module = basename(dirname(__FILE__));
    include("../../header.php");
    
    
    if(isset($_REQUEST[update])) {
     $db->query("update biz_kunden set mail='$_REQUEST[mail]',telefon='$_REQUEST[telefon]',ort='$_REQUEST[ort]',land='$_REQUEST[land]',fax='$_REQUEST[fax]',handy='$_REQUEST[handy]',plz='$_REQUEST[plz]',strasse='$_REQUEST[strasse]',nachname='$_REQUEST[nachname]',vorname='$_REQUEST[vorname]',kontoinhaber='$_REQUEST[kontoinhaber]',geldinstitut='$_REQUEST[geldinstitut]',kontonummer='$_REQUEST[kontonummer]',bankleitzahl='$_REQUEST[bankleitzahl]' where kundenid='$_SESSION[user]'");
     echo "<b>&Auml;nderungen wurden gespeichert.</b><br><br>";
    }
    
    
    $res = $db->query("select * from biz_kunden where kundenid='$_SESSION[user]'");
    $row = $db->fetch_array($res);
    
    ?>
    
    
    
    <form action="module/kundenmenue/stammdaten.php?update=true" method="post">
    <table width="540" border="0" cellspacing="0" cellpadding="0">
    <tr class="tb">
    <td>
    
    
    <table width="100%" border="0" cellspacing="1" cellpadding="3">
    <tr class="th">
     <td colspan="2"><b>Stammdaten</b></td>
    </tr>
    <tr class="tr">
     <td>Firma</td>
     <td><?=$row[firma]?></td>
    </tr>
    <tr class="tr">
     <td>Anrede</td>
     <td><?=$row[anrede]?></td>
    </tr>
    <tr class="tr">
     <td>Vorname</td>
     <td><input type="text" name="vorname" size= "30" value="<?=$row[vorname]?>"></td>
    </tr>
    <tr class="tr"> 
     <td>Nachname</td>
     <td><input type="text" name="nachname" size= "30" value="<?=$row[nachname]?>"></td>
    </tr>
    <tr class="tr">
     <td>Strasse</td>
     <td><input type="text" name="strasse" size= "30" value="<?=$row[strasse]?>"></td>
    </tr>
    <tr class="tr">
     <td>PLZ</td>
     <td><input type="text" name="plz" size= "30" value="<?=$row[plz]?>"></td>
    </tr>
    <tr class="tr">
     <td>Ort</td>
     <td><input type="text" name="ort" size= "30" value="<?=$row[ort]?>"></td>
    </tr>
    <tr class="tr">
     <td>Land</td>
     <td><input type="text" name="land" size= "30" value="<?=$row[land]?>"></td>
    </tr>
    <tr class="tr">
     <td>Telefon</td>
     <td><input type="text" name="telefon" size= "30" value="<?=$row[telefon]?>"></td>
    </tr>
    <tr class="tr">
     <td>Telefax</td>
     <td><input type="text" name="fax" size= "30" value="<?=$row[fax]?>"></td>
    </tr>
    <tr class="tr">
     <td>Mobil</td>
     <td><input type="text" name="handy" size= "30" value="<?=$row[handy]?>"></td>
    </tr>
    <tr class="tr">
     <td>E-Mail</td>
     <td><input type="text" name="mail" size= "30" value="<?=$row[mail]?>"></td>
    </tr>
    <tr class="tr">
     <td>Zahlungsart</td>
     <td>
     <? if ($row[bezahlart]=="rechnung") { 
     echo "Rechnung";
     } else {
     echo "Lastschrift";
     }
     ?>
     </td>
    </tr>
    <? if ($row[bezahlart]=="lastschrift") { ?>
    <tr class="tr">
     <td colspan="2"><b>Ihre Bankverbindung</b></td>
    </tr>
    <tr class="tr">
     <td>Kontoinhaber</td>
     <td><input type="text" name="kontoinhaber" size= "30" value="<?=$row[kontoinhaber]?>"></td>
    </tr>
    <tr class="tr">
     <td>Name der Bank</td>
     <td><input type="text" name="geldinstitut" size= "30" value="<?=$row[geldinstitut]?>"></td>
    </tr>
    <tr class="tr">
     <td>Kontonummer</td>
     <td><input type="text" name="kontonummer" size= "30" value="<?=$row[kontonummer]?>"></td>
    </tr>
    <tr class="tr">
     <td>Bankleitzahl</td>
     <td><input type="text" name="bankleitzahl" size= "30" value="<?=$row[bankleitzahl]?>"></td>
    </tr>
    <? } ?>
    <tr class="tr">
     <td>&nbsp;</td>
     <td><input type="submit" value="&Auml;nderungen speichern"></td>
    </tr>
    </table>
    
    
    </td>
    </tr>
    </table>
    
    </form>
    
    
    
    
    
    
    
    
    <?include("../../footer.php");?>
    hoffe ist zu verstehen

    Gruß

    Sokrates
     
  2. 5. Januar 2006
    hmm und wo ist nun dein konkretes problem?

    btw könntest du mit serialize eine art history machen (serialize erlaubt es komplexere daten strukturen wie arrays in einer mysql db einzulagern dh du müsstest diesen array vor jedem speichern erweitern)
     
  3. 5. Januar 2006
    hm also du könntest es doch soc machen

    die seite wird aktualisiert und dabei wird ein sql insert befehl ausgeführt

    nur die variablen die du willst. Hast du ja schon

    kundenid='$_SESSION[user]'

    dann brauchst du sie doch nur noch in eine andere eintragen lassen
     
  4. 5. Januar 2006
    du kannst ja bevor du das ganze änderst einfach alle daten aus der tabelle auslesen und dann in eine neue einfügen dann die haupt tabelle ändern
     
  5. 5. Januar 2006
    ^
    || guck mal ein post über dir ^^ hab ich eben vorgeschlagen *gg*
     
  6. 5. Januar 2006
    aber wenn sie aktuallisiert schreibt er ja die geänderten daten in die DB ich möchte jedoch die daten vor der änderung speichern lassen um einen missbrauch vorzubeugen
     
  7. 5. Januar 2006
    aber wenn du es so machst müsste es eigendlich gehen

    if(isset($_REQUEST[update])) {

    $res = $db->query("select * from biz_kunden where kundenid='$_SESSION[user]'");
    $row = $db->fetch_array($res);

    $SQL insert into biz_kunden_sicherung set name='$name',.....

    und dann erst der update befehl

    $db->query("update biz_kunden set mail='$_REQUEST[mail]',telefon='$_REQUEST[telefon]',ort='$_REQUEST[ort]',land='$_REQUEST[land]',fax='$_REQUEST[fax]',handy='$_REQUEST[handy]',plz='$_REQUEST[plz]',strasse='$_REQUEST[strasse]',nachname='$_REQUEST[nachname]',vorname='$_REQUEST[vorname]',kontoinhaber='$_REQUEST[kontoinhaber]',geldinstitut='$_REQUEST[geldinstitut]',kontonummer='$_REQUEST[kontonummer]',bankleitzahl='$_REQUEST[bankleitzahl]' where kundenid='$_SESSION[user]'");
    echo "<b>&Auml;nderungen wurden gespeichert.</b><br><br>";


    glaubst du nicht das könnte funzen ?
     
  8. 5. Januar 2006
    Parse error: parse error, unexpected T_STRING in stammdaten.php on line 11

    Code:
    <?
    $module = basename(dirname(__FILE__));
    include("../../header.php");
    
    
    if(isset($_REQUEST[update])) {
    
    $res = $db->query("select * from biz_kunden where kundenid='$_SESSION[user]'");
    $row = $db->fetch_array($res);
    
    $SQL insert into biz_kunden_sicherung set name='$mail',$telefon',$ort',$land',$fax';
    
     $db->query("update biz_kunden set mail='$_REQUEST[mail]',telefon='$_REQUEST[telefon]',ort='$_REQUEST[ort]',land='$_REQUEST[land]',fax='$_REQUEST[fax]',handy='$_REQUEST[handy]',plz='$_REQUEST[plz]',strasse='$_REQUEST[strasse]',nachname='$_REQUEST[nachname]',vorname='$_REQUEST[vorname]',kontoinhaber='$_REQUEST[kontoinhaber]',geldinstitut='$_REQUEST[geldinstitut]',kontonummer='$_REQUEST[kontonummer]',bankleitzahl='$_REQUEST[bankleitzahl]' where kundenid='$_SESSION[user]'");
     echo "<b>&Auml;nderungen wurden gespeichert.</b><br><br>";
    }
    
    }
    hmm bin ich blöd?
     
  9. 5. Januar 2006
    nee hast nur was übersehen

    set name='$mail',$telefon',$ort',$land',$fax';

    du musst
    zuerst sagen wie das feld in der datenbank heißt und dann die variable definieren name='$name', mail='$mail'....

    edit:// und danach muss dann noch der query eingefügt werden also

    mysql_query($sql) OR DIE(mysql_error());
     
  10. 5. Januar 2006
    du musst in zeile 11 den ganzen quatsch queryen so wie oben

    ausserdem sind die ganzen sachen in dem array $row

    dh du musst anstatt name $row['name'] nehmen etc.
     
  11. 5. Januar 2006
    habe ich doch oben gemacht:

    Code:
    $SQL insert into biz_kunden_sicherung set name='$mail',$telefon',$ort',$land',$fax';
     
  12. 5. Januar 2006

    stimmt sry hab ich ganicht gesehen, dass die variablen nicht definiert waren
     
  13. 5. Januar 2006
    sorry jetzt bin ich durcheinander kann jemand mal ein bspl. machen wie das jetzt gemeint ist?
     
  14. 5. Januar 2006
    sry das du jetzt durcheinander bist ^^

    $sql insert into biz_kunden_sicherung set firma='$row[firma]',email='$row',...
    mysql_query($sql) OR DIE(mysql_error());

    so

    ich hab die neue spalte jetzt

    biz_kunden_sicherung

    genannt die muss halt erstellt werden und genau wie biz_kunden aussehen

    kannste dir ja ein backup machen und dann in biz_kunden_sicherung oder wie du es nennst wieder einfügen
     
  15. 5. Januar 2006
    btw würde in die history noch 2 felder einfügen

    1. eine zeitangabe wann etwas geändert wurde

    und

    2. die id der person die das gnaze geändert hat damit du das ganze auch zurückverfolgen kannst
     
  16. 6. Januar 2006
    wenn ich es so einfüge sagt er mir:

    bei diesem code:

    Code:
    $sql insert into biz_kunden_sicherung set firma='$row[firma]',email='$row[email]';
    mysql_query($sql) OR DIE(mysql_error());
    gruß und dank

    sokrates
     
  17. 6. Januar 2006
    muss den in beide zeilen am ende ein ; oder nicht was anderes??? Würde mich auch interessieren..
     
  18. 6. Januar 2006


    Code:
    $sql ="insert into biz_kunden_sicherung set firma='$row[firma]',email='$row[email]'";
    mysql_query($sql) OR DIE(mysql_error());
    ich dachte du passt es noch an *gg* ab so muss es jetzt gehen
     
  19. 6. Januar 2006
    Hallo,

    danke für die Hilfe! es gibt keine Fehlermeldung, jedoch legt er in der Tabelle biz_kunden_sicherung nur neue Spalten an jedoch ohne Inhalte.

    währe es nicht einfacher die Trash Funktion zu nutzen?

    Hatte das hier gefunden

    Code:
    function trash($table,$cond) {
     global $db;
     
     $res = $db->query("SHOW COLUMNS FROM $table");
     if ($db->num_rows($res) > 0) {
     while ($row = mysql_fetch_assoc($res)) {
     $fields .= "$row[Field],";
     }
     }
    
     $fields = rtrim($fields,',');
    
     $res = $db->query("select * from $table $cond"); 
     $row = $db->fetch_array($res);
     
     $values = "$row[0]";
     
     for($i = 1; $i < $db->num_fields($res); $i++)
     {
     $values .= "::$row[$i]";
     }
    
     $entrydate = time();
     $db->query("insert into system_trash (entrydate,entrytable,entryfields,entryvalues) values ('$entrydate','$table','$fields','$values')");
     $db->query("delete from $table $cond");
    
    }
    gruß

    sokrates
     
  20. 8. Januar 2006
    push
     
  21. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.