2009-04-16 7 views
0

J'ai le code PHP suivant, qui est destiné à insérer des données dans le cas où le champ de nom d'utilisateur est vide pour un nom d'utilisateur donné, ou mettre à jour les données si un nom d'utilisateur existe. À l'heure actuelle, l'insertion fonctionnait correctement auparavant, mais elle ne passerait jamais à la clause de mise à jour.instruction préparée conditionnelle non commutation

Maintenant, cependant, la clause insert ne reconnaît pas ma variable de test, sans raison apparente. Les erreurs que je reçois sont:

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

et

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

Qu'est-ce qu'un moyen privilégié pour faire une mise à jour ou un insert en fonction du contenu du nom d'utilisateur $, pour le champ de nom d'utilisateur?

Répondre

1
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 est cette ligne:

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

Faites un var_dump sur xblah de $. Je soupçonne que votre requête échoue. Probablement parce que vous n'avez pas récupéré $username de votre entrée. Et pour l'amour de la racine, soyez sûr d'y échapper! mysql_real_escape_string() fera ce que vous voulez.

+0

Oui. L'autre requête est paramétrée, pourquoi pas celle-ci? – bobince

+0

$ xblah imprime les booléens (faux)? –

+0

@Josh Cela signifie que votre requête échoue. Assurez-vous d'avoir entré le nom d'utilisateur $. – Kalium

0

Si vous utilisez MySQL et 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.

+0

Donc, je devrais utiliser cela à la place du code conditionnel que j'ai actuellement? –

Questions connexes