Door
Nick VanRossem
op 17-01-2016 23:41
gewijzigd op 17-01-2016 23:46
1.644 views
Ik gebruik het ietwat verouderde boek PHP 5 van Arjan Burger om php te leren.
Ik heb geprobeerd om een script om records uit een tabel te verwijderen aan te passen naar mysqli.
De records uit de tabel worden weergegeven. Echter krijg ik enkele foutmeldingen en lukt het niet om een record te verwijderen.
Notice: Undefined index: actie in /home/nickvzk61/domains/nickvzk61.sixtyone.axc.nl/public_html/testlab/category_del.php on line 26
Notice: Undefined variable: PHP_SELF in /home/nickvzk61/domains/nickvzk61.sixtyone.axc.nl/public_html/testlab/category_del.php on line 39
Notice: Undefined variable: PHP_SELF in /home/nickvzk61/domains/nickvzk61.sixtyone.axc.nl/public_html/testlab/category_del.php on line 39
wie kan mij helpen?
<html>
<head>
<title>Categorie verwijderen</title>
</head>
<body>
<?php
// errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
// database connectie maken
// ""localhost","my_user","my_password","my_db"
$db = mysqli_connect("localhost", "my_user", "my_password", "my_db");
// foutmelding weergeven bij mislukte database connectie
if (!$db) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
// uit te voeren actie
// tabelnaam: category
// kolommen: 'category_id' & 'category_name'
if ($_GET["actie"] == "wis" && $_GET["categoryiddel"]) { //is er een categorie ingevoerd?
if (!mysqli_query($db, "DELETE FROM category WHERE category_id=".$GET[categoryiddel]."")){ //als de query mislukt geef een melding
echo "Verwijderen van de categorie is mislukt!";
exit;
}
}
else{ //laad de tabel
?>
Wis de volgende categorie:<br>
<?php
$resultaatdelete = mysqli_query($db, "SELECT * FROM category"); // vul de variabale met de gegevens uit de tabel category
while ($rij = mysqli_fetch_array($resultaatdelete, MYSQLI_BOTH)){ //zolang er een rij gevuld wordt, data weergeven
$categoryiddel = $rij["category_id"];
echo $rij["category_name"]."<a href=\"$PHP_SELF?actie=wis&categoryiddel=$categoryiddel\">Wissen</a><br>\n";
}
}
?>
</body>
</html>
Je mis ook een liggend streepje (underscore) op regel 27 in $GET.
Daarnaast is het misschien ook handig om te controleren op het bestaan van variabelen zoals SanThe aangeeft met behulp van isset() en als je dingen een query(string) in duwt, controleer dan op zijn minst of datgene numeriek is ten einde een ongewenst effect te voorkomen.
Ik heb geprobeerd om de tips en opmerkingen toe te passen en heb nu een werkend script zonder foutmeldingen.
- de functie isset() proberen toe te passen.
- regel 27 $GET aangepast naar $_GET + ontbrekende quotes toegevoegd.
- poging tot numerieke controle van $_GET["categoryiddel"] door gebruik van ctype_digit().
het script werkt nu wel, maar graag had ik nog feedback ontvangen of dit wel "correct" is uitgevoerd.
$PHP_SELF heb ik nog wel in gebruik, maar ik heb niet gevonden hoe dit anders zou kunnen. (net even de druk van het boek dat ik gebruik gecontroleerd. Het boek dateert van 2007).
<html>
<head>
<title>Categorie verwijderen</title>
</head>
<body>
<?php
// errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
// database connectie maken
// ""localhost","my_user","my_password","my_db"
$db = mysqli_connect("localhost", "my_user", "my_password", "my_db");
// foutmelding weergeven bij mislukte database connectie
if (!$db) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
// uit te voeren actie
// tabelnaam: category
// kolommen: 'category_id' & 'category_name'
if (isset($_GET["actie"]) and $_GET["actie"] == "wis" && ctype_digit($_GET["categoryiddel"])) { //is er een categorie ingevoerd?
if (!mysqli_query($db, "DELETE FROM category WHERE category_id=".$_GET["categoryiddel"]."")){ //als de query mislukt geef een melding
echo "Verwijderen van de categorie is mislukt!";
exit;
}
else{
echo "De categorie <b>".htmlspecialchars($_GET["categoryiddel"], ENT_QUOTES, "UTF-8")."</b> is verwijderd.<br>";
$resultaatdelete = mysqli_query($db, "SELECT * FROM category"); // vul de variabale met de gegevens uit de tabel category
while ($rij = mysqli_fetch_array($resultaatdelete, MYSQLI_BOTH)){ //zolang er een rij gevuld wordt, data weergeven
$categoryiddel = $rij["category_id"];
echo $rij["category_name"]."<a href=\"?actie=wis&categoryiddel=$categoryiddel\">Wissen</a><br>\n";
}
}
}
else{ //laad de tabel
?>
Wis de volgende categorie:<br>
<?php
$resultaatdelete = mysqli_query($db, "SELECT * FROM category"); // vul de variabale met de gegevens uit de tabel category
while ($rij = mysqli_fetch_array($resultaatdelete, MYSQLI_BOTH)){ //zolang er een rij gevuld wordt, data weergeven
$categoryiddel = $rij["category_id"];
echo $rij["category_name"]."<a href=\"?actie=wis&categoryiddel=$categoryiddel\">Wissen</a><br>\n";
}
}
?>
</body>
</html>
Bedankt - SanThe -, ik heb de aanpassingen uitgevoerd en het script van vorige post ook geupdate.
uit leergierigheid: is er een reden waarom je "AND" gebruikt en niet "&&"?
Het verschil dat ik begrijp is dat "&&" een hogere voorrang heeft ten opzichte van "and".