mysqli - wissen uit een tabel lukt niet
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?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<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>
<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>
alvast bedankt voor de moeite.
Gewijzigd op 17/01/2016 23:46:21 door Nick VanRossem
Nick VanRossem op 17/01/2016 23:41:56:
Echter krijg ik enkele foutmeldingen
En nu mogen wij die gaan gokken.
Mijn excuses - SanThe - ik zag het ook net bij het herlezen van mijn post. het oorspronkelijk bericht is aangepast.
Zie isset().
Als je toch naar hetzelfde bestand linkt heb je daar geen variabele voor nodig.
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).
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<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>
<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>
Gewijzigd op 19/01/2016 00:09:31 door Nick VanRossem
De function isset() geeft true of false terug en zal dus nooit tekst zijn.
if (isset($_GET["actie"]) and $_GET["actie"] == "wis" ...)
$PHP_SELF kan je gewoon weghalen.
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".
Ik vind het beter leesbaar.
Code (php)
1
2
2
<?php if (isset($_GET["actie"]) and $_GET["actie"] == "wis" && ctype_digit($_GET["categoryiddel"])) { //is er een categorie ingevoerd?
?>
?>
daar kan nog steeds die 2e ontbreken, dus ook isset() erbij
ik zou het schrijven als onder, maar met isset kan ook
Code (php)
1
2
3
4
2
3
4
<?php
if(filter_input(INPUT_GET, 'actie') == 'wis' && filter_input(INPUT_GET,'categoryiddel', FILTER_VALIDATE_INT)) { //is er een categorie ingevoerd?
?>
if(filter_input(INPUT_GET, 'actie') == 'wis' && filter_input(INPUT_GET,'categoryiddel', FILTER_VALIDATE_INT)) { //is er een categorie ingevoerd?
?>