Hallo,
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.
<?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();
}
}
}
}
?>
Daar link je zelf naar. Is het niet verstandiger om een foutmelding vanuit mysqli te tonen? Mysqli_error()?
Ja, dat heb ik geprobeerd, maar ik weet niet welk parameter er in de () van error() moeten.

[size=xsmall]Toevoeging op 03/03/2019 19:51:15:[/size]

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


[size=xsmall]Toevoeging op 03/03/2019 19:54:19:[/size]

Ik heb nu even dit erin gezet:

<?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();
}
?>

[size=xsmall]Toevoeging op 03/03/2019 19:56:39:[/size]

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!
Oef.



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)?
Het ding is:
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.
Oké, maar kunt u me dan uitleggen wat al die -> betekenen?
Want dan heb je bijvoorbeeld:

$stmt->prepare(connection.php)
Hoezo is er dan een "->" ?
En wat doet dat pijltje dan?
Dat hoort bij object-georiënteerd programmeren met objecten.

Maar normale queries kan natuurlijk ook.
Net wat je fijner vindt. Maar bij normale queries is escaping met real_escaping_string altijd van belang.
Euh, dat is een object georiënteerde schrijfwijze. Dat heeft in principe niets te maken met PDO specifiek (los van het feit dat PDO enkel deze smaak kent) maar is een alternatieve manier om te programmeren die tegenwoordig steeds meer omarmd wordt. De oude manier (procedureel) raakt hoe langer hoe meer uit zwang. Zelfs MySQLi wordt aangeboden in beide smaken (zowel procedureel alsook object georiënteerd).

Als je nog nooit op de OOP wijze hebt geprogrammeerd wordt het hoog tijd voor een opfriscursus.

Reageren