2011-06-22 7 views
2

J'ai le code PHP suivant qui est supposé se connecter à la base de données et mettre à jour certaines informations. Cependant, il n'est pas mis à jour. Il ne donne pas d'erreurs, il se connecte très bien ... la déclaration SQL n'a tout simplement pas l'air de fonctionner mais tout me semble ok.instruction sql non mise à jour

if ($send != "no") {    
       $db_name = "auctionfinal"; 
       $table_name = "auctions"; 
       $connection = @mysql_connect("auctionfinal.db.6084638.hostedresource.com", "xxxx", "xxxx") or die(mysql_error()); 
       $db = @mysql_select_db($db_name, $connection) or die(mysql_error()); 

       $sql = "UPDATE $table_name SET curbid = '$_POST[price]', nbids = '$totalnbid' WHERE aucname = '$auc' "; 

       $result = @mysql_query($sql, $connection) or die(mysql_error()); 

       if ($result) { 
        echo "Thank you! You have bid on the auction for $auc, the current bid is $curbid, there have been $nbids bids on this auction so far."; 
       } 
      } else if ($send == "no") { 
       echo "$user_err"; 
      } 
+4

Pour commencer, supprimez '@' de tous ces appels de fonction afin de pouvoir voir les erreurs éventuelles. –

+4

[Bobby tables] (http://xkcd.com/327/) envoie des salutations. –

+0

même sans les @ je ne reçois aucune erreur – Expecto

Répondre

0

Ceci est l'un des risques que vous prenez en utilisant l'expansion variable à l'intérieur des chaînes.

Cette déclaration:

$sql = "UPDATE $table_name SET curbid = '$_POST[price]', nbids = '$totalnbid' WHERE aucname = '$auc' "; 

... serait mieux écrit:

$sql = "UPDATE ".$table_name." SET curbid = '".mysql_real_escape_string($_POST['price'])."', nbids = '".mysql_real_escape_string($totalnbid)."' WHERE aucname = '".mysql_real_escape_string($auc)."' "; 
+0

changer cela ne fait rien, et toujours pas d'erreurs – Expecto

+2

Ensuite, vous devez commencer à mettre des impressions de débogage afin que vous puissiez voir ce qu'il pense qu'il fait. – staticsan

+0

S'il est vrai que 'mysql_real_escape_string()' doit être utilisé sur ces variables avant de les passer à mysql_query(), l'interpolation de chaîne entre guillemets doubles n'est pas risquée. C'est une fonctionnalité précieuse de PHP qui, si elle est utilisée et comprise correctement offre une lisibilité supérieure et est beaucoup moins sujet aux erreurs que des dizaines de concaténations et les citations nécessaires pour les réaliser. –

3

Il ne donne pas d'erreur parce que vous avez dit PHP d'ignorer les erreurs. Supprimer le "@" devant tous les appels de fonction mysql, vous obtiendrez les erreurs.

1

Le symbole "@" devant la fonction php mysql supprime toute erreur. Retirez-le et vous verrez s'il y a des erreurs.

Questions connexes