php formular update db

rabadag

Grünschnabel
Hallo Forum..

hab da ein prob wo ich nicht weiterkomme..
in einem formular gebe ich die daten einer ID aus und mann soll daten änder können.

nun das formular zeigt alles an nur wenn mann speichern will geschiet nichts in der db.

hier mal ein kurzform des cods..

PHP:
   <?php
  //$_GET['id']= '$id';
  
  $id="1" //provisorium der ID
  
  $select ="SELECT * FROM page_einsatz WHERE id LIKE '$id' ";
  $result=mysql_query("$select") or die("Anfrage nicht erfolgreich");
  
  
  while ($row = mysql_fetch_array($result))
  {
  ?>
  
  <form method="post" action="<?=$PHP_SELF?>?load=imput_einsatz&id=<?=$id?>">
  
  <input type="text" name="Einheit" value="<? echo $row['alarmierte_Einheiten'] ?>"  size="15" />
  
  <input type="submit" name="do_form_x" value="Speichern">
  
  </form>
  
  <?
  }
  
  if (isset($_REQUEST["do_form_x"])) {
  $result = mysql_query("SELECT * FROM page_einsatz");
  
  while($row = mysql_query($result)) {
  $result = mysql_query( " UPDATE page_einsatz SET alarmierte_Einheiten='$_POST[Einheit]' WHERE id='$id' ");
  
  }
  }
  
  ?>

ich hab da irgend wo einen fehler ab ich finde ihn nicht..
Kann mir einer helfen ?
 
Hi

Hier feht das ;

$id="1"; //provisorium der ID

Warum lässt Du hier nochmals ein Select aufrufen und setzt eine While-Schleife? Folgendes reicht, um einen eindeutigen Datensatz zu ändern. Weiterhin solltest Du den Aufruf der globalen Variable unterbrechen
PHP:
  <?
  if (isset($_REQUEST["do_form_x"])) {
  $result = mysql_query( " UPDATE page_einsatz SET alarmierte_Einheiten='".$_POST['Einheit']."' WHERE id='$id' ");
  }
  ?>

Sollte $id später als Werte aus einem Paramter übergeben werden, macht es Sinn, dies in eine hiddenfeld des Formular zu speichern und im Update einzusetzen.
 
Zuletzt bearbeitet:
Luzie hat gesagt.:
Hi

Hier feht das ;

$id="1"; //provisorium der ID

Warum lässt Du hier nochmals ein Select aufrufen und setzt eine While-Schleife? Folgendes reicht, um einen eindeutigen Datensatz zu ändern. Weiterhin solltest Du den Aufruf der globalen Variable unterbrechen
das war der fehler... nun geht das formular.
da sind natürlich einige felder mehr, die bearbeitet werden.

Luzie hat gesagt.:
Sollte $id später als Werte aus einem Paramter übergeben werden, macht es Sinn, dies in eine hiddenfeld des Formular zu speichern und im Update einzusetzen.

Ja die $id wird von einem link ?load=seite&id=1 übergeben.
aber ich verstehe nicht warum ich die ID in ein hidden feld steken soll, die besteht bereits in der db. auser wenn ein neuer datensatz hinzukommt dann muss last id +1

Kannst du mir noch sagen wie ich mit 2 weitern input typen den datensatz löschen und einen neunen erstallen kann ?
 
rabadag hat gesagt.:
Ja die $id wird von einem link ?load=seite&id=1 übergeben.
aber ich verstehe nicht warum ich die ID in ein hidden feld steken soll, die besteht bereits in der db. auser wenn ein neuer datensatz hinzukommt dann muss last id +1

Kannst du mir noch sagen wie ich mit 2 weitern input typen den datensatz löschen und einen neunen erstallen kann ?

Hi

das entzieht sich jetzt meiner Kenntnis. Warum id+1?
Wenn Du ein Feld im Deiner Daten mit dem auto_increment versiehst, zählt sich der bei jedem neuen Insert automatisch hoch.

Was delete und insert betrifft, da kannst Du das Gesamtstatement in ein Switch setzen und die übergebenen Werte der Buttons bzw. die Button-namen abfragen.

Sollte das Formular gleichzeitig auch für ein Insert benutzt werden, wirst Du dieses Feld

<input type="text" name="Einheit" value="<? echo $row['alarmierte_Einheiten'] ?>" size="15" />

abfragen müssen bzw. den jeweiligen Wert in eine Variable schreiben.

bsp.

PHP:
 // als Standard festlegen
 
 $einheit = $_POST['Einheit'];
 
 // wird aber z.b. eine ID übergeben oder was kenntlich macht, dass es sich um einen Datenstatz zum Editieren handelt bzw. eine selectiertes Feld in das Formularfeld eingelesen werden muss, dann kannst Du der Variablen $einheit diesen Wert verpassen. 
 
 if(isset($_GET['id'])) {
	 // Selectstatement
	 $einheit = $row['einheit'];
	 
	 //
 }
 
// [...]

<input type="text" name="Einheit" value="<? echo $einheit ?>"  size="15" />

Etwa in der Art.
 
Luzie hat gesagt.:
Hi

Was delete und insert betrifft, da kannst Du das Gesamtstatement in ein Switch setzen und die übergebenen Werte der Buttons bzw. die Button-namen abfragen.

wenn ich dich richte verstehe meinst du so was..
PHP:
  <input type="submit" name="delete" value="Löschen">
<?
   if (isset($_REQUEST["delete"])) {
  $id=$row['id'];
  $loeschen = "DELETE FROM page_einsatz WHERE `id` = '$id'";
 $loesch = mysql_query($loeschen);
 echo "<center><b>eintrag gelöscht!</b></center><br>"; } 
 ?>
ich könnte das ja dann auch als ".$PHP_SELF."?dell=".$row['id']." an die seite
weiter geben und dan den obenstehenden code als..
if ($_GET['del']) ausführen

Sollte das Formular gleichzeitig auch für ein Insert benutzt werden, wirst Du dieses Feld
abfragen müssen bzw. den jeweiligen Wert in eine Variable schreiben.
PHP:
   // als Standard festlegen
   
   $einheit = $_POST['Einheit'];
   
  
 // wird aber z.b. eine ID übergeben oder was kenntlich macht, dass es sich um einen Datenstatz zum Editieren handelt bzw. eine selectiertes Feld in das Formularfeld eingelesen werden muss, dann kannst Du der Variablen $einheit diesen Wert verpassen. 
   
   if(isset($_GET['id'])) {
  	 // Selectstatement
  	 $einheit = $row['einheit'];
 
  	 //
   }
   
  // [...]
  
  <input type="text" name="Einheit" value="<? echo $einheit ?>"  size="15" />
hmm..
das ist mir nun ein wenig zu hoch...

das ziehl ist mitteles einer session wia login den normalen webseite zusatzfehlder
anzuzeigen wie "edit" "del" "add"

ich gebe dan via diese varianten eine id mit der funktion.
z.b
PHP:
  <?PHP_SELF?>?load=input_einsatz&edit=<?=$row['id']?>

das Formular soll dann das entsprechende vornemen..
also 3 Funktionen in einem formular.

Ehrlich gesagt ist das für mich ein wenig zwiki, da ich noch ein php nob bin..
Arbeite erst seit 2 monaten damit.

Aber wie kann ich nun im formular alle drei sachen unterbringen ?
 
Hi

es gibt sehr unterschiedliche Möglichkeiten, alles auf einer Seite zu lösen.
Im Falle Löschen eines Datensatzes gehe ich nicht über ein Formular, sondern direkt über einen Link.

Im Grunde genommen ist es das, was ich schon oben beschrieben habe.

Du kannst es ja einfach mal testen. Ist nur ein Beispiel von mir.

Das ansteuern des Formulars kommt aber von einer Auswahlseite. Da wird die ID halt so übergeben

PHP:
<?
do {
  echo $row[1].' <a href="form.php?id='.$row[0].'">aendern</a> ';
  echo '<a href="form.php?loe=1&amp;id='.$row[0].'">loeschen</a><br>';
   }
   while ($row=mysql_fetch_array($rs));
?>

PHP:
<?
// Verbindung zur mySQL - Datenbank herstellen
// Standardvariablen festlegen, wenn ein Datensatz eingefügt werden soll
$table = "tabelle";

if(get_magic_quotes_gpc()) 
  {
    $name = $_POST['name'];
    $vorname = $_POST['vorname'];
  }
  else
  {
	$name = addslashes($_POST['name']);
	$vorname = addslashes($_POST['vorname']);
  }

// Namen für den submit-Button vergeben, der sich je nach Aktion dann ändert

$button = "speichern";

// Da der Aufruf des Formulars fürs Änderung und Löschen von außen kommt, durch die Übergabe der ID, werden hier die anderen Button-Werte festgelegt. 

if(isset($_GET['id'])) {
	
	if(isset($_GET['loe'])) {
		$button = "loeschen";
			} else {
		$button = "aendern";
	 	}
	
	$id = $_GET['id'];

  // Select-Statement zum Auslesen der Daten, damit diese editiert werden können
  // Einlesen in die entspr. Variablen
  
  $sql = "SELECT id, name, vorname from $table where id=$id";
  $rs = mysql_query($sql);
  $row = mysql_fetch_array($rs);

	  $name = $row[1];
	  $vorname = $row[2];

	mysql_free_result($rs);
	mysql_close($verbindung);
	
	// Abfrage der Button und Auslösen der unterschiedlichen Aktionen
	
	}
	if(isset($_POST['status'])) {
		switch($_POST['action']){
		case("speichern"): 
			mysql_query("insert into $table (name,vorname) Values ('$name','$vorname')")
				or die ("SQL-Fehler = ".mysql_error()); break;
		case("aendern"): 
			mysql_query("update $table 
				set name='$name', vorname='$vorname' where id = ".$_POST['id'])
				or die ("SQL-Fehler = ".mysql_error()); break;
		case("loeschen"): 
			mysql_query("delete from $table where id = ".$_POST['id'])
			or die ("SQL-Fehler = ".mysql_error()); break;				
		}
 	mysql_close($verbindung);		 
	header("location:http://www.domain.de/auswahlseite.php");
	}
 ?>
<html>
<head>
<title>Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<h1>Formular</h1>
<form name="form1" method="post" action="<? echo $_SERVER['PHP_SELF']?>">
  <input type="text" name="vorname" value="<? echo $vorname ?>">
vorname<br>
<br>
<input type="text" name="name" value="<? echo $name ?>">
nachname<br>
<br>
<input type="hidden" name="id" value="<? echo $id ?>">
<input type="hidden" name="status" value="1">

<input type="submit" name="action" value="<? echo $button; ?>">
</form>
</body>
</html>
 
Sali Luzie

Ich möchte mich erstmal bedanken für deine hilfe..

mein Formular Funktioniert nun mit dell und edit wunderbar.
Wie du gesagt hast eine del anweisung über die ID link ist das einfachste.
Geht auch wunderbar.

ich habe es mittels.
PHP:
   if ($_GET['del']) {
   $loeschen = "DELETE FROM page_einsatz WHERE id LIKE '".$_GET['del']."' ";
   $loesch = mysql_query($loeschen);
  ?>
 <div align="center" style="margin-top:100px; font-size:14px; font-weight:bold; color:#FF0000">Datensatz Erfolgreich gelöscht.</div>
  	 
 <div align="center" style="margin-top:10px; font-size:12px; color:#FF0000">Seite wird neu geladen</div>
 
<head><META HTTP-EQUIV=Refresh CONTENT="3; URL=<?=$PHP_SELF?>?session=<?=$session?>&load=einsatz">
 </head>
   
   	 <?
   exit();
   }
gelöst



nur eines geht mir leider nicht.

das add in die db da ist was faul.

PHP:
   if ($_GET['add']) {
   $result = mysql_query("INSERT INTO page_einsatz set einsatzstichwort='new'");
   
   }

wenn nun ein add erfolgt ist, wie finde ich heraus welche id der neue eintrag hat, damit
ich den via ?load an das formular senden kann ?
 
Zuletzt bearbeitet:
Hallo

ich kann nur nochmal darauf hinweisen, dass Du am besten eine id vom type int als auto_increment in mySQL laufen lässt. Da brauchst Du keine id beim Insert mit anzugeben, die zählt die Datenbank automatisch und von ganz allein hoch.

Wenn Du die nicht möchtest, dann wirst Du z.B. noch einen Select auf die bereits vorhandene letzte id (max(id)) setzen müssen und +1 hinzuzählen. Dies halte ich allerdings nicht für so eine gute Idee, hat einfach Nachteile z.B. wenn mehrere Personen gleichzeitig das Formular bestücken. Es gibt noch andere Möglichkeit, aber die beste ich einfach, es die Datenbank selbst machen zu lassen. .

Schau Dir meine Insert-Anweisung an.

Außerdem schreibst Du

if($_GET['add']))

Ein Tipp, ich würde das Formular über POST abschicken um Werte aus einem Formular zu speichern, anderenfalls geht alles über die Browserleiste.
 
Zuletzt bearbeitet:
Hallo Luzie

Hatte die letzten Tage keine zeit um an meinem cod zu arbeiten.

Nun hab ich dein code verwendet und daraus ein 1 A formular gebaut.
Funktioniert einwandfrei.

Suppi danke vielmals.
 
wie wäre es das komplett fertige auch mal zu Posten damit andere vielleicht auch was davon haben und nicht wieder die selben Fragen stellen zu müssen !
Gruß
 
Zurück