2010-05-03 6 views
2

J'essaye de poster un formulaire avec deux champs (nom et email) dans une table MySQL.PHP et MySQL - poster des doubles entrées

Sur le serveur local (mon ordinateur portable), cela fonctionne très bien.

Mais sur le serveur de production, il affiche deux fois!

Je n'arrive pas à comprendre pourquoi.

Voici le code:

$name = ucwords(strtolower(trim($_POST['name']))); 

$email = strtolower(trim($_POST['email'])); 

$mysqli = new mysqli($server, $serveruser, $serverpass, $dbname); 

$name = $mysqli->real_escape_string($name); 

$email = $mysqli->real_escape_string($email); 

$sql = "INSERT INTO table_name (name, email) VALUES ('" . $name . "', '" . $email . 
"')"; 

$res = mysqli_query($mysqli, $sql); 

Il me rend dingue.

+2

Essayez ceci comme nom d'utilisateur: "a ',' a '); DROP TABLE nom_table; -" (sans les guillemets doubles) – Ben

+0

Aimeriez-vous voir le reste de votre code à coup sûr. –

+0

Chaque insertion affiche deux fois, ou juste un peu? Dans ce dernier cas, les utilisateurs peuvent être en train de recharger afin de les rediriger vers la page. – Hans

Répondre

0

Je pense que le problème pourrait être du côté client. Peut-être que votre formulaire affiche deux fois pour une raison quelconque. Comme débogage je ferais deux choses:

  1. Faire un email PK dans le DB juste pour donner une erreur immédiatement lorsque l'insert se produit.
  2. Vérifiez les résultats de la requête et les erreurs de poste (le cas échéant)
+0

J'ai un PK séparé dans la table appelée "id" avec l'incrément automatique. – leo

+0

le moteur de stockage de la table est MyISAM. – leo

+0

Ok, faites un email unique alors. Vous voulez que deux des mêmes e-mails déclenchent une erreur. –

0

essayer $ sql = "INSERT ignorer EN nom_table (nom, e-mail) VALUES ('". $ Nom. " ''" . $ email "')";

2

Je sais que cela semble une chose évidente, mais, les choses évidentes ont tendance à être la dernière chose que nous vérifions pour une raison quelconque ...

sont les fichiers sur votre ordinateur portable et sur le serveur identique? Se pourrait-il que vous exécutiez une requête SQL similaire ailleurs, provoquant la double entrée?

Si vous commentez la ligne qui contient (ce que vous pensez être la seule) requête SQL, est-ce que quelque chose est entré dans la base de données? Si oui, vous avez une deuxième requête SQL ailleurs.

est le fichier qui contient ce code étant incorporé dans un autre fichier en utilisant le nécessitent ou comprennent fonctions? Si oui, le require_once ou include_once fonctionnera-t-il comme un meilleur choix? Bien que ces autres correctifs puissent fonctionner, ils sont des correctifs - en supprimant le symptôme plutôt qu'en s'attaquant à la cause. Mieux vaut le trier au niveau le plus profond que vous pouvez le trouver, plutôt que de simplement contourner ce comportement inattendu.

+0

Un petit paquet de conseils de débogage ne fait jamais mal. – Lapidouce

Questions connexes