PHP mysqli insert doet het wel op XAMPP, maar niet op mijn server.
Ik heb een registratie formulier gemaakt, dat het perfect doet op XAMPP.
Maar toen ik het ging uploaden naar mijn web server via FTP, deed de registratie pagina het ineens niet meer.
Dit is mijn code: (ik gebruik "procedural style, prepared statements")
// een aantal foutmeldingen, bijv. empty() etc.
else {
mysqli_stmt_bind_param($stmt, "s", $uid);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$resultCheck = mysqli_stmt_num_rows($stmt);
if($resultCheck > 0) {
header('Location: ../register.php?error=usertaken');
exit();
}
else {
$sqlInsert = 'INSERT INTO employee (UName, Pass, Mail, Name) VALUES (?, ?, ?, ?);';
$stmtInsert = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmtInsert, $sqlInsert)) {
echo 'MYSQLI statement is mislukt';
exit();
}
else {
mysqli_stmt_bind_param($stmtInsert, "ssss", $uid, $pwd, $mail, $name);
$execute = mysqli_stmt_execute($stmtInsert);
if(!$execute) {
header('Location: ../register.php?error=unknown');
exit();
}
else {
header('Location: ../register.php?register=success');
exit();
}
}
}
}
Op mijn web server krijg ik de hele tijd in de url balk: error=unknown, wat dus betekent dat de mysqli statement niet goed is uitgevoerd.
Hoe kan ik dit oplossen?
Alvast bedankt,
Kan je het tussen code-tags zetten? Dan is het hier beter leesbaar. Zie ook de Veel Gestelde Vragen.
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
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
<?php
// een aantal foutmeldingen, bijv. empty() etc.
else {
mysqli_stmt_bind_param($stmt, "s", $uid);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$resultCheck = mysqli_stmt_num_rows($stmt);
if($resultCheck > 0) {
header('Location: ../register.php?error=usertaken');
exit();
}
else {
$sqlInsert = 'INSERT INTO employee (UName, Pass, Mail, Name) VALUES (?, ?, ?, ?);';
$stmtInsert = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmtInsert, $sqlInsert)) {
echo 'MYSQLI statement is mislukt';
exit();
}
else {
mysqli_stmt_bind_param($stmtInsert, "ssss", $uid, $pwd, $mail, $name);
$execute = mysqli_stmt_execute($stmtInsert);
if(!$execute) {
header('Location: ../register.php?error=unknown');
exit();
}
else {
header('Location: ../register.php?register=success');
exit();
}
}
}
}
?>
// een aantal foutmeldingen, bijv. empty() etc.
else {
mysqli_stmt_bind_param($stmt, "s", $uid);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$resultCheck = mysqli_stmt_num_rows($stmt);
if($resultCheck > 0) {
header('Location: ../register.php?error=usertaken');
exit();
}
else {
$sqlInsert = 'INSERT INTO employee (UName, Pass, Mail, Name) VALUES (?, ?, ?, ?);';
$stmtInsert = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmtInsert, $sqlInsert)) {
echo 'MYSQLI statement is mislukt';
exit();
}
else {
mysqli_stmt_bind_param($stmtInsert, "ssss", $uid, $pwd, $mail, $name);
$execute = mysqli_stmt_execute($stmtInsert);
if(!$execute) {
header('Location: ../register.php?error=unknown');
exit();
}
else {
header('Location: ../register.php?register=success');
exit();
}
}
}
}
?>
Daar link je zelf naar. Is het niet verstandiger om een foutmelding vanuit mysqli te tonen? Mysqli_error()?
Toevoeging op 03/03/2019 19:51:15:
Ik heb voor nu even het volgende gedaan:
mysqli_error($stmtInsert);
Toen ik dit deed, kreeg ik de error: Field 'groep' doesn't have a default value
Toevoeging op 03/03/2019 19:54:19:
Ik heb nu even dit erin gezet:
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
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
<?php
session_start();
require 'connection.inc.php';
$name = $_POST['Name'];
$mail = $_POST['Mail'];
$pwd = $_POST['PWD'];
$pwdrepeat = $_POST['PWDRepeat'];
$uid = $_POST['UID'];
$groep = $_POST['groep'];
// de variabelen hierboven waren al gedefinieerd, maar nu heb ik ook nog "$groep" toegevoegd
$sqlInsert = 'INSERT INTO employee (UName, Pass, Mail, Name, groep) VALUES (?, ?, ?, ?, ?);';
$stmtInsert = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmtInsert, $sqlInsert)) {
echo 'MYSQLI statement is mislukt';
exit();
}
else {
mysqli_stmt_bind_param($stmtInsert, "ssss", $uid, $pwd, $mail, $name, $groep);
$execute = mysqli_stmt_execute($stmtInsert);
if(!$execute) {
echo mysqli_error();
exit();
}
?>
session_start();
require 'connection.inc.php';
$name = $_POST['Name'];
$mail = $_POST['Mail'];
$pwd = $_POST['PWD'];
$pwdrepeat = $_POST['PWDRepeat'];
$uid = $_POST['UID'];
$groep = $_POST['groep'];
// de variabelen hierboven waren al gedefinieerd, maar nu heb ik ook nog "$groep" toegevoegd
$sqlInsert = 'INSERT INTO employee (UName, Pass, Mail, Name, groep) VALUES (?, ?, ?, ?, ?);';
$stmtInsert = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmtInsert, $sqlInsert)) {
echo 'MYSQLI statement is mislukt';
exit();
}
else {
mysqli_stmt_bind_param($stmtInsert, "ssss", $uid, $pwd, $mail, $name, $groep);
$execute = mysqli_stmt_execute($stmtInsert);
if(!$execute) {
echo mysqli_error();
exit();
}
?>
Toevoeging op 03/03/2019 19:56:39:
Het registratie formulier doet het al!
Ik ben erachter gekomen dat ik $groep (wat een input was bij het formulier) moest meenemen bij het insert.
En bij het insert had ik dat dus niet gedaan, waardoor ik de error kreeg="empty field groep".
Dus nu heb ik groep WEL meegenomen en nu doet de code het!
Al overwogen om PDO te gebruiken of gewoon alles in MySQLi handmatig te quoten en te escapen (of wellicht om je eigen wrapper te schrijven voor prepared statements in MySQLi maar wellicht ben je dan toch beter af met PDO)?
PDO begrijp ik niet echt, de "procedural style" van mysqli vind ik logischer en kan ik zelf beter lezen.
Ik denk dat PDO nog steeds eenvoudiger is dan hoe mysqli prepared statements gebruikt.
Want dan heb je bijvoorbeeld:
$stmt->prepare(connection.php)
Hoezo is er dan een "->" ?
En wat doet dat pijltje dan?
Maar normale queries kan natuurlijk ook.
Net wat je fijner vindt. Maar bij normale queries is escaping met real_escaping_string altijd van belang.
Als je nog nooit op de OOP wijze hebt geprogrammeerd wordt het hoog tijd voor een opfriscursus.
Gewijzigd op 05/03/2019 19:53:18 door Thomas van den Heuvel
Oké. Waar kan ik dan het best OOP / PDO gaan leren?
https://www.phphulp.nl/php/tutorial/overig/oop-beginnershandleiding-php5/701/
Gewijzigd op 05/03/2019 20:21:27 door - Ariën -