PHP mysqli insert doet het wel op XAMPP, maar niet op mijn server.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jin vanTongeren

Jin vanTongeren

03/03/2019 19:37:48
Quote Anchor link
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,
 
PHP hulp

PHP hulp

14/11/2024 04:02:07
 
- Ariën  -
Beheerder

- Ariën -

03/03/2019 19:41:54
Quote Anchor link
Kan je het tussen code-tags zetten? Dan is het hier beter leesbaar. Zie ook de Veel Gestelde Vragen.
 
Jin vanTongeren

Jin vanTongeren

03/03/2019 19:43:18
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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();
}
}
}
}

?>
 
- Ariën  -
Beheerder

- Ariën -

03/03/2019 19:49:44
Quote Anchor link
Daar link je zelf naar. Is het niet verstandiger om een foutmelding vanuit mysqli te tonen? Mysqli_error()?
 
Jin vanTongeren

Jin vanTongeren

03/03/2019 19:50:32
Quote Anchor link
Ja, dat heb ik geprobeerd, maar ik weet niet welk parameter er in de () van error() moeten.

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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();
                        }

?>


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!
 
Thomas van den Heuvel

Thomas van den Heuvel

04/03/2019 03:23:33
Quote Anchor link
Oef.

Afbeelding

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)?
 
Jin vanTongeren

Jin vanTongeren

05/03/2019 19:31:08
Quote Anchor link
Het ding is:
PDO begrijp ik niet echt, de "procedural style" van mysqli vind ik logischer en kan ik zelf beter lezen.
 
Thomas van den Heuvel

Thomas van den Heuvel

05/03/2019 19:37:48
Quote Anchor link
Ik denk dat PDO nog steeds eenvoudiger is dan hoe mysqli prepared statements gebruikt.
 
Jin vanTongeren

Jin vanTongeren

05/03/2019 19:45:04
Quote Anchor link
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?
 
- Ariën  -
Beheerder

- Ariën -

05/03/2019 19:50:51
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

05/03/2019 19:52:46
Quote Anchor link
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.
Gewijzigd op 05/03/2019 19:53:18 door Thomas van den Heuvel
 
Jin vanTongeren

Jin vanTongeren

05/03/2019 19:54:24
Quote Anchor link
Oké. Waar kan ik dan het best OOP / PDO gaan leren?
 
- Ariën  -
Beheerder

- Ariën -

05/03/2019 20:18:50
Quote Anchor link
Ikzelf heb het geleerd uit het "PHP5 handboek" en via diverse tutorials bijgeschaafd. Maar Joren de Wit legt het goed uit in de tutorial-sectie hier op PHPhulp.

https://www.phphulp.nl/php/tutorial/overig/oop-beginnershandleiding-php5/701/
Gewijzigd op 05/03/2019 20:21:27 door - Ariën -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.