Ik ben al geruime tijd op zoek naar een manier om zowel het toevoegen als bewerken op dezelfde pagina te krijgen.
Ik geraak er maar niet aan uit.

Momenteel heb ik een pagina waar vb. een nieuwe klant
geregistreerd wordt. Via een POST doe ik een insert in mijn database, met mysql last_insert_id lees ik nieuwe klantid uit en geef de klantid terug via $_POST['klantid'].
Het form wordt gerefresht en de klant_id is beschikbaar. Op deze manier kan ik ook een update doen van de gegevens ( ook via $_POST). Dit lukt allemaal goed.

Maar hoe kan ik nu dezelfde pagina gebruiken om later op te roepen via $_GET.

Hoe gebruik je nu die $_POST en $_GET door elkaar ?
Maw hoe schrijf je nu deze code ?
Moet ik eerst in mijn formulier gaan kijken met ISSET($_GET['klantid']) of moet ik eerst gaan kijken of er een POST gebeurd is ?

Alvast bedankt voor een antwoord
$_POST gebruik je vooral voor het afhandelen van formulieren, en GET voor data die je in de URL-balk wilt houden, zoals pagina-navigatie.

Als je meerdere pagina's in één script wil verwerken raad ik zo een constructie aan:

<?php
if(isset($_GET['page'])) {
	switch($_GET['page']) {
		case "edit" :
			// hier je edit pagina.
		case "delete" :
			// hier je delete
		case default:
			echo "Deze actie bestaat niet!"; 
	}
} else {
// er is geen actie opgegeven!
}
?>

Ik zou het niet eens zo ingewikkeld doen. Als er een $_GET['klantid'] is opgegeven dan is het bewerken, anders toevoegen. Zoiets:

<?php
// Standaard waarden
$voornaam = '';

// Array voor de foutmeldingen
$aFout = array();

// Controleer of er bewerkt wordt
if(isset($_GET['klantid'])) {
// Gegevens ophalen met een query en vars overschrijven
$voornaam = $row['voornaam'];
}

// Controleer of er gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// POST-request afhandelen, fouten kunnen in $aFout
if(isset($_POST['voornaam']) && !empty($_POST['voornaam'])) $voornaam = trim($_POST['voornaam']);

if($voornaam == '') $aFout[] = 'Vul de voornaam in';

// Als er niets in $aFout zit, opslaan
if(count($aFout) == 0) {
// Opslaan op basis van GET-var
if(isset($_POST['klantid'])) {
// Update SQL
}
else {
// Insert SQL

// Id ophalen
$id = getId(); // mysql_insert_id(), of iets dergelijks

// Doorsturen naar de pagina met $_GET['klantid']
header('Location: pagina.php?klantid='.$id);
exit();
}
}
}

// Eventuele foutmelding tonen
if(count($aFout) > 0) {
echo '<ul>';
foreach($aFout as $fout) echo ' <li>'.$fout.'</li>';
echo '</ul>';
}

// Formulier tonen
echo '<form action="pagina.php'.((isset($_GET['klantid'])) ? '?klantid='.$_GET['klantid'] : '').'" method="post">';
echo ' <input type="text name="voornaam" id="voornaam" value="'.$voornaam.'" /><br />';
echo ' <button type="submit">'.((isset($_GET['klantid'])) ? 'Bewerken' : 'Toevoegen').'</button>';
echo '<form>';
?>
Maar je hebt ook de verwijder actie, en daar heb heb je ook een $_GET['klantid'] voor nodig.
Ikzelf houd me altijd vast een een switch als je meer dan 1 CRUD-actie (Create, Read, Update, Delete) hebt. Zo is je applicatie makkelijker aanpasbaar als je een actie toevoegt.
Als je dat inderdaad in hetzelfde script doet. :) Ik doe dat eigenlijk nooit. Verwijderen doe ik meestal vanuit het overzicht; meerdere opties kunnen selecteren (checkbox) en dan op de knop Verwijderen drukken. Dan naar 'delete.php' en daar de array die gepost is doorlopen en de items verwijderen.

Doe je het wel allemaal binnen één script is het inderdaad makkelijker om jouw manier aan te houden.

Reageren