logo

Extra Block Types (EBT) - Nieuwe Layout Builder ervaring❗

Extra Block Types (EBT) - gestileerde, aanpasbare bloktypes: Slideshows, Tabs, Cards, Accordions en vele andere. Ingebouwde instellingen voor achtergrond, DOM Box, javascript-plugins. Ervaar vandaag al de toekomst van layout building.

Demo EBT-modules Download EBT-modules

❗Extra Paragraph Types (EPT) - Nieuwe Paragraphs ervaring

Extra Paragraph Types (EPT) - analoge op paragrafen gebaseerde set modules.

Demo EPT-modules Download EPT-modules

Scroll

PHP-lessen - les 3.3 - Werken met MySQL-databases. Gegevens bijwerken met UPDATE.

09/10/2025, by Ivan

We hebben al kennisgemaakt met MySQL-operatoren zoals SELECT en INSERT INTO. Nu is het tijd om te leren hoe je reeds ingevoerde gegevens in de database kunt bijwerken. Hiervoor gebruiken we de SQL-operator UPDATE. Maar laten we eerst ons bestand index.php aanpassen en een extra route toevoegen. Zoek de volgende code:

      if( $_GET['admin'] == 1 ){ // als er een variabele admin in de URL staat
	    print $obj->display_admin(); // als de variabele bestaat, toon het formulier
	  }else{
	    print $obj->display_public(); // als de variabele niet bestaat, toon de berichten
	  }

En vervang deze door de volgende code:

	  switch ($_GET['admin']){
	    case 'add':
		  print $obj->display_admin(); // als de variabele gelijk is aan add, toon het toevoegformulier
		break;
		case 'update':
		  print $obj->display_update();  // als de variabele gelijk is aan update, toon het bewerkingsformulier
		break;
		default:
		  print $obj->display_public(); // als de variabele niet bestaat, toon de berichten
	  }

Ik heb de if-voorwaarde vervangen door een switch-constructie, waarmee we meerdere waarden van $_GET['admin'] tegelijk kunnen behandelen. Later zullen we hier ook nog delete aan toevoegen. Voor nu heb ik de waarde 1 vervangen door add en een nieuwe case update toegevoegd. Omdat we 1 hebben vervangen door add, moeten we de link in het bestand simpleCMS.php aanpassen:

$content .= '<p><a href="/index.php?admin=1">Bericht toevoegen</a></p>';

Vervang deze door:

$content .= '<p><a href="/index.php?admin=add">Bericht toevoegen</a></p>';

We moeten nu ook een nieuwe methode toevoegen: display_update(), die wordt aangeroepen wanneer in het GET-verzoek de variabele admin=update voorkomt. Voeg de nieuwe methode toe:

  public function display_update(){
    
  }  

We hebben dus een route gemaakt die de nieuwe methode display_update() aanroept. Nu moeten we alleen nog links toevoegen om deze methode aan te roepen en de methode zelf implementeren.

Laten we eerst nadenken over hoe we het bijwerken van records gaan uitvoeren. We zullen een SQL-query moeten sturen met een WHERE-voorwaarde, zodat we precies aangeven welke record moet worden bijgewerkt. Dat doen we op basis van het id van de record — in ons geval is dat de kolom mid. We moeten dus de waarde van mid doorgeven bij het aanroepen van display_update(). Dat kan op twee manieren: via een GET-parameter of als methodeparameter. Bijvoorbeeld via de URL:

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

Of via een parameter in de methode zelf:

  public function display_update($mid){
    
  } 

En de methode wordt dan als volgt aangeroepen:

	  switch ($_GET['admin']){
	    case 'add':
		  print $obj->display_admin(); // toon formulier voor toevoegen
		break;
		case 'update':
                  $mid = 1; // of gebruik hier $_GET['mid']
		  print $obj->display_update($mid);  // toon formulier voor bewerken
		break;
		default:
		  print $obj->display_public(); // toon berichten
	  }

In elk geval moeten we de waarde mid doorgeven. De eenvoudigste manier is via een GET-verzoek, dus we kiezen voor die optie:

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

Maar wat als de parameter mid ontbreekt in de URL? Dat moeten we controleren:

  public function display_update(){
    $message_id = $_GET['mid']; // sla mid op in een variabele
	if(!empty($message_id)){
	
	}else{
	  $content .=   '<p>Geen waarde voor mid!</p>';
	  $content .=	'<p><a href="/index.php">Terug naar startpagina</a></p>';
	}
	return $content;
  }  

Nu, als we admin=update in de URL hebben maar geen mid, krijgen we een pagina met een link terug naar de homepage:

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

We hebben nu links nodig die naar de bewerkingspagina verwijzen. Laten we de methode display_public() aanpassen om ze weer te geven:

  public function display_public() { // methode voor het weergeven van berichten
    $content = '';
	$sql = 'SELECT * FROM Messages ORDER BY mid DESC'; // selectquery
	$result = mysql_query($sql) or die(mysql_error());  // sla queryresultaat op in variabele
	while($row = mysql_fetch_array($result)){ // verwerk het resultaat met mysql_fetch_array()
	  $content .= '<div class="post">'; // container voor bericht
	  $content .= '<span class="time">#' . $row['mid'] . ' van ' . date('d-m-Y', $row['created']) . '</span><h2>' . $row['title'] . '</h2>';
	  $content .= '<p>' . $row['bodytext'] . '</p>';
	  $content .= '<p><a href="/index.php?admin=update&mid=' . $row['mid'] . '">Bericht bewerken</a>';
	  $content .= '</div>';
	}
	$content .= '<p><a href="/index.php?admin=add">Bericht toevoegen</a></p>';
    return $content;
  }

