Daten ändern und neu speichern

anne71

Grünschnabel
Hallo,

möchte gerne vorhandene Adressen aus der Datenbank ändern können. Hierzu habe ich mir eine Liste aus der DB gebaut. Über einen Link gelangt man auf eine Detailseite wo alle Felder dargestellt werden sollen.
Werden Änderungen vorgenommen, sollten diese über den Submit-Button gespeichert werden.
Damit die Daten in einem Formularfeld dargestellt werden, habe ich folgenden Code genommen

<input name="zusatz" value="<?echo $row["$zusatz"]?>";

Aber beim Abschicken tut sich jedoch noch nichts. Sicherlich ist mein Aufbau nicht ganz funktionsfähig.

PHP:
<?php		// Daten ändern
include ("checkuser.php"); 
session_start (); 
$Link=mysql_connect("localhost","xxx","xxx");
mysql_select_db("xxx");
//detail_adressen.php

if (!$_GET['adress_id']) { 
    echo ("<FONT FACE=\"Arial\"><FONT SIZE=\"-1\">'Keine ID übergeben!'"); 
} 
else { 
    $adress_id = mysql_escape_string($_GET['adress_id']); 
    $sql = mysql_query("SELECT * FROM prax_adressen WHERE adress_id = '".$adress_id."'");
    $row = mysql_fetch_array($sql);
}

$firma1=$row["firma"];
$zusatz = $row["zusatz"];
$strasse = $row["strasse"];
$plz = $row["plz"];
$ort = $row["ort"];

echo ("$firma1&nbsp;");
echo ("$zusatz&nbsp;");
echo ("$strasse&nbsp;");

?>

<html>
<head>  
  <title>Detail-Seite</title>  
</head>  
<body> 
  <hr> 
 
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=3>
   <TR>
      <TD VALIGN=top WIDTH=50>
         <P><FONT SIZE="-2" FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;</FONT>
         
      </TD>
      <TD VALIGN=top>
         <P><FONT SIZE="-2" FACE="Arial"><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=2 WIDTH=350>
            <TR>
               <TD COLSPAN=2 WIDTH=374>
                  <P><FONT SIZE="-2" FACE="Arial"><u>(Daten ändern) <br></u><br>
                  </FONT><br><br>
				</TD>
            </TR>
            <tr>&nbsp;<script>document.write('<a href=\"javascript:history.back()\">... zur Liste</a>');</script>&nbsp;</tr>

            <TR>
               <TD WIDTH=120>
                  <P><FONT SIZE="-2" FACE="Arial">&nbsp;</FONT>
               </TD>
               <TD WIDTH=254><P><input name="firma" value="<?php echo $row["$firma1"]?>";
               <TD WIDTH=254><br><FONT SIZE="-2" FACE="Arial"><?php echo $row["firma"]; ?></FONT>
 
			   </TD>
            </TR>
            <TR>
               <TD WIDTH=120>
                  <P><FONT SIZE="-2" FACE="Arial">&nbsp;</FONT>
               </TD>
               <TD WIDTH=254>
                  <P><input name="zusatz" value="<?php echo $row["$zusatz"]?>";
               </TD>
            </TR>
            <TR>
               <TD WIDTH=120>
                  <P><FONT SIZE="-2" FACE="Arial">&nbsp;</FONT>
               </TD>
               <TD WIDTH=254>
                  <P><input name="strasse" value="<?php echo $row["$strasse"]?>";
               </TD>
            </TR>
            <TR>
               <TD WIDTH=120>
                  <P><FONT SIZE="-2" FACE="Arial">&nbsp;</FONT>
               </TD>
               <TD WIDTH=254>
                  <P><input name="plz" value="<?php echo $row["$plz"]?>";<br>
				  <input name="ort" value="<?echo $row["$ort"]?>";</FONT>
               </TD>
            </TR>
            <TR>
               <TD WIDTH=120 BGCOLOR="#DFEEFF">
                  <P><FONT SIZE="-2" FACE="Arial">Telefon:</FONT>
               </TD>
               <TD WIDTH=254>
                  <P><FONT SIZE="-2" FACE="Arial"><?php echo $row["tel"]; ?></FONT>
               </TD>
            </TR>
            <TR>
               <TD WIDTH=120 BGCOLOR="#DFEEFF">
                  <P><FONT SIZE="-2" FACE="Arial">Telefax:</FONT>
               </TD>
               <TD WIDTH=254>
                  <P><FONT SIZE="-2" FACE="Arial"><?php echo $row["fax"]; ?></FONT>
               </TD>
            </TR>
            
               <TD WIDTH=254>
                  <P><input type="submit" name="Submit" value="Speichern" onClick=" 
				  <?php
    $query = "UPDATE prax_adressen Set firma='$firma1' , zusatz='$zusatz' , strasse='$strasse' , plz='$plz' , ort='$ort' WHERE adress_id='".$adress_id."'";
    $result = mysql_query($query); 
    echo mysql_error(); 
    mysql_close(); 
	?>
				  "> 
                    
               </TD>
            </TR>
	

            
         </TABLE>
          </FONT>
      </TD>
   </TR>
