Page 1 sur 1

Utilisation de formulaires dans des tupples SQL

Posté : 27 déc. 2011, 17:26
par hazaki
Bonjour,
Dans le cadre de la création d'un site informatique, je fais un module d'inscription, je crée donc une page qui permet à l'administrateur de recevoir les différentes demandes d'inscriptions préalablement mises dans une table et qu'il puisse valider ou refuser l’inscription.
La validation amène à la création d'un tupple dans la table utilisateur et la destruction de celui dans 'deminscription', le refus amène à la simple destruction du tupple contenu dans la table 'deminscription'.
Ce que j'ai fait ne marche pas, j'imagine que le problème vient de la création des formulaires avec un même nom dans la boucle
Voilà ce que j'ai, merci de m'aiguiller !

Code : Tout sélectionner

<?php $db_conn = mysql_connect("localhost","root","") or die (mysql_error()); mysql_select_db("lif4",$db_conn) or die (mysql_error()); ?> <html> <head> <title>Gestion des Inscriptions</title> </head> <body> <h2><center>Demandes d'Inscription</center></h2> <br> <?php $requete =" SELECT * FROM deminscription"; $resultat = mysql_query($requete) or die(mysql_error()); print "<ul>\n"; while ($nuplet = mysql_fetch_assoc($resultat)) { print "<li> ".$nuplet['nom']." ".$nuplet['prenom']." ".$nuplet['login']." ".$nuplet['motdepasse']." ".$nuplet['type']; print "</li>"; print '<form method="POST" action="Inscription.php"> <input type="submit" name="Valide" Value="Valider"> <input type="submit" name="Refus" Value="Refuser"> '; } print "</ul>"; if( !empty($_POST['Refus']) ){ $nom=$_POST['nom']; $requete=" DELETE FROM deminscription WHERE nom = '".$nom."' "; $resultat = mysql_query($requete) or die(mysql_error()); } if( !empty($_POST['Valide']) ){ $nom=$_POST['nom']; $prenom=$_POST['prenom']; $login=$_POST['login']; $motdepasse=$_POST['motdepasse']; $type=$_POST['type']; $requete=" INSERT INTO utilisateur(nom,prenom,login,password,usager) Values ('".$nom."', '".$prenom."','".$login."','".$motdepasse."','".$type."') "; $resultat = mysql_query($requete) or die(mysql_error()); $requete =" DELETE FROM deminscription WHERE nom = '".$nom."' "; $resultat = mysql_query($requete) or die(mysql_error()); } ?> </body> </html>

Re: Utilisation de formulaires dans des tupples SQL

Posté : 27 déc. 2011, 17:45
par xTG
$nom=$_POST['nom'];
   $prenom=$_POST['prenom'];
   $login=$_POST['login'];
   $motdepasse=$_POST['motdepasse'];
   $type=$_POST['type'];
Cela vient d'où ça ? ^^
Tu n'as aucun formulaire envoyant ces valeurs. ;)

Mais le mieux serait d'envoyer grâce au formulaire la valeur de la clé primaire du tuple et de refaire une requête avant l'update pour récupérer les données.

Re: Utilisation de formulaires dans des tupples SQL

Posté : 27 déc. 2011, 17:49
par hazaki
ah oui, t'as raison !
et comment je fais ça ?

Re: Utilisation de formulaires dans des tupples SQL

Posté : 27 déc. 2011, 18:50
par xTG
Tu inclus dans ton formulaire un champ caché par exemple :
echo '<input type="hidden" name="id" Value="' . $tuple['id'] . '">';

Re: Utilisation de formulaires dans des tupples SQL

Posté : 27 déc. 2011, 19:27
par hazaki
D'accord mais comment je fais pour avoir la valeur de clé primaire ?

Re: Utilisation de formulaires dans des tupples SQL

Posté : 27 déc. 2011, 19:37
par xTG
Question... Tu as une clé primaire dans ton schéma de table ?
Ou bien c'est une table avec des données en vrac ?

Re: Utilisation de formulaires dans des tupples SQL

Posté : 27 déc. 2011, 19:46
par hazaki
C'est une table avec des données en vrac !
Mais je peux en mettre une si besoin est !

Re: Utilisation de formulaires dans des tupples SQL

Posté : 28 déc. 2011, 11:01
par hazaki
Voilà, c'est fait, je fais quoi maintenant ?

Re: Utilisation de formulaires dans des tupples SQL

Posté : 28 déc. 2011, 11:32
par xTG
Tu rajoutes le champ hidden avec l'id (ou bien tu le passes via la méthode GET dans l'url si tu préfères utiliser un lien plutôt qu'un formulaire).
Tu le récupères sur ton script de traitement et tu exécutes une requête pour récupérer les informations du tuple.
SELECT tesChamps FROM taTableDinscriptionEnAttente WHERE id = taVariableIdRécupérée
Puis tu fais ton INSERT avec le retour de la requête.
Ainsi c'est bien plus sûr et évite les erreurs de traitement.

Et saches qu'une table devrait toujours posséder une clé primaire, même si elle ne représente rien de cohérent avec les informations de son tuple.
Car lors d'une recherche ou d'une sélection la clé primaire qui est indexée permet une vitesse de traitement bien plus conséquente qu'avec des champs non indexés.

Re: Utilisation de formulaires dans des tupples SQL

Posté : 28 déc. 2011, 11:54
par hazaki
Ok, merci pour l'aide, entre temps, j'ai fait ça, qu'en penses tu ?

Code : Tout sélectionner

$i=0; $requete =" SELECT * FROM deminscription"; $resultat = mysql_query($requete) or die(mysql_error()); print "<ul>\n"; while ($nuplet = mysql_fetch_assoc($resultat)) { print "<li> ".$nuplet['nom']." ".$nuplet['prenom']." ".$nuplet['login']." ".$nuplet['motdepasse']." ".$nuplet['type']; $nom[$i]=$nuplet['nom']; $prenom[$i]=$nuplet['prenom']; $login[$i]=$nuplet['login']; $motdepasse[$i]=$nuplet['motdepasse']; $type[$i]=$nuplet['type']; $i++; print "</li>"; print '<form method="POST" action="Inscription.php"> <input type="submit" name="Valide" Value="Valider"> <input type="submit" name="Refus" Value="Refuser"> '; } print "</ul>"; if( !empty($_POST['Refus']) ){ $requete=" DELETE FROM deminscription WHERE nom = '".$nom[$i]."' "; $resultat = mysql_query($requete) or die(mysql_error()); echo "pas lol"; } if( !empty($_POST['Valide']) ){ echo "lol"; $requete=" INSERT INTO utilisateur(nom,prenom,login,password,usager) Values ('".$nom[$i]."', '".$prenom[$i]."','".$login[$i]."','".$motdepasse[$i]."','".$type[$i]."') "; $resultat = mysql_query($requete) or die(mysql_error()); $requete =" DELETE FROM deminscription WHERE nom = '".$nom[$i]."' "; $resultat = mysql_query($requete) or die(mysql_error()); } ?>
Le problème est que chaque bouton de chaque tuple à le même nom, je ne sais pas comment faire pour le faire dépendre de la variable $i !

Re: Utilisation de formulaires dans des tupples SQL

Posté : 28 déc. 2011, 12:03
par xTG
Quand tu insères des données dans une requête utilises la fonction mysql_real_escape_string() pour protéger les caractères spéciaux et éviter une erreur SQL.
Sinon ton histoire de $i revient au même que le traitement avec une clé primaire puisque ton indice i référence un seul et unique tuple, donc relis mon post.
Enfin si tu ne comptes pas faire une redirection à la fin de chaque requête il serait préférable de faire le traitement avant l'affichage, car sinon tu vas avoir une liste qui ne sera pas à jour. ;)

Re: Utilisation de formulaires dans des tupples SQL

Posté : 28 déc. 2011, 12:13
par hazaki
Ah oui en effet, va falloir que je fasse une redirection.
Mais par contre je sais pas comment faire pour donner des noms différents aux différents formulaires type = submit !

Re: Utilisation de formulaires dans des tupples SQL

Posté : 28 déc. 2011, 13:10
par xTG
C'est à dire ? Car tu leur donne déjà un attribut name différent dans ton code.