Hallo,
deze code werkt niet:

            $firstname = $_POST['firstname'];
            $latstname = $_POST['lastname'];
            $mail = $_POST['mail'];
            $username = $_POST['username'];
            $password = password_hash($_POST['password'], PASSWORD_DEFAULT);

$sql = "INSERT INTO `users` (`username`, `firstname`, `lastname`, `email`, `password`, `code`) VALUES (mysqli_real_escape_string($connection, $username), mysqli_real_escape_string($connection, $firstname), mysqli_real_escape_string($connection, $lastname), mysqli_real_escape_string($connection, $mail), mysqli_real_escape_string($connection, $password), mysqli_real_escape_string($connection, $randomString))";
            if (mysqli_query($connection, $sql)) {
//Send mail
}


Dit is de error: Catchable fatal error: Object of class mysqli could not be converted to string in /home/u487367936/public_html/register.php on line 62 (HIER REGEL 1)
Ik heb dit opgezocht op google maar de oplossingen en oorzaken van het probleem liepen veen uiteen.
Ik hoop dat iemand mij hiermee kan helpen.

Mvg
Wat is je $connection? Is dit een mysqli object of een connection identifier?
@Ben van Velzen
Dit is mijn dbconnect.php

<?php

$connection = mysqli_connect("//", "//", "//", "//");

if(mysqli_connect_error($connection)) {
    exit('Error connecting to MySQL: ' .mysqli_connect_error($connection));
}

/* change character set to utf8 */
mysqli_set_charset($connection, "utf8");

Je maakt een typefoutje bij de waardetoekenning van $lastname ($latsname) waardoor deze variabele in je query onbekend is.
Dank je!
Ik heb de fout gevonden:

            $sql = "INSERT INTO users (
        id, username, mail, password, firstname, lastname, code
        ) VALUES (
        '', '" . mysqli_real_escape_string($connection, $username) . "', '" . mysqli_real_escape_string($connection, $mail) . "', '" . mysqli_real_escape_string($connection, $password) . "', '" . mysqli_real_escape_string($connection, $firstname) . "', '" . mysqli_real_escape_string($connection, $lastname) . "', '" . mysqli_real_escape_string($connection, $randomString) . "'
        )";
Blijft voor mij nog wel de vraag waarom je al die variabelen aanmaakt.
Je hebt ze toch al in de $_POST waarden zitten?!
Het oorspronkelijke probleem werd dus waarschijnlijk veroorzaakt door het ontbreken van quotes in de query (en een spellingsfout ergens?).

Wat @Obelix&Idefix zegt, ook zou je een en ander in een wrappertje kunnen zetten en je query over meerdere regels kunnen uittypen, zodat je bijvoorbeeld het volgende krijgt:
<?php
if ($db->query(
    "INSERT INTO users (
        username, mail, password, firstname, lastname, code
    ) VALUES (
        '".$db->escape($_POST['username'])."',
        '".$db->escape($_POST['mail'])."',
        '".$db->escape($_POST['password'])."',
        '".$db->escape($_POST['firstname'])."',
        '".$db->escape($_POST['lastname'])."',
        '".$db->escape($_POST['randomString'])."'
    )"
)) {
    // send e-mail
}
?>

(NB een auto increment id hoef je niet expliciet te inserten en kan achterwege worden gelaten)

De voordelen hiervan lijken mij duidelijk:
- geen introductie van overbodige variabelen
- (beter) leesbare query
- je kunt direct zien waar een waarde vandaan komt ($_POST)
- kortere code

Als je dit 3x uit hebt geschreven:
<?php
// ...
mysqli_real_escape_string($connection, $username)
// ...
?>

Ben je dat wel een beetje zat toch?

Reageren