PHP/MySQL

Ändra och ta bort data

Vi ska nu titta på hur vi kan ta bort eller ändra något i databasen. Den som har hand om en viss webbsida har i många fall inte kunskap om programmering och databaser och kan inte göra detta "för hand". För att kunna sköta databasen behövs då ett gränssnitt mot databasen där användaren "på ren svenska" kan göra de ändringar som behövs. Vi ska alltså skapa ett sådant gränssnitt för att göra små ändringar i databasen.

De ändringar som vi ska låta användaren göra är att

När man tar bort saker ut en databas bör man egentligen ha dels en säkerhetskopia av det man tar bort och dels kontroll av att sakerna verkligen får tas bort. Men eftersom vi vill göra det så enkelt som möjligt bortser vi från dessa saker i exemplet.

Till att börja med skapar vi de formulär som användaren ska använda för att ändra saker i databasen. Vi bygger helt enkelt vidare på den webbsida som vi hade i föregående avsnitt. För varje dag/träningstillfälle på webbsidan ska det finnas en knapp för att radera posten och en knapp för att ändra den. Här följer hur det slutliga resultatet ska se ut. Vi har ännu inte lagt till den kod som gör själva uppdateringarna så det går inte att klicka på knapparna än (inte med rätt resultat iaf).

Resultat

Vi har gjort om delen som skriver ut listan med de dagarna och gjort om den till att innehålla ett HTML-formulär. Det här ger oss möjlighet att lägga till knappar och säga vilken information som ska skickas när de olika knapparna aktiveras. För varje dag i databasen skrivs följande tabellrad ut på webbsidan :

echo "<form action='admin.php' method='POST'>";
  echo "<TR>";
	  echo "<TD>";
	 	 echo $day;
	  echo "</TD>";
	
	  echo "<TD>";
	  echo  "<input type='text' name='activity' value='" . $activity . "'>";
	  echo "</TD>";

	   echo "<TD>";
	   echo "<input type='hidden' name='id' value='" . $id. "'>
	   		 <input type='submit' name='update' value='Ändra'>
			 <input type='submit' name='delete' value='Ta bort'>"; 
	  echo "</TD>";
  echo "</TR>
</form>";

På första raden påbörjar vi formuläret som ska skicka data till "sig själv". Filen vi arbetar med heter alltså admin.php. Den metod vi skickar data med är som tidigare POST.

På nästa markerade rad har vi bytt ut texten inne i TD-elementet

echo "<TD>";
	echo $activity;
echo "</TD>";
mot en inmatningsruta för att kunna ändra dagens aktivitet. Användaren får nu möjlighet att skriva in en ny aktivitet som den aktuella dagen ska ha.
 echo "<TD>";
	  echo  "<input type='text' name='activity' value='" . $activity . "'>";
echo "</TD>";

De två följade markerade raderna är knapparna för de respektive valen vi har att göra. Den första för att ta ändra/uppdatera aktivitet och den andra för att ta bort hela dagen (i alla fall ur databasen). Varje dag i träningschemat är unikt identifierad i databasen med ett id-nummer. Det här id-numret hämtar vi ut när vi läser in dag från databasen och lagrar i variabeln $id. För att programmet (koden) som tar hand om de data som formuläret ger ifrån sig när det har skickats ska veta vilken dag som datat tillhör måste vi också skicka med detta id-nummer (dagnummer). Det gör vi genom att lägga ett dolt fält som heter just id och som har värdet $id. Användaren kommer inte att se detta fält men dess data kommer att skickas och kunna användas på "andra sidan", det vill säga på serversidan.

echo "<input type='hidden' name='id' value=" . $id . ">";

Det som händer är att en extra variabel med namnet id skapas när formuläret skickas. Vi skickar alltså bara vidare det id som tillhör dagen. Formuläret är nu klart och vi ska nu titta på koden som tar hand om formulärdatat.

Koden för att ta hand de skickade uppgifterna består av tre delar. Först har vi flyttat de rader kod som initierar databasen hit. Eftersom databasen kommer att användas flera gånger i filen (admin.php) lägger vi dem längst upp och har tillgång till uppkopplingen i resten av filen.

$connection = mysql_connect ("localhost", "nike", "password");
mysql_select_db("nike");

Den andra tar hand om att ta bort poster ur databasen. Första kodraden undersöker om knappen "Ta bort" var den som skickade formuläret. Det här görs genom att titta på variabeln delete i $_POST. Är det den knappen som användaren har skickats kommer variabeln $_POST['delete'] att ha ett värde, vilket vi lätt kan kontrollera.

// För att ta bort en post ur databasen
// Vi tar bort raden med id = $id, 
// alltså det som skickas från formuläret
if ($_POST['delete'] != '') {
	$id = $_POST['id'];
	$query = "delete from traning where id='" . $id . "'";	
	mysql_query($query, $connection);
}

Koden för att ta bort en post ställer en frågan : "ta bort den post med id = någonting från tabellen traning" till databasen. För att kunna göra detta tar vi först fram id (dagnummer) från $_POST där alla skickade variabler från ett formulär hamnar. Efter detta skriver vi ihop vår fråga i varibeln query. Slutet på frågan ser lite krånglig ut. Detta beror på att det är lite krångligt, men det är inte svårt. Det man måste göra är att sätta ihop den text man vill skriva i frågan med den variabel som ska skickas, i det här fallet id-numret för den person vi vill ta bort. Man sätter ihop en sträng och en variabel med operatorn . som gör det hela till en textsträng. Eftersom databasen vill ha det värde den ska leta efter i en fråga inom ''-tecken, måste vi skriva in dessa också. Kommer man bara ihåg dessa saker ska det inte vara några större problem. Kom ihåg, det är tillåtet att gå tillbaks hit och titta hur det ska göras, t o m kopiera hela databasbiten för att lättare komma igång!

Till sist ställer vi frågan som tidigare.

Om nu användaren har valt att trycka på knappen "Ändra" kommer istället en variabel med namnet uppdate att skapas. Då ska vi hoppa till koden för att uppdatera en aktivitet för en viss dag, och koden för detta ser i stort sett likadan ut som för att ta bort en dag. Först tas de variabler som ska användas fram för att sedan ingå i frågan som skapas i variabeln query även den här gången. I det här fallet måste vi ta fram vad den nya aktiviteten ska vara och lagrar dettta i den lokala variabeln $activity. Blanda inte ihop denna lokala variabel med den som finns i $_POST.

Frågan i det här fallet handlar om att uppdatera en viss post i databasen. Vi måste använda både $id och $activity och man får vara noga så att det blir rätt med alla '-tecken.

// För att ändra aktivitet för en viss dag
// Vi ändrar aktiviteten för den dag med 
// id = $id i formuläret nedan
else if ($_POST['update'] != '') 
{
        $activity = $_POST['activity'];
		$id = $_POST['id'];
		$query = "update traning set activity = '" . 
                  $activity . "' where id = '" . $id . "'";
     	mysql_query($query, $connection);
	 }
?>

Mer än så är det alltså inte!.

Hur hela PHP-sidan med HTML-kod och allt ser ut ser du här

Kod

Tyvärr kan vi inte visa det färdiga resultatet här på webbsidan, men hoppas att du själv provar det här exemplet eller gör något liknande själv.