</TABLE>
<? 
 
?> 

<HR>

</BODY>
</HTML>

Was muss ich noch ändern?
 
Das OnClick Ereignis kann nicht funktionieren. Das Ereignis tritt erst auf Clientseite ein, aber die Seite wird ja auf dem Server generiert, und der PHP Code schon vorher ausgeführt.

Lass das Formular auf eine andere Seite zeigen (z.B. "speichern.php"), sobald diese aufgerufen wird soll der Eintrag gespeichert werden.
 
Lass das Formular auf eine andere Seite zeigen (z.B. "speichern.php"), sobald diese aufgerufen wird soll der Eintrag gespeichert werden.

Hallo Bratkartoffel,

vielen Dank für Deine Antwort. Habe aber noch eine Frage.
Einfach den Bereich

PHP:
<input type="submit" name="Submit" value="Speichern" onClick=" 
				  <?php
    $query = "UPDATE prax_ .........
unter "speichern.php" übernehmen?
Muss ich dann die zu übergebenen Feld-Variablen nicht auch neu übernehmen? Dann lege ich die Variablen als "$_POST" an, sonst sind sie ja in der "speichern.php" wieder leer.

z.B.:
PHP:
$firma1=$row["firma"];
$zusatz = $row["zusatz"];
$strasse = $row["strasse"];
$plz = $row["plz"];

Den Bereich "speichern.php" wüßte ich nicht so wirklich wie ich den anlegen müßte, oder wird die Funktion schon mit Nutzung des vorherigen Links ausgelöst?
 
Hi,

Lass das Formular auf eine andere Seite zeigen (z.B. "speichern.php"), sobald diese aufgerufen wird soll der Eintrag gespeichert werden.

wozu so umständlich, dann muss man ja wieder per Location-Header zurücklenken.
Das Problem ist hier eher, dass es gar kein Formular gibt. Da fehlt das form-Tag. ;)

Dann brauchst Du auch kein onclick, sondern kannst am Anfang abfragen, ob $_POST['submit'] gesetzt ist (dann wurde das Formular abgeschickt), wenn ja, machst Du Dein update.

LG
 
Hi,



wozu so umständlich, dann muss man ja wieder per Location-Header zurücklenken.
Das Problem ist hier eher, dass es gar kein Formular gibt. Da fehlt das form-Tag. ;)

Dann brauchst Du auch kein onclick, sondern kannst am Anfang abfragen, ob $_POST['submit'] gesetzt ist (dann wurde das Formular abgeschickt), wenn ja, machst Du Dein update.

LG

Ja, so geht das auch, aber das kann auch unpraktisch sein. Nehmen wir z.B. ein Gästebuch. Da kann man dann durch drücken von F5 (dann kommt die Meldung "Diese Seite enthält POST-Daten....) nochmal den selben Eintrag machen (siehe Spamming). Deshalb hab ichs mir so angewöhnt, alle Eingaben, die der Benutzer machen kann, an eine extra Seite weiterzuleiten, und dann mit header("location: blubb.php") wieder zurückzuleiten.
 
Hi,

na ja, der spezielle Fall lässt sich ja nun relativ einfach verhindern (Stichwort: Doppeltes Absenden von Formularen). Da Bots selten F5 drücken, ;) ist das Speichern in einem Extra-Script auch kein Spamschutz.
Aber das spielt für Anne wahrscheinlich sowieso keine Rolle.

LG
 
Hallo Bratkartoffel und kuddeldaddeldu,

Anne dankt für eure Hilfe.
War ja doch 'ne schwierige Geburt. Hatte Probleme mit einigen globalen Variablen, bis ich mir überall kleine Hilfs-echo's eingebaut habe (nicht lachen, hilft aber gut), dann konnte ich es besser verfolgen, nun klappt alles.

Wie vorgeschlagen habe ich die Feldwerte mit $_POST zu einer neuen php übertragen und dort den Eintrag in der Datenbank zusammengebaut.

Äääh - mit der Sicherheit (doppeltes Absenden von Formularen) sehe ich nicht so eng, da es sich um einen geschlossenen Benutzerkreis handelt und dieser hier seine eigenen Daten aktualisieren würde. Von daher .....

Gruß
 
Zurück