Nu verschijnt onder elk bericht een link om het te bewerken. Het bewerkingsformulier zal worden weergegeven via de methode display_update(). Laten we die nu schrijven. Het formulier lijkt sterk op het formulier voor het toevoegen van berichten, behalve dat het bestaande waarden bevat en een verborgen veld met mid.

  public function display_update(){
    $message_id = $_GET['mid']; // sla mid op in een variabele
	if(!empty($message_id)){
	  $result = mysql_query('SELECT * FROM Messages WHERE mid='.$message_id); // haal record op met juiste mid
	  $message = mysql_fetch_object($result); // verwerk resultaat in object
	  $content = '';
	  $content .=	'<form action="/index.php?admin=update" method="post">';
	  $content .=	  '<label for="title">Naam:</label><br />';
	  $content .=	  '<input name="title" id="title" type="text" maxlength="150" value=' . $message->title .' />';
	  $content .=	  '<div class="clear"></div>';
	  $content .=     '<input name="mid" id="mid" type="hidden" value="'.$message->mid.'" />';
	  $content .=	  '<label for="bodytext">Bericht:</label><br />';
	  $content .=	  '<textarea name="bodytext" id="bodytext">'. $message->bodytext .'</textarea>';
	  $content .=	  '<div class="clear"></div>';
	  $content .=	  '<input type="submit" value="Opslaan" />';
	  $content .=	'</form>';	
	  $content .=	'<p><a href="/index.php">Terug naar startpagina</a></p>';
	}else{
	  if (!empty($_POST)) { // controleer POST-gegevens
	    print_r($_POST); // print array
		$content .=	'<p><a href="/index.php">Terug naar startpagina</a></p>';
	  }else{
	    $content .=   '<p>Geen waarde voor mid!</p>';
	    $content .=	'<p><a href="/index.php">Terug naar startpagina</a></p>';
	  }
	}
	return $content;
  } 

De commentaren leggen uit wat er in het formulier is veranderd. Laten we nu de verwerking van de POST-array toevoegen, die wordt verzonden nadat het formulier is ingevuld.

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

Zo ziet de POST-array eruit. De velden zijn identiek aan die in de toevoegquery, behalve mid. Laten we de verwerking toevoegen met behulp van een UPDATE-query:

  public function display_update(){
    $message_id = $_GET['mid']; // sla mid op in variabele
	if(!empty($message_id)){
	  $result = mysql_query('SELECT * FROM Messages WHERE mid='.$message_id);
	  $message = mysql_fetch_object($result);
	  $content = '';
	  $content .=	'<form action="/index.php?admin=update" method="post">';
	  $content .=	  '<label for="title">Naam:</label><br />';
	  $content .=	  '<input name="title" id="title" type="text" maxlength="150" value=' . $message->title .' />';
	  $content .=	  '<div class="clear"></div>';
	  $content .=     '<input name="mid" id="mid" type="hidden" value="'.$message->mid.'" />';
	  $content .=	  '<label for="bodytext">Bericht:</label><br />';
	  $content .=	  '<textarea name="bodytext" id="bodytext">'. $message->bodytext .'</textarea>';
	  $content .=	  '<div class="clear"></div>';
	  $content .=	  '<input type="submit" value="Opslaan" />';
	  $content .=	'</form>';	
	  $content .=	'<p><a href="/index.php">Terug naar startpagina</a></p>';
	}else{
	  if (!empty($_POST)) { // verwerk formulier
		mysql_query('UPDATE Messages SET title="'.$_POST["title"].'", bodytext="'.$_POST["bodytext"].'" WHERE mid='.$_POST["mid"]);
		$content .= '<p>Bericht bijgewerkt!</p>';
		$content .=	'<p><a href="/index.php#mid-'.$_POST['mid'].'">Ga naar bericht</a></p>';
	  }else{
	    $content .=   '<p>Geen waarde voor mid!</p>';
	    $content .=	'<p><a href="/index.php">Terug naar startpagina</a></p>';
	  }
	}
	return $content;
  }  

Dit is de volledige code van onze methode display_update(). Laten we nu bekijken hoe de UPDATE-query is opgebouwd:

Eerst komt de operator UPDATE, gevolgd door de naam van de tabel. Daarna komt de operator SET, waarna we aangeven welke velden we willen wijzigen. Vervolgens gebruiken we de operator WHERE om te specificeren welke record(s) moeten worden bijgewerkt (bijvoorbeeld waar mid overeenkomt met de gewenste waarde). In een volgende les zal ik een overzicht geven van alle MySQL-operatoren. Deze les is in de eerste plaats bedoeld voor wie net begint met PHP en MySQL.