0 votes

Déclaration conditionnelle préparée ne basculant pas

J'ai le code PHP suivant, qui est censé insérer des données dans le cas où le champ nom d'utilisateur est vide pour un nom d'utilisateur donné, ou mettre à jour les données si un nom d'utilisateur existe. Pour l'instant, l'insertion fonctionnait bien, mais elle ne passait jamais à la clause de mise à jour.

Cependant, la clause d'insertion ne reconnaît pas ma variable de test, sans raison apparente. Les erreurs que j'obtiens sont les suivantes :

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

y

Notice: Undefined variable: checkUsername

qui sont assez récentes.

if($cmd=="submitinfo"){

$usernameQuery = "select username from USERS where username = $username";

$xblah = $con->query($usernameQuery);
  while ($row = mysqli_fetch_assoc($xblah))
  {
    $checkUsername = $row['username'];

  }

if ($checkUsername == null) {

$userQuery = "INSERT INTO USERS VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
if ($userInfo = $con->prepare($userQuery)) {
    $userInfo->bind_param("ssssssssssssssssssss", $username, $firstname, $lastname, $flaggedauctions, $lastauction, $street1, $city1, $postcode1, $street2, $city2, $postcode2, $phone, $mobilephone, $fax, $email, $website, $bank, $banknumber, $accountnumber, $comments);
    $userInfo->execute();
    $userInfo->close();
    echo "true";
} else {
echo "false";
}
print_r($con->error);
}

else if ($checkUsername == $username) {

$userQuery = "UPDATE USERS SET firstname = ?, lastname = ?, flaggedauctions = ?, lastauction = ?, street1 = ?, city1 = ?, postcode1 = ?, street2 = ?, city2 = ?, postcode2 = ?, phone = ?, mobilephone = ?, fax = ?, email = ?, website = ?, bank = ?, banknumber = ?, accoutnumber = ? WHERE username = ?";
if ($userInfo = $con->prepare($userQuery)) {
    $userInfo->bind_param("sssssssssssssssssss", $firstname, $lastname, $flaggedauctions, $lastauction, $street1, $city1, $postcode1, $street2, $city2, $postcode2, $phone, $mobilephone, $fax, $email, $website, $bank, $banknumber, $accountnumber, $username);
    $userInfo->execute();
    $userInfo->close();
    echo "true";
} else {
echo "false";
}
print_r($con->error);
}
}

Quelle est la meilleure façon d'effectuer une mise à jour ou une insertion en fonction du contenu de $username par rapport au champ username ?

1voto

Kalium Points 2895
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

C'est votre message d'erreur ? Je pense que votre problème vient de cette ligne :

$xblah = $con->query($usernameQuery);

Faire un var_dump sur $xblah. Je pense que votre requête échoue. Probablement parce que vous n'avez pas récupéré $username de votre contribution. Et pour l'amour de Root, ne manquez pas de vous échapper ! mysql_real_escape_string() fera ce que vous voulez.

0voto

Jeff Ober Points 3314

Si vous utilisez MySQL et que le nom d'utilisateur est unique, vous pouvez utiliser ce SQL pratique :

INSERT INTO users (?, ?, ...) ON
DUPLICATE KEY UPDATE firstname=?,
lastname=?, ...)

Voir http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html pour une documentation complète.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X