logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll

PHP Lektionen – Lektion 3.3 – Arbeiten mit der MySQL-Datenbank. Daten aktualisieren mit UPDATE.

26/05/2025, by Ivan

Wir haben bereits die MySQL-Operatoren SELECT und INSERT INTO kennengelernt, jetzt ist es an der Zeit zu lernen, wie man bereits in der Datenbank gespeicherte Daten aktualisiert. Dafür verwenden wir den SQL-Operator UPDATE. Aber zuerst ändern wir unsere Datei index.php und fügen eine Verarbeitung für einen weiteren Pfad hinzu. Finden Sie folgenden Code:

      if( $_GET['admin'] == 1 ){ // wenn die Variable admin im URL vorhanden ist
	    print $obj->display_admin(); // wenn die Variable vorhanden ist, wird das Formular angezeigt
	  }else{
	    print $obj->display_public(); // wenn keine Variable vorhanden ist, werden die Nachrichten angezeigt
	  }

Und ersetzen Sie ihn durch den folgenden Code:

	  switch ($_GET['admin']){
	    case 'add':
		  print $obj->display_admin(); // wenn die Variable gleich "add" ist, wird das Formular zum Hinzufügen angezeigt
		break;
		case 'update':
		  print $obj->display_update();  // wenn die Variable gleich "update" ist, wird das Formular zur Änderung angezeigt
		break;
		default:
		  print $obj->display_public(); // wenn keine Variable vorhanden ist, werden die Nachrichten angezeigt
	  }

Ich habe den if-Bedingungsoperator durch einen switch-Operator ersetzt, der es ermöglicht, mehrere Werte der Variable $_GET['admin'] zu verwenden, später werden wir auch "delete" hinzufügen. Außerdem habe ich "1" durch "add" ersetzt und "update" als weiteren Fall hinzugefügt. Da ich "1" durch "add" ersetzt habe, müssen wir auch die Links im File simpleCMS.php anpassen:

$content .= '<p><a href="/index.php?admin=1">Nachricht hinzufügen</a></p>';

Ersetzen Sie das durch:

$content .= '<p><a href="/index.php?admin=add">Nachricht hinzufügen</a></p>';

Außerdem müssen wir eine neue Methode display_update() hinzufügen, die aufgerufen wird, wenn im GET-Request die Variable admin den Wert "update" hat. Wir fügen die Methode hinzu:

  public function display_update(){
    
  }  

Wir haben nun die Pfadverarbeitung, die unsere neue Methode display_update() aufruft. Nun müssen wir noch die Links auf die Seite zum Aufruf dieser Methode hinzufügen und die Methode selbst implementieren.

Überlegen wir zuerst, wie wir die Aktualisierung der Datensätze realisieren. Wir müssen eine Datenbankabfrage mit einer WHERE-Bedingung ausführen, um genau anzugeben, welcher Datensatz aktualisiert werden soll. Das ist möglich, wenn wir die ID des Datensatzes kennen, in unserem Fall die Spalte mid. Daher müssen wir den Wert von mid beim Aufruf von display_update() übergeben. Wie kann das geschehen? Zum Beispiel über die GET-Variable zusammen mit admin=update so:

http://test/index.php?admin=update&mid=3

Oder wir können einen Parameter in der Methode display_update() nutzen, etwa so:

  public function display_update($mid){
    
  } 

Und die Methode dann so aufrufen:

	  switch ($_GET['admin']){
	    case 'add':
		  print $obj->display_admin(); // wenn admin=add, Formular für Hinzufügen anzeigen
		break;
		case 'update':
                  $mid = 1; // hier kann auch $_GET['mid'] stehen
		  print $obj->display_update($mid);  // wenn admin=update, Formular zum Ändern anzeigen
		break;
		default:
		  print $obj->display_public(); // Standardanzeige der Nachrichten
	  }

In jedem Fall muss der Wert mid übergeben werden, vermutlich per GET-Request. Deshalb verwenden wir besser die erste Variante, da sie einfacher ist.

  public function display_update(){
    $message_id = $_GET['mid'];
  }  

So lesen wir den Wert mid aus. Was aber, wenn kein Wert übergeben wurde? Das sollten wir überprüfen.

  public function display_update(){
    $message_id = $_GET['mid']; // mid in Variable speichern
	if(!empty($message_id)){
	
	}else{
	  $content .=   '<p>Kein Wert für mid!</p>';
	  $content .=	'<p><a href="/index.php">Zurück zur Startseite</a></p>';
	}
	return $content;
  }  

Wenn wir also admin=update im GET-Request haben, aber kein mid, landen wir auf einer Seite mit Link zur Startseite.

http://test/index.php?admin=update

Nun müssen wir Links zu den Bearbeitungsseiten hinzufügen. Dazu ändern wir die Methode display_public(), um die Links auszugeben:

  public function display_public() { // Methode zur Anzeige der Nachrichten
    $content = '';
	$sql = 'SELECT * FROM Messages ORDER BY mid DESC'; // Auswahl-Abfrage
	$result = mysql_query($sql) or die(mysql_error());  // Ergebnis speichern
	while($row = mysql_fetch_array($result)){ // mit mysql_fetch_array() verarbeiten
	  $content .= '<div class="post">'; // div umschließt Eintrag
	  $content .= '<span class="time">#' . $row['mid'] . ' vom ' . date('d-m-Y', $row['created']) . '</span><h2>' . $row['title'] . '</h2>'; 	// Zeit und Titel ausgeben
	  $content .= '<p>' . $row['bodytext'] . '</p>'; // Nachrichtentext
	  $content .= '<p><a href="/index.php?admin=update&mid=' . $row['mid'] . '">Nachricht bearbeiten</a>'; // Link zum Bearbeiten
	  $content .= '</div>'; // div schließen
	}
	$content .= '<p><a href="/index.php?admin=add">Nachricht hinzufügen</a></p>';
    return $content;
  }

Jetzt gibt es unter jeder Nachricht einen Link zur Bearbeitung. Das Formular für die Bearbeitung wird von unserer Methode display_update() ausgegeben. Schreiben wir den Code für diese Methode. Das Formular ähnelt sehr dem für das Hinzufügen, allerdings füllen wir die Felder mit den vorhandenen Werten aus der Datenbank und fügen ein verstecktes Feld mit mid hinzu.

  public function display_update(){
    $message_id = $_GET['mid']; // mid speichern
	if(!empty($message_id)){
	  $result = mysql_query('SELECT * FROM Messages WHERE mid='.$message_id); // passenden Eintrag holen
	  $message = mysql_fetch_object($result); // Ergebnis verarbeiten
	  $content = '';
	  $content .=	'<form action="/index.php?admin=update" method="post">'; // Formular sendet an diese Seite
	  $content .=	  '<label for="title">Name:</label><br />';
	  $content .=	  '<input name="title" id="title" type="text" maxlength="150" value=' . $message->title .' />'; // Titel vorbefüllen
	  $content .=	  '<div class="clear"></div>';
	  $content .=     '<input name="mid" id="mid" type="hidden" value="'.$message->mid.'" />'; // verstecktes Feld mid
	  $content .=	  '<label for="bodytext">Nachricht:</label><br />';
	  $content .=	  '<textarea name="bodytext" id="bodytext">'. $message->bodytext .'</textarea>'; // Nachricht vorbefüllen
	  $content .=	  '<div class="clear"></div>';
	  $content .=	  '<input type="submit" value="Speichern" />';
	  $content .=	'</form>';	
	  $content .=	'<p><a href="/index.php">Zurück zur Startseite</a></p>';
	}else{
	  if (!empty($_POST)) { // prüfen, ob Formular abgesendet wurde
	    print_r($_POST); // POST-Array ausgeben
		$content .=	'<p><a href="/index.php">Zurück zur Startseite</a></p>';
	  }else{
	    $content .=   '<p>Kein Wert für mid!</p>';
	    $content .=	'<p><a href="/index.php">Zurück zur Startseite</a></p>';
	  }
	}
	return $content;
  } 

In den Kommentaren habe ich erläutert, was sich am Formular geändert hat. Jetzt kümmern wir uns um die Verarbeitung des POST-Arrays, das nach dem Ausfüllen des Formulars abgeschickt wird.

Array(
    [title] => asdf
    [mid] => 1
    [bodytext] => asdfasf
)

Das ist das Array bei mir. Wenn Sie die INSERT-Anfrage ansehen, haben wir die gleichen Felder, nur ohne mid. Schreiben wir nun die Verarbeitung des POST-Arrays mit einer UPDATE-Anfrage:

  public function display_update(){
    $message_id = $_GET['mid']; // mid speichern
	if(!empty($message_id)){
	  $result = mysql_query('SELECT * FROM Messages WHERE mid='.$message_id); // passenden Eintrag holen
	  $message = mysql_fetch_object($result); // Ergebnis verarbeiten
	  $content = '';
	  $content .=	'<form action="/index.php?admin=update" method="post">'; // Formular sendet an diese Seite
	  $content .=	  '<label for="title">Name:</label><br />';
	  $content .=	  '<input name="title" id="title" type="text" maxlength="150" value=' . $message->title .' />'; // Titel vorbefüllen
	  $content .=	  '<div class="clear"></div>';
	  $content .=     '<input name="mid" id="mid" type="hidden" value="'.$message->mid.'" />'; // verstecktes Feld mid
	  $content .=	  '<label for="bodytext">Nachricht:</label><br />';
	  $content .=	  '<textarea name="bodytext" id="bodytext">'. $message->bodytext .'</textarea>'; // Nachricht vorbefüllen
	  $content .=	  '<div class="clear"></div>';
	  $content .=	  '<input type="submit" value="Speichern" />';
	  $content .=	'</form>';	
	  $content .=	'<p><a href="/index.php">Zurück zur Startseite</a></p>';
	}else{
	  if (!empty($_POST)) { // prüfen, ob Formular abgesendet wurde
		mysql_query('UPDATE Messages SET title="'.$_POST["title"].'", bodytext="'.$_POST["bodytext"].'" WHERE mid='.$_POST["mid"]);
		$content .= '<p>Nachricht geändert!';
		$content .=	'<p><a href="/index.php#mid-'.$_POST['mid'].'">Zum Eintrag wechseln</a></p>';
	  }else{
	    $content .=   '<p>Kein Wert für mid!</p>';
	    $content .=	'<p><a href="/index.php">Zurück zur Startseite</a></p>';
	  }
	}
	return $content;
  }  

Hier ist der komplette Code unserer Methode display_update(). Schauen wir uns an, woraus die UPDATE-Anfrage besteht:

Zuerst kommt der Operator UPDATE, danach der Tabellenname. Nach dem Tabellennamen folgt der Operator SET, nach SET geben wir an, welchen Wert die Felder bekommen sollen. Danach folgt die Bedingung mit WHERE, die bestimmt, dass nur die Datensätze aktualisiert werden, bei denen mid dem gewünschten Wert entspricht. Später werde ich eine kurze Übersicht aller MySQL-Operatoren geben. Diese Lektion richtet sich vor allem an Anfänger in PHP und MySQL.