insert met mysqli lukt niet.
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
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
<html>
<head>
<title>Categorie invoeren</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", "user", "pasword", "nickvzk61_myshop");
// 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;
}
// de waarde van nieuwecategorie in de database zetten
if ($_POST["categorieknop"] && $_POST["nieuwecategorie"]) {
if(!mysqli_query($db, "INSERT INTO `nickvzk61_myshop`.`CATEGORIE` (`Categorie_id`, `Naam`) VALUES (NULL, '".$_POST["nieuwecategorie"]."')")){ // voer SQL code uit)
echo "Helaas, de categorie ".$_POST["nieuwecategorie"]." kon niet worden toegevoegd aan de database!"; //wordt de query goed uitgevoerd?
}
else {
echo "De categorie <b>".$_POST["nieuwecategorie"]."</b> is toegevoegd.";
}
mysqli_close($db);
} else {
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
Welke categorie wilt u toevoegen?<br>
Categorie: <input type="text" name="nieuwecategorie"><br>
<input type="submit" name="categorieknop" value="toevoegen">
</form>
<?php
}
?>
</body>
</html>
<head>
<title>Categorie invoeren</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", "user", "pasword", "nickvzk61_myshop");
// 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;
}
// de waarde van nieuwecategorie in de database zetten
if ($_POST["categorieknop"] && $_POST["nieuwecategorie"]) {
if(!mysqli_query($db, "INSERT INTO `nickvzk61_myshop`.`CATEGORIE` (`Categorie_id`, `Naam`) VALUES (NULL, '".$_POST["nieuwecategorie"]."')")){ // voer SQL code uit)
echo "Helaas, de categorie ".$_POST["nieuwecategorie"]." kon niet worden toegevoegd aan de database!"; //wordt de query goed uitgevoerd?
}
else {
echo "De categorie <b>".$_POST["nieuwecategorie"]."</b> is toegevoegd.";
}
mysqli_close($db);
} else {
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
Welke categorie wilt u toevoegen?<br>
Categorie: <input type="text" name="nieuwecategorie"><br>
<input type="submit" name="categorieknop" value="toevoegen">
</form>
<?php
}
?>
</body>
</html>
Gewijzigd op 25/11/2015 22:47:09 door Nick VanRossem
En wat meldt mysqli_error($db)?
- Let er ook op dat hoofdletters in tabelnamen niet echt handig zijn.
- Een databasenaam hoef je in jouw geval niet te gebruiken na je INTO.
- Verder is je script ook lek voor SQL-injection.
- En is het niet nodig om $_SERVER['PHP_SELF'] te echoen op lijn 36. Je kan de action ook leeg laten.
bedankt voor je reactie,
Ik krijg helemaal geen melding van een fout. Als ik op "toevoegen" klik, wordt het form leeg gemaakt en wordt er niets aan de database toegevoegd.
hier staat het script > http://nickvzk61.sixtyone.axc.nl/testlab/category_add.php
if ($_POST["categorieknop"] && $_POST["nieuwecategorie"]) {
vervangt door
if($_SERVER['REQUEST_METHOD'] == 'POST') {
want de enige manier om weer in je form uit te komen, is zo te zien als niet zowel categorieknop als nieuwecategorie verzonden zijn en een waarde hebben.
En mogelijk is door gebruik van ENTER de knop niet meegestuurd?
Mogelijk is het ook beter om te controleren of een formulier verzonden is met behulp van $_SERVER['REQUEST_METHOD'].
Ook zou ik dit in een aparte actie zetten die verder geen output produceert zoals hier staat beschreven. Andere methoden leveren vaak spaghetti-code op (de mogelijk welbekende if-elseif-elseif-else hel).
Heb de code uitgeprobeerd en hier werkt hij wel..
http://static.afbeeldinguploaden.nl/1511/128080/LU2ugt9w.png
Krijg wel de volgende foutmelding:
http://static.afbeeldinguploaden.nl/1511/128081/ZOED4QYD.png
Maar gezien het bij mij werkt zou ik denken dat je de database niet precies zo hebt ingericht/genoemd als hier (dus 'naam' in plaats van 'Naam' of wat dan ook)
Gewijzigd op 27/11/2015 23:22:17 door - Ariën -
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
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
<html>
<head>
<title>Categorie invoeren</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", "user", "pasword", "nickvzk61_myshop");
// 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;
}
// de waarde van nieuwecategorie in de database zetten
if (isset($_POST["categorieknop"]) && $_POST["nieuwecategorie"]) {
if(!mysqli_query($db, "INSERT INTO `nickvzk61_myshop`.`categorie` (`Categorie_id`, `Naam`) VALUES (NULL, '".mysqli_real_escape_string($db, $_POST["nieuwecategorie"])."')")){ // voer SQL code uit)
echo "Helaas, de categorie ".htmlspecialchars($_POST["nieuwecategorie"], ENT_QUOTES, "UTF-8")." kon niet worden toegevoegd aan de database!"; //wordt de query goed uitgevoerd?
}
else {
echo "De categorie <b>".htmlspecialchars($_POST["nieuwecategorie"], ENT_QUOTES, "UTF-8")."</b> is toegevoegd.";
}
mysqli_close($db);
} else {
?>
<form method="post" action="">
Welke categorie wilt u toevoegen?<br>
Categorie: <input type="text" name="nieuwecategorie"><br>
<input type="submit" name="categorieknop" value="toevoegen">
</form>
<?php
}
?>
</body>
</html>
<head>
<title>Categorie invoeren</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", "user", "pasword", "nickvzk61_myshop");
// 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;
}
// de waarde van nieuwecategorie in de database zetten
if (isset($_POST["categorieknop"]) && $_POST["nieuwecategorie"]) {
if(!mysqli_query($db, "INSERT INTO `nickvzk61_myshop`.`categorie` (`Categorie_id`, `Naam`) VALUES (NULL, '".mysqli_real_escape_string($db, $_POST["nieuwecategorie"])."')")){ // voer SQL code uit)
echo "Helaas, de categorie ".htmlspecialchars($_POST["nieuwecategorie"], ENT_QUOTES, "UTF-8")." kon niet worden toegevoegd aan de database!"; //wordt de query goed uitgevoerd?
}
else {
echo "De categorie <b>".htmlspecialchars($_POST["nieuwecategorie"], ENT_QUOTES, "UTF-8")."</b> is toegevoegd.";
}
mysqli_close($db);
} else {
?>
<form method="post" action="">
Welke categorie wilt u toevoegen?<br>
Categorie: <input type="text" name="nieuwecategorie"><br>
<input type="submit" name="categorieknop" value="toevoegen">
</form>
<?php
}
?>
</body>
</html>
/edit
Net even wat "beveiliging" proberen toe te voegen. Hoe lek is mijn script? en wat zou ik eventueel nog kunnen proberen/doen?
Gewijzigd op 27/11/2015 23:07:02 door Nick VanRossem
Ten eerste kan de action net zo goed leeg zijn, als het om bestandsnaam gaat. En verder zit er ook een potentieel gevaar voor XXS achter.
bedankt - Ariën -, net even aangepast :-)
Niet in je HTML document via een PHP header() of HTML meta-tag.
Niet in het accept-charset attribuut van je formulier.
Niet bij het maken van een connectie met je database.
Maar (enkel) bij htmlspecialchars()?
Escaping functies (zoals _real_escape_string() en htmlspecialchars() etc.) werken alleen correct als alles omtrent character encoderingen goed staat ingesteld.
Als je nu teksten invoert die exotische karakters bevatten, en je later je connectie repareert (een _set_charset() aanroep toevoegt net na het maken van je connectie) dan zal blijken dat eerder ingevoerde data in je database corrupt is (niet van de voorgeschreven character encoding is).
toevoegen in de head sectie.
Is het dan correct dat ik in mijn form tag de code
toevoeg? of is dit dan overbodig?
Mogelijk is het overbodig, maar er kan op deze manier geen enkel misverstand bestaan over wat de bedoeling is.