Problem // Datensatz ändern per MYSQL & PHP-Formular

Johanni

Mitglied
Guten Tag!

Ich bin dabei ein Script zu schreiben, mit dem ich einen Datensatz aus einer
Datenbank per opt box auswählen und 'rauslesen kann und der dann in input Feldern angezeigt wird.
Dieser Datensatz soll dann in den input Feldern bearbeitet werden können und anschließend wieder gespeichert werden. Ich möchte also ein Script erstellen, mit dem man Datensatze bearbeiten/ verändern kann.
Um das ganze zu veranschaulichen, ich möchte zum Beispiel, dass wenn man einen News-Beitrag erstellt, dieser verändert werden kann, sollte man einen Fehler entdecken.
Bis jetzt habe ich es nur geschafft die Daten auszuwählen und in die Felder zu laden, nun bin ich mir aber nicht sicher wie ich es schaffe, die veränderten Daten wieder zu schreiben.
Das Script sieht bislang so aus:
PHP:
<?php
include("../include.php");
doDB();

if (!$_POST)  {
	//get parts of records
	$get_list_sql = "SELECT id,
	                 CONCAT_WS(', ', name) AS display_name, DATE_FORMAT(date_added, '%e.%c.%Y') AS fmt_date_added
	                 FROM alben ORDER BY date_added DESC";
	$get_list_res = mysqli_query($mysqli, $get_list_sql) or die(mysqli_error($mysqli));

	if (mysqli_num_rows($get_list_res) < 1) {
		//no records
		$display_block .= "
		<table width=770 height=220 cellpadding=0 cellspacing=0 border=0>
		  <tr>
	       <td align=center width=770 heights=220>
		    <font class=fett>Keine Einträge zum ändern vorhanden!</font>
		   </td>
		  </tr>
		</table>";

	} else {
		//has records, so get results and print in a form
		$display_block .= "
		 <table width=770 height=220 cellpadding=0 cellspacing=0 border=0>
		  <tr>
	       <td align=center width=770 heights=220>
		   <font class=fett>Ein Album ändern</font>
		   <br><br><br>
		<form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\">
		<font class=norm>Wähle ein Album:</font><br/>
		<select name=\"sel_id\">
		<option value=\"\">-- Wähle --</option>";

		while ($recs = mysqli_fetch_array($get_list_res)) {
			$id = $recs['id'];
			$display_name = stripslashes($recs['display_name']);
			$date_added = $recs['fmt_date_added'];
			$display_block .= "<option value=\"".$id."\">".$date_added." , ".$display_name."</option>";
		}

		$display_block .= "
		</select>
		<p><input type=\"submit\" name=\"submit\" value=\"daten laden\"></p>
		</form>
		</td>
		</tr>
		</table>";
	}
	//free result
	mysqli_free_result($get_list_res);

} else if ($_POST) {
	//check for required fields
	if ($_POST["sel_id"] == "")  {
		header("Location: chentry.php");
		exit;
	}
	
	//issue queries
	$get_master_sql = "SELECT name, description, date FROM alben WHERE id = '".$_POST["sel_id"]."'";
	$get_master_res = mysqli_query($mysqli, $get_master_sql) or die(mysqli_error($mysqli));
	while ($entry_info = mysqli_fetch_array($get_master_res)) {
		$ch_name = ($entry_info['name']);
		$ch_text = ($entry_info['description']);	
		$ch_date = ($entry_info['date']);
		}
	mysqli_close($mysqli);   
	                 
	$display_block = "
	<table width=779 height=220 cellpadding=0 cellspacing=0 border=0>
		  <tr>
	       <td align=center width=380 heights=220>
		    <font class=fett>Richtiger Datensatz?</font><br><br>
	        <form method=\"post\" action=\"?.php\">
			<input type=\"text\" name=\"new_name\" size=\"30\" maxlength=\"75\" value=$ch_name><input type=\"text\" name=\"new_date\" size=\"30\" maxlength=\"75\" value=$ch_date><br>
			<textarea name=\"new_text\" cols=\"27\" rows=\"10\" wrap=\"virtual\">$ch_text</textarea><br>
			<p><input type=\"submit\" name=\"submit\" value=\"ändern\"></p>
			</form>
		   </td>
		  </tr>
		</table>";		
}
?>
<html>
<head>
<style type=text/css>
	.fett {font-family:verdana; color:#CC0000;font-size:10pt; font-weight:bold; text-decoration:none}
	.norm {font-family:verdana; color:#666666;font-size:8pt; text-decoration:none}
	.small {font-family:verdana; color:#CC0000;font-size:7pt; text-decoration:none}
	a{font-family:verdana; color:#666666;font-size:8pt; text-decoration:none}
	</style>
</head>
<body>
<?php echo $display_block; ?>
</body>
</html>

von meinem Verständnis her müsste ich folgendes "daten-schreibe-script" benutzen, nachdem der button "ändern" angeklickt wurde:
PHP:
 //add to table   
    $add_master_sql = "INSERT INTO alben (name, description, date) VALUES ('".$_POST["name"]."', '".$_POST["description"]."', '".$_POST["date"]."') WHERE id='".$_POST["sel_id"]."' ";   
    $add_master_res = mysqli_query($mysqli, $add_master_sql)   
                        or die(mysqli_error($mysqli));

aber ich schaffe es einfach nicht, dass die daten übergeben werden.

Vielen Dank für Tipps und Hilfe
Gruss
Johanni
 
Bin jetzt leider nicht ganz durch deinen Beitrag durchgestiegen, aber ich denke mal es geht um den letzten Teil deines Posts.

Also du hast eine z.B. News, welche voll mit Rechtschreibfehlern ist welche du im Nachhinein bearbeiten willst.
Du wählst die News mittels Formular aus und hast nun das Formular mit den Daten vor dir.
Wenn du jetzt alles abänderst und auf "ändern" klickst darf allerdings NICHT die MYSQL Funktion INSERT INTO kommen, sonst würdest du ja einen neuen Beitrag erstellen.

Vielmehr muss auf die Funktion Update zurückgegriffen werden:
PHP:
$add_master_sql = "
UPDATE 
    alben 
SET 
    name = '".$_POST["name"]."',
    description = '".$_POST["description"]."',
    date = '".$_POST["date"]."'
WHERE 
    id='".$_POST["sel_id"]."' ";    
$add_master_res = mysqli_query($mysqli, $add_master_sql)    
                        or die(mysqli_error($mysqli));

Also keine große Änderung im Gegensatz dazu einen neuen Datensatz einzufügen.

Ich hoffe, ich konnte dir ein wenig helfen, bzw. habe verstanden was du gewollt hast :).
 
sauber!
genau darum geht es!, alles klar, also ich muss mit update arbeiten, allerdings bin ich mir unsicher, wie ich das elegant einbaue. hast du da vielleicht noch nen vorschlag?
ich würde jetzt wohl folgendes machen:
PHP:
$display_block = "
	<table width=779 height=220 cellpadding=0 cellspacing=0 border=0>
		  <tr>
	       <td align=center width=380 heights=220>
		    <font class=fett>Richtiger Datensatz?</font><br><br>
	        <form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\">
			<input type=\"text\" name=\"new_name\" size=\"30\" maxlength=\"75\" value=$ch_name><br>
			<input type=\"text\" name=\"new_date\" size=\"30\" maxlength=\"75\" value=$ch_date><br>
			<textarea name=\"new_text\" cols=\"27\" rows=\"10\" wrap=\"virtual\">$ch_text</textarea><br>
			<p><input type=\"submit\" name=\"submit\" value=\"richtig\"></p>
			</form>
		   </td>
		  </tr>
		</table>";	
		$add_master_sql = " 
UPDATE alben SET  
    name = '".$_POST["new_name"]."', 
    description = '".$_POST["new_text"]."', 
    date = '".$_POST["new_date"]."' 
WHERE  
    id='".$_POST["sel_id"]."' ";     
$add_master_res = mysqli_query($mysqli, $add_master_sql)     
                        or die(mysqli_error($mysqli));  	
}
?>
<html>

bin mir aber überhaupt nicht richer!

DANKE
 
Ich machs bei mir immer mit einer einfachen Abfrage.

PHP:
if(isset($_POST['submit']) AND "ändern" == $_POST['submit']) {
// Wenn der Knopf "ändern" gedrückt würde
$sql = "UPDATE
                  [.....]";
} else {
// Wenn nicht, gib das Formular aus in welchem die Daten stehen die man ändern kann + Button ändern
}

Eine einfach IF-Abfrage, wenn der Button "ändern" gedrückt wurde, dann änder den Datensatz mit den übernommenen Daten, ansonsten zeige mir das Formular an.

In deinem Beispiel:
PHP:
if(isset($_POST['submit']) AND "richtig" == $_POST['submit']) {
    $add_master_sql
} else {
    $display_block
 
ok vielen Dank, habe auch gemerkt, dass ich irgendwie mit if abfragen arbeiten muss, allerdings klappt es noch nicht. habe deinen Ratschlag befolgt aber nun kommt die Fehlermeldung "Fehler" die ich ganz unten im script eingebaut habe, wenn ich die Daten laden möchte.
Script wie folgt:
PHP:
include("../include.php");
doDB();

if (!$_POST)  {
	//get parts of records
	$get_list_sql = "SELECT id,
	                 CONCAT_WS(', ', name) AS display_name, DATE_FORMAT(date_added, '%e.%c.%Y') AS fmt_date_added
	                 FROM alben ORDER BY date_added DESC";
	$get_list_res = mysqli_query($mysqli, $get_list_sql) or die(mysqli_error($mysqli));

	if (mysqli_num_rows($get_list_res) < 1) {
		//no records
		$display_block .= "
		<table width=770 height=220 cellpadding=0 cellspacing=0 border=0>
		  <tr>
	       <td align=center width=770 heights=220>
		    <font class=fett>Keine Einträge zum ändern vorhanden!</font>
		   </td>
		  </tr>
		</table>";

	} else {
		//has records, so get results and print in a form
		$display_block .= "
		 <table width=770 height=220 cellpadding=0 cellspacing=0 border=0>
		  <tr>
	       <td align=center width=770 heights=220>
		   <font class=fett>Ein Album ändern</font>
		   <br><br><br>
		<form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\">
		<font class=norm>Wähle ein Album:</font><br/>
		<select name=\"sel_id\">
		<option value=\"\">-- Wähle --</option>";

		while ($recs = mysqli_fetch_array($get_list_res)) {
			$id = $recs['id'];
			$display_name = stripslashes($recs['display_name']);
			$date_added = $recs['fmt_date_added'];
			$display_block .= "<option value=\"".$id."\">".$date_added." , ".$display_name."</option>";
		}

		$display_block .= "
		</select>
		<p><input type=\"submit\" name=\"submit\" value=\"daten laden\"></p>
		</form>
		</td>
		</tr>
		</table>";
	}
	//free result
	mysqli_free_result($get_list_res);

} else if ($_POST) {
	//check for required fields
	if ($_POST["sel_id"] == "")  {
		header("Location: chentry.php");
		exit;
	}
	
	//issue queries
	$get_master_sql = "SELECT name, description, date FROM alben WHERE id = '".$_POST["sel_id"]."'";
	$get_master_res = mysqli_query($mysqli, $get_master_sql) or die(mysqli_error($mysqli));
	while ($entry_info = mysqli_fetch_array($get_master_res)) {
		$ch_name = ($entry_info['name']);
		$ch_text = ($entry_info['description']);	
		$ch_date = ($entry_info['date']);
		}
	mysqli_close($mysqli);   
	                 
	$display_block = "
	<table width=779 height=220 cellpadding=0 cellspacing=0 border=0>
		  <tr>
	       <td align=center width=380 heights=220>
		    <font class=fett>Richtiger Datensatz?</font><br><br>
	        <form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\">
			<input type=\"text\" name=\"new_name\" size=\"30\" maxlength=\"75\" value=$ch_name><br>
			<input type=\"text\" name=\"new_date\" size=\"30\" maxlength=\"75\" value=$ch_date><br>
			<textarea name=\"new_text\" cols=\"27\" rows=\"10\" wrap=\"virtual\">$ch_text</textarea><br>
			<p><input type=\"submit\" name=\"submit\" value=\"ändern\"></p>
			</form>
		   </td>
		  </tr>
		</table>";	
		
if(isset($_POST['submit']) AND "ändern" == $_POST['submit']) { 
doDB();  
$add_master_sql = " 
UPDATE alben SET  
    name = '".$_POST["new_name"]."', 
    description = '".$_POST["new_text"]."', 
    date = '".$_POST["new_date"]."' 
WHERE  
    id='".$_POST["sel_id"]."' ";     
$add_master_res = mysqli_query($mysqli, $add_master_sql) or die(mysqli_error($mysqli)); 
mysqli_close($mysqli);   
$display_block = "<font class=fett> Der Datensatz wurde geändert! </font>";  	
} else { 
$display_block = "<font class=fett>FEHLER! </font>";  	
// Wenn nicht, gib das Formular aus in welchem die Daten stehen die man ändern kann + Button ändern 
}  

}
?>
<html>

ich glaube ich muss die if-Abfrage besser schachteln!

GRUSS
 
Ich zeig dir hier mal meine Struktur, du kannst sie so übernehmen oder auf deine Bedürfnisse anpassen, aber so finde ich es immer recht einfach:

PHP:
if(!isset($_GET['id']) {
    // Auflistung aller News in einer Tabelle
    // Hinter den News ist ein Link "edit" + ID der News, d.h. der Variable id wird ein Wert übergeben und diese wird dann per URL     
    // verschickt
    // Welche dann bei mir z.B. folgenden Link ausgibt: "admin=news&action=edit&id=1"
} else {
    // Wenn die Variable id vorhanden ist, dann gehts hier weiter
    if(isset($_POST['submit']) AND "ändern" == $_POST['submit']) {
        // Neue IF, hier wird jetzt geprüft ob der Knopf ändern gedrückt wurde
        // Wenn der Knopf gedrückt wurde, dann Update den Datensatz
    } else {
        // Wenn der Knopf nicht gedrückt wurde, dann zeige mir bitte das Formular
        // mit den Datensätzen an, was ich ändern möchte
    }
}

Ich hoffe jetzt kommste auf einen grünen Zweig ;).
 
Zuletzt bearbeitet:
Es tut mir leid, aber ich komme nur schwer weiter.
Danke erstmal für Deine Geduld!
Habe jetzt versucht mich deiner Struktur anzupassen- bin auch schon etwas weiter, scheint aber als hätte ich wieder einen Fehler übersehen.
Jetzt kann ich per opt. box einen datensatz auswahlen, der auch in dden Feldern angezeigt wird, jedoch werden keine Daten "upgedated" wenn ich auf ändern klicke, auch kommt das "bestätigungsecho" nicht, dass ich eingebaut habe.
PHP:
<?php
include("../include.php");
doDB();

if (!$_POST)  {
	//get parts of records
	$get_list_sql = "SELECT id,
	                 CONCAT_WS(', ', name) AS display_name, DATE_FORMAT(date_added, '%e.%c.%Y') AS fmt_date_added
	                 FROM alben ORDER BY date_added DESC";
	$get_list_res = mysqli_query($mysqli, $get_list_sql) or die(mysqli_error($mysqli));

	if (mysqli_num_rows($get_list_res) < 1) {
		//no records
		$display_block .= "
		<table width=770 height=220 cellpadding=0 cellspacing=0 border=0>
		  <tr>
	       <td align=center width=770 heights=220>
		    <font class=fett>Keine Einträge zum ändern vorhanden!</font>
		   </td>
		  </tr>
		</table>";

	} else {
		//has records, so get results and print in a form
		$display_block .= "
		 <table width=770 height=220 cellpadding=0 cellspacing=0 border=0>
		  <tr>
	       <td align=center width=770 heights=220>
		   <font class=fett>Ein Album ändern</font>
		   <br><br><br>
		<form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\">
		<font class=norm>Wähle ein Album:</font><br/>
		<select name=\"sel_id\">
		<option value=\"\">-- Wähle --</option>";

		while ($recs = mysqli_fetch_array($get_list_res)) {
			$id = $recs['id'];
			$display_name = stripslashes($recs['display_name']);
			$date_added = $recs['fmt_date_added'];
			$display_block .= "<option value=\"".$id."\">".$date_added." , ".$display_name."</option>";
		}

		$display_block .= "
		</select>
		<p><input type=\"submit\" name=\"submit\" value=\"daten laden\"></p>
		</form>
		</td>
		</tr>
		</table>";
	}
	//free result
	mysqli_free_result($get_list_res);

} else if ($_POST) {
	//check for required fields
	if ($_POST["sel_id"] == "")  {
		header("Location: chentry.php");
		exit;
	}
	
	//issue queries
	$get_master_sql = "SELECT name, description, date FROM alben WHERE id = '".$_POST["sel_id"]."'";
	$get_master_res = mysqli_query($mysqli, $get_master_sql) or die(mysqli_error($mysqli));
	while ($entry_info = mysqli_fetch_array($get_master_res)) {
		$ch_name = ($entry_info['name']);
		$ch_text = ($entry_info['description']);	
		$ch_date = ($entry_info['date']);
		 }
	                 
	$display_block = "
	<table width=779 height=220 cellpadding=0 cellspacing=0 border=0>
		  <tr>
	       <td align=center width=380 heights=220>
		    <font class=fett>Richtiger Datensatz?</font><br><br>
	        <form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\">
			<input type=\"text\" name=\"new_name\" size=\"30\" maxlength=\"75\" value=$ch_name><br>
			<input type=\"text\" name=\"new_date\" size=\"30\" maxlength=\"75\" value=$ch_date><br>
			<textarea name=\"new_text\" cols=\"27\" rows=\"10\" wrap=\"virtual\">$ch_text</textarea><br>
			<p><input type=\"submit\" name=\"submit\" value=\"ändern\"></p>
			</form>
		   </td>
		  </tr>
		</table>";
}					
else if(isset($_POST['submit']) AND "ändern" == $_POST['submit']) { 
$add_master_sql = " 
UPDATE alben SET  
    name = '".$_POST["new_name"]."', 
    description = '".$_POST["new_text"]."', 
    date = '".$_POST["new_date"]."' 
WHERE  
    id='".$_POST["sel_id"]."' ";     
$add_master_res = mysqli_query($mysqli, $add_master_sql) or die(mysqli_error($mysqli)); 
mysqli_close($mysqli);   
$display_block = "<font class=fett> Der Datensatz wurde geändert! </font>";  	
} else { 
$display_block = "<font class=fett>FEHLER! </font>";  	

}
?>
<html>
<head>
<style type=text/css>
	.fett {font-family:verdana; color:#CC0000;font-size:10pt; font-weight:bold; text-decoration:none}
	.norm {font-family:verdana; color:#666666;font-size:8pt; text-decoration:none}
	.small {font-family:verdana; color:#CC0000;font-size:7pt; text-decoration:none}
	a{font-family:verdana; color:#666666;font-size:8pt; text-decoration:none}
	</style>
</head>
<body>
<?php echo $display_block; ?>
</body>
</html>

kannst du mir nochmal helfen?

DANKE
 
dreh das ganze einfach mal:

PHP:
} else if ($_POST) { 
    //check for required fields 
    if ($_POST["sel_id"] == "")  { 
        header("Location: chentry.php"); 
        exit; 
    } 
}                     
else if(isset($_POST['submit']) AND "ändern" == $_POST['submit']) {  
$add_master_sql = "  
UPDATE alben SET   
    name = '".$_POST["new_name"]."',  
    description = '".$_POST["new_text"]."',  
    date = '".$_POST["new_date"]."'  
WHERE   
    id='".$_POST["sel_id"]."' ";      
$add_master_res = mysqli_query($mysqli, $add_master_sql) or die(mysqli_error($mysqli));  
mysqli_close($mysqli);    
$display_block = "<font class=fett> Der Datensatz wurde geändert! </font>";       
} else {  

    //issue queries 
    $get_master_sql = "SELECT name, description, date FROM alben WHERE id = '".$_POST["sel_id"]."'"; 
    $get_master_res = mysqli_query($mysqli, $get_master_sql) or die(mysqli_error($mysqli)); 
    while ($entry_info = mysqli_fetch_array($get_master_res)) { 
        $ch_name = ($entry_info['name']); 
        $ch_text = ($entry_info['description']);     
        $ch_date = ($entry_info['date']); 
         } 
                      
    $display_block = " 
    <table width=779 height=220 cellpadding=0 cellspacing=0 border=0> 
          <tr> 
           <td align=center width=380 heights=220> 
            <font class=fett>Richtiger Datensatz?</font><br><br> 
            <form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\"> 
            <input type=\"text\" name=\"new_name\" size=\"30\" maxlength=\"75\" value=$ch_name><br> 
            <input type=\"text\" name=\"new_date\" size=\"30\" maxlength=\"75\" value=$ch_date><br> 
            <textarea name=\"new_text\" cols=\"27\" rows=\"10\" wrap=\"virtual\">$ch_text</textarea><br> 
            <p><input type=\"submit\" name=\"submit\" value=\"ändern\"></p> 
            </form> 
           </td> 
          </tr> 
        </table>";
}

Wie oben schon beschrieben, soll er als erstes Prüfen ob der Button "ändern" gedrückt wurde, und erst wenn nicht, deswegen im else-Teil, DANN gib mir das Formular aus.

Ich hoffe jetzt funktionierts ;)
 
Zurück