Speichern in Datenbank durch Selbstaufruf

glow86

Mitglied
Hallo,

ich hab folgendes" Aufgabe":
Ich lese Daten aus einer Datenbank aus und schreibe diese in 3 Textareas. funktioniertsoweit auch ganz gut. Hier möchte ich nun den Text ändern können und über einen Speichern-button wieder zurück in Datenbank schreiben. Das alte soll dabei überschrieben werden.

Nach dem ich jetzt schon 3 Stunden lang hin un her versucht habe komm ich einfach nicht weiter. Ich hoff mal ihr könnt mir vielleicht helfen. Hier mal mein bisheriger Code:

PHP:
<?php

  $ID="20";
  $db  = mysql_connect  (localhost, root, "");
  $res = mysql_select_db ("forest");


  if(isset($save)){
    $res = mysql_query ("UPDATE   schaltflaeche
                         SET      Name      = $ta_Name,
                                  Tooltip   = $ta_Tooltip,
                                  Hilfetext = $ta_Hilfetext
                         WHERE    ID        = $ID");
    
    $Meldung = "Hilfetext wurde aktualisiert!";

  } else {

    $res = mysql_query("Select Name from schaltflaeche Where ID=$ID");
    $row1 = mysql_fetch_row ($res);

    $res = mysql_query("Select Tooltip from schaltflaeche Where ID=$ID");
    $row2 = mysql_fetch_row ($res);

    $res = mysql_query("Select Hilfetext from schaltflaeche Where ID=$ID");
    $row3 = mysql_fetch_row ($res);

    $Meldung = "Aktuelle Texte wurden erfolgreich ausgelesen !";
  };

?>

<h1>Wilkommen im Admin Terminal</h1>

<form action="<?php $PHP_SELF; ?>" method="post">
  ID: <?php echo("$ID"); ?>
  <br><br>
  Name: <textarea name="ta_Name" cols="50" rows="1"><?php echo("$row1[0]"); ?></textarea>
  <br><br>
  Tooltip: <textarea name="ta_Tooltip" cols="50" rows="1"><?php echo("$row2[0]"); ?></textarea>
  <br><br>
  Hilfetext: <textarea name="ta_Hilfetext" cols="50" rows="5"><?php echo("$row3[0]"); ?></textarea>
  <br><br>
  <input type="submit" name="save" value="Speichern">
</form>

<br>
<?php echo("$Meldung"); ?>


Der Speichernbutton funktioniert noch nicht und beim auslesen der Textarea (um den Inhalt in die DB zu schreiben) weiß ich nicht ob der Befehl richtig ist.

Ich bin für jede Hilfe dankbar.

MfG Ralf
 
Probier mal Folgendes:
PHP:
<?php

	$ID = 20;
	$db = mysql_connect('localhost', 'root', '');
	mysql_select_db('forest');


	if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

		$query = '
			UPDATE
			        `schaltflaeche`
			  SET
			        `Name`      = "'.mysql_real_escape_string($_POST['ta_Name']).'",
			        `Tooltip`   = "'.mysql_real_escape_string($_POST['ta_Tooltip']).'",
			        `Hilfetext` = "'.mysql_real_escape_string($_POST['ta_Hilfetext']).'"
			  WHERE
			        `ID`        = '.intval($ID).'
			';
		if( mysql_query($query) ) {
			$note = 'Hilfetext wurde aktualisiert!';
		}

	}

	$query = '
		SELECT
		        `Name`,
		        `Tooltip`,
		        `Hilfetext`
		  FROM
		        `schaltflaeche`
		  WHERE
		        `ID` = '.intval($ID).'
		';
	$result = mysql_query($query);
	$row = mysql_fetch_assoc($result);

?>
<h1>Wilkommen im Admin Terminal</h1>
<?php
	if( !empty($note) ) {
		echo '<p>'.$note.'</p>';
	}
?>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
	<p>ID: <?php echo $ID; ?><input type="hidden" name="ta_id" value="<?php echo $ID; ?>"></p>
	<p>Name: <textarea name="ta_Name" cols="50" rows="1"><?php echo htmlspecialchars($row['Name']); ?></textarea></p>
	<p>Tooltip: <textarea name="ta_Tooltip" cols="50" rows="1"><?php echo htmlspecialchars($row['Tooltip']); ?></textarea></p>
	<p>Hilfetext: <textarea name="ta_Hilfetext" cols="50" rows="5"><?php echo htmlspecialchars($row['Hilfetext']); ?></textarea></p>
	<p><input type="submit" value="Speichern"></p>
</form>
Des Weiteren solltest du dich mit den Themen Register Globals sowie den SQL-Injektionen beschäftigen.
 
Hallo Gumbo,

vielen Dank für deine Hilfe. Bin jetzt schon einen großen Schritt weiter.
Das Schreiben in die Datenbank über den Speichern-Button funktioniert
jetzt. Allerdings hat er beim auslesen noch ein Problem mit der Zeile:

PHP:
$row = mysql_fetch_assoc($result);

Es kommt folgende Fehlermeldung:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource

Da ich erst seit anfang der Woche mit PHP arbeite, sagt mir das nicht viel. An was könnte das liegen.

Nochmal vielen Dank
 
Diese Fehlermeldung besagt, dass die Abfrage meist aufgrund eines Syntaxfehlers nicht erfolgreich war. In diesem Fall habe ich in der Abfragedefinition ein Komma zu viel gesetzt. Meinen vorherigen Beitrag habe ich entsprechend korrigiert.
 
Ok jetzt kommt zwar keine Fehlermeldung mehr. Allerdings wird der Inhalt aus der Datenbank nicht in den Textareas angezeigt.
Wenn ich den Speichernbutton einmal gedrückt habe und dann den Browser aktualisiere wird immer wieder der Speichernbutton aufgeführt. Ist das schwer zu ändern ?
 
Ein erneutes Ausführen des Aktualisierungsabschnittes kann dadurch verhindert werden, dass danach eine Weiterleitung stattfindet. Eine andere Möglichkeit ist, so etwas wie „Ticket“ über eine PHP-Sitzung auszustellen, das danach verfällt.
 
Hallo!

Gumbo hat zwar schon Superglobale Variablen eigesetzt (was anderes hätte mich auch gewundert ;) ), aber trotzdem solltest Du Dir mal die Seiten zum Thema Register Globals und den vordefinierten (Superglobalen) Variablen durchlesen.

Andernfalls wirst Du über kurz oder lang Probleme bekommen, wenn Du nicht mit den Superblobalen Variablen arbeitest.
Denn immer mehr Hoster ändern ihre PHP Einstellungen aus Sicherheitsgründen auf register_globals=OFF, dann würde der von Dir gepostete Code also nicht mehr funktionieren.

Gruss Dr Dau
 
Danke für den Hinweis und für eure Hilfe. Ich werd mich bemühren mir das gleich anzugewöhnen. Aber nochmal zu dem Script. Ich kann absolut nicht erkennen woran es liegt, dass die Werte aus der DB nicht in der Textarea angezeigt werden.

Könnt ihr mir vielleicht nochmal helfen ?
 
Es ist ein Logikfehler: In der Datenbankabfrage zur Auswahl des Datensatzen wird das POST-Argument verwendet. Ich habe meinen vorherigen Beitrag wieder entsprechend korrigiert.
 
Zurück