2010-05-31 2 views
0

J'essaie de mettre à jour les données mysql en laissant les utilisateurs soumettre un formulaire.Comment éviter plusieurs mises à jour SQL en utilisant un formulaire?

L'utilisateur peut mettre à jour le résultat du jeu et l'équipe gagnante gagne +1 en mysql. L'utilisateur peut toujours voir le formulaire de jeu et mettre à jour/changer le jeu.

Ma question est de savoir comment empêcher la deuxième ou la troisième fois de gagner à l'équipe gagnante lorsque les utilisateurs mettent à jour le formulaire à nouveau. Par exemple, l'équipe A bat l'équipe B et l'utilisateur soumet le formulaire. Le mysql sera +1 pour gagner la colonne pour l'équipe A. Plus tard, les utilisateurs découvriront que l'équipe C bat l'équipe D et soumettra à nouveau le formulaire, mais l'équipe A, l'équipe B, l'équipe C et l'équipe D sont tous dans la même forme. l'utilisateur soumet à nouveau le formulaire, l'équipe A obtiendra 2 victoires dans la colonne de victoire et l'équipe C obtiendra 1 victoire. Je veux garder l'équipe A avec 1 victoire seulement. Je ne sais pas si c'est possible. Merci pour toute réponse.

Formulaire Html

<form> 
//First time The user only select the winning team in winner1 and submit the form 
//Second time the user see the page, The Team A will be selected base on 1 win in mysql 
//when user tried to submit again, 
//Team A will get another 1 win in its record which is not true. 

<select name='winner1'> 
<option>Select the winner</option> 
<option>Team A</option> 
<option>Team B</option> 
</select> 

//User didn't select the winning team first time 
//User submits again with the selected winner team for winner2 . 
//database will be Team A => 2 wins, Team C =>1 win. 

<select name='winner2'> 
<option>Select the winner</option> 
<option>Team C</option> 
<option>Team D</option> 
</select> 
</form> 

Mon résultat php

for ($i=1; $i<3; $i++){ 

$winner=$_POST['winner'.$i] 

//omit some php query code....... 

select win from team where teamName ='$winner' 

//get win and +1 to win 
$win++ 

update team set win='$win' where teamName ='$winner' 
} 

J'espère expliquer mes questions clairement .. merci pour toute réponse.

Répondre

4

Votre requête de mise à jour doit seulement être:

UPDATE TEAM 
    SET win = win+1 
WHERE teamName = '$winner' 
--AND win = 0 

Il n'y a pas besoin de faire le voyage en PHP et de retour à la base de données; cela peut être fait en un seul voyage.

Comment éviter les doublons? Afficher uniquement les jeux pour lesquels aucun gagnant n'a été spécifié. En outre, vérifiez dans l'instruction de mise à jour que le gagnant n'a pas déjà été spécifié.

+0

Merci pour la réponse. Définir win = win + 1 est bon à savoir. Pour les soumissions en double, je veux laisser les utilisateurs être en mesure de mettre à jour le jeu juste au cas où ils l'ont fait mal la première fois .... De toute façon de le faire? +1 cependant. – FlyingCat

+0

@Jerry: Pour corriger, dans ces situations j'utiliserais un écran et une requête séparés. –

Questions connexes