Page 1 sur 2

Validation par admin des donnée d'un formulaire

Posté : 07 mai 2005, 10:50
par sebf
Bonjours les phpman :) ,

Voilà, mes membres remplissent des formulaires qui sont stocké dans des tables mysql. (valid=0 car fichier non validé encore)

Ensuite, si ces données sont exacte, je valide le formulaire (valid=1)

Je fais helas ca a partir de phpmyadmin , donc, c'est long et fastidieux.
Comment faire, a partir de la page qui m'affiche tous les champs non validé, un petit bouton pour pouvoir valider ces champs ?

Voici mon code pour voir les infos :
$sql = 'SELECT id, date, user, circuit, auto, min, sec, mil, tot_mil, style, console, pays, valid FROM a_gt3 WHERE valid=0';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

echo '<table CELLPADDING="1" CELLSPACING="1">';
echo '<tr><td>ID</td><td WIDTH=120><B>Pilote (circuit)</B></td><td><b>Voiture</b></td><td WIDTH=80><B>Temps</B></td><td></td><tr>';

while($data = mysql_fetch_assoc($req))
    {
    // on affiche les informations de l'enregistrement en cours
$data['valid'] = str_replace("0","<img src=\"http://www.racegamers.com/modules/Home/images/non.gif\">",$data['valid']);
$b = $a++;
echo '<tr><td>'.$data['id'].'</td><td><a href=http://www.racegamers.com/modules/My_Uploads/user_folders/'.$data['user'].'>'.$data['user'].' </a> ( '.$data['circuit'].' )</td><td>'.$data['auto'].'</td><td>'.$data['min'].'\''.$data['sec'].'"'.$data['mil'].'</td>';
	echo '<td>'.$data['valid'].'</td></tr>';
    }


echo '</table>';
Merci beaucoup d'avance :wink:

Posté : 07 mai 2005, 12:17
par Cyrano
Salut,
au lieu de faire afficher le résultat de ta requête SELECT dans un tableau, fais le afficher dans un formulaire. Le bouton [Soumettre] te permettra d'envoyer les données vers la validation et l'enregistrement dans la base. Tu peux faire tout ça dans la même page éventuellement en testant au chargement si le bouton [Soumettre] a été cliqué pour adapter le contenu, soit formulaire avec les données soit le résultat de ta validation.

Posté : 07 mai 2005, 12:21
par Invité
Salut,
au lieu de faire afficher le résultat de ta requête SELECT dans un tableau, fais le afficher dans un formulaire. Le bouton [Soumettre] te permettra d'envoyer les données vers la validation et l'enregistrement dans la base. Tu peux faire tout ça dans la même page éventuellement en testant au chargement si le bouton [Soumettre] a été cliqué pour adapter le contenu, soit formulaire avec les données soit le résultat de ta validation.
ah oui, l'idée est tres bonne :)

en pratique, je fais comment ma requette pour afficher ca sous forme de fomulaire ? (sorry, j'y connais pas grand chose en php ...)

1000000000000 MERCI d'avance :wink:

Posté : 07 mai 2005, 12:36
par Cyrano
Ta requête est déjà faite si j'en juge par ton bout de code: il te reste à construire un formulaire en HTML et à insérer les valeurs récupérées dans les champs de saisies. Ça présentera en outre l'avantage de les rendre modifiables avant validation, mais il est également possible de rendre certaines zones non modifiables avec l'attribut readonly.

Ensuite, il faut rajouter la partie validation et dans cette partie, selon le résultat, le ré-affichage du formulaire avec des messages appropriés ou bien la requête d'insertion dans la base de données et un message avisant de la réussite ou de l'échec de l'opération.

Posté : 07 mai 2005, 14:12
par sebf
ok, merci beaucoup :wink:

je suis en train de faire ca, mais j'ai un soucis avec les nom qui ont des espaces (honda civic mugen type 2 , par ex, ca me donne que honda, c'est a dire que le 1er mot)
echo '<form action=\"gt3.php\" method=\"post\">';
echo '<input type=\"text\" name=\"id\" value='.$data['id'].' readonly>';
echo '<input type=\"text\" name=\"user\" value='.$data['user'].' readonly>';
echo '<input type=\"text\" name=\"circuit\" value='.$data['circuit'].' readonly>';
echo '<input type=\"text\" name=\"auto\" value='.$data['auto'].' readonly>';
echo '<input type=\"text\" name=\"min\" size=\"3\" value='.$data['min'].' readonly>';
echo '<input type=\"text\" name=\"sec\" size=\"3\" value='.$data['sec'].' readonly>';
echo '<input type=\"text\" name=\"mil\" size=\"3\" value='.$data['mil'].' readonly>';
c'est quoi le probleme ? comprends pas moi là
:?

Posté : 07 mai 2005, 14:19
par Cyrano
Deux questions :
-1- Pourquoi fais-tu générer inutilement du HTML par PHP ?? toutes ces lignes echo 'code html' sont une charge supplémentaire complètement inutile pour le serveur, tu peux fermer la balise PHP "?>", mettre du HTML normal et rouvrir <?php ensuite. Quand tu veux juste mettre une variable, tu insères un <? echo $variable; ?> au milieu de ta ligne html.

-2- As-tu vérifié dans ta base de donnée si tes données n'avaient pas été tronquées à l'enregistrement ?

Posté : 07 mai 2005, 14:24
par sebf
1 : ok (desolé, j'apprends)

2 : oui, elles ne sont pas tronqué dans la BD
YamauchiGT4 Tokyo Route 246 Honda Takata Dome NSX 03

or moi, j'ai :
YamauchiGT4 Tokyo Honda

Posté : 07 mai 2005, 14:26
par Cyrano
Bizarre : essaye d'élargir tes cases de formulaire, le reste du texte est peut-être au delà de la zone visible... :?:

Posté : 07 mai 2005, 14:33
par sebf
Bizarre : essaye d'élargir tes cases de formulaire, le reste du texte est peut-être au delà de la zone visible... :?:
c'est fait, et c'est idem .....
de plus, le bouton "envoyer" ne veux pas s'afficher (il se met en case)

il doit y avoir un bug qq part
$sql = 'SELECT id, date, user, circuit, auto, min, sec, mil, tot_mil, style, console, pays, valid FROM a_gt3 WHERE valid=0';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 


while($data = mysql_fetch_assoc($req))
    {

echo '<form action="gt3.php" method="post">
<input type="text" name="id" value='.$data['id'].' readonly>
<input type="text" name="user" value='.$data['user'].' readonly>
<input type="text" name="circuit" value='.$data['circuit'].' readonly>
<input type="text" name="auto" value='.$data['auto'].' readonly>
<input type="text" name="min" size="3" value='.$data['min'].' readonly>
<input type="text" name="sec" size="3" value='.$data['sec'].' readonly>
<input type="text" name="mil" size="3" value='.$data['mil'].' readonly>
<input type="submit" value="Envoyer" name="envoyer"></form><br>';
    }
mais ou est ce bug ? grhhh :twisted:

Posté : 07 mai 2005, 14:47
par Cyrano
On va essayer quelque chose, parce que ton formulaire en boucle, ça peut générer des bizarreries.

Essaye comme ceci, ça va limiter à un à la fois :
<?php
$sql = 'SELECT id, date, user, circuit, auto, min, sec, mil, tot_mil, style, console, pays, valid FROM a_gt3 WHERE valid=0 LIMIT 0,1';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());


$data = mysql_fetch_assoc($req)
?>
<form action="gt3.php" method="post">
  <input type="text" name="id" value="<?php echo($data['id']); ?>" readonly="readonly">
  <input type="text" name="user" value="<?php echo($data['user']); ?>" readonly="readonly">
  <input type="text" name="circuit" value="<?php echo($data['circuit']); ?>" readonly="readonly">
  <input type="text" name="auto" value="<?php echo($data['auto']); ?>" readonly="readonly">
  <input type="text" name="min" size="3" value="<?php echo($data['min']); ?>" readonly="readonly">
  <input type="text" name="sec" size="3" value="<?php echo($data['sec']); ?>" readonly="readonly">
  <input type="text" name="mil" size="3" value="<?php echo($data['mil']); ?>" readonly="readonly">
  <input type="submit" value="Envoyer" name="envoyer" />
</form>
<br />
Pour mon confort de lecture, j'ai remis le code comme il devrait être en séparant HTML et PHP ;)

Posté : 07 mai 2005, 15:42
par sebf
ok, là, j'ai bien le nom en entier qui s'affiche :wink:

mais comment afficher maintenant tous mes champs vu que l'on ne fais plus la boucle ?
là, je n'ai plus que le 1er enregistrement, et il me manque tous les autres ...

Posté : 07 mai 2005, 15:53
par Cyrano
Le problème en affichant toutes les lignes, c'est que tu vas avoir plusieurs fois des champs de formulaire avec le même nom : bonjour la galère pour la validation.

Pour régler ce problème, tu dois gérer dynamiquement le nom de ces champs. Mets un pointeur $i = 1 juste avant la boucle et à chaque tour, avant de fermer l'accolade, incrémente le pointeur $i++

Ensuite, tes noms de champs devront ressembler à ceci:
<input name="nomduchamp<?php echo($i); ?>" value="etc...
Comme ça, les noms de champs seront distingable les uns des autres.

Mais si tu n'as pas une quantité astronomique de lignes à valider, est-ce bien nécessaire de les faire en bloc ? De toute façon, de la manière dont tu as procédé, tu as plusieurs formulaires, mais tu ne peux en valider qu'un seul à la fois puisque chacun a son propre bouton submit. Pour que ça marche, il faudrait que tu n'aies qu'un seule et unique formulaire contenant toutes les lignes, donc sortir les balises <form> et le bouton submit de la boucle.

Posté : 07 mai 2005, 16:18
par sebf
le probleme, c'est que j'ai de 3 à 20 lignes a valider tous les jours ....

donc, le mieux, c'est peut etre en effet de sortir de formulaire ?! non ?!

et je fais comment ? grhhhh §§!! ca m'enerve d'etre aussi nul :cry:

Posté : 07 mai 2005, 16:30
par Cyrano
à mon humle avis, pour trois à vingt lignes, fais les une par une. à vue de nez, il te faut entre 20 et 35 seconde pour traiter et valideer une ligne, un autre 5 secondes pour la validation et retour au formulaire et on recommance: metton une minute en prenant le temps: 20 lignes, 20mn.

Le temps gagné en faisant un seul formulaire global ne sera pas significatif à ce niveau là à mon avis parce que source d'erreurs, ce qui augmentera en fin de compte ta charge de travail.

En fin de validation, rien n'interdit le retour à la liste de validation automatique, te dispensant de devoir cliquer de lien en lien pour revenir valider un autre choix.

Si tu y tiens quand même :
<?php
$sql = 'SELECT id, date, user, circuit, auto, min, sec, mil, tot_mil, style, console, pays, valid FROM a_gt3 WHERE valid=0';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$i = 1;
?>
<form action="gt3.php" method="post">
<?php
while($data = mysql_fetch_assoc($req))
{
?>
  <input type="text" name="id<?php echo($i); ?>" value="<?php echo($data['id']); ?>" readonly="readonly">
  <input type="text" name="user<?php echo($i); ?>" value="<?php echo($data['user']); ?>" readonly="readonly">
  <input type="text" name="circuit<?php echo($i); ?>" value="<?php echo($data['circuit']); ?>" readonly="readonly">
  <input type="text" name="auto<?php echo($i); ?>" value="<?php echo($data['auto']); ?>" readonly="readonly">
  <input type="text" name="min<?php echo($i); ?>" size="3" value="<?php echo($data['min']); ?>" readonly="readonly">
  <input type="text" name="sec<?php echo($i); ?>" size="3" value="<?php echo($data['sec']); ?>" readonly="readonly">
  <input type="text" name="mil<?php echo($i); ?>" size="3" value="<?php echo($data['mil']); ?>" readonly="readonly">
<?php
    $i++
}
?>
  <input type="hidden" name="nombrelignes" value="<?php echo($i); ?>" />
  <input type="submit" value="Envoyer" name="envoyer" />
</form>
<br />
Regarde ce que ça donne.

Posté : 07 mai 2005, 18:39
par sebf
Ok,100000000000000000 merci de ton aide deja :wink:
c'est super sympa !!!!!! :) :wink:

bon, on garde avec un formulaire pour le moment.

j'ai donc fait un fichier qui devrait valider ensuite :
<?
// On commence par récupérer les champs
$id=$_POST['id'];


$db = mysql_connect('sql3', '', '');
mysql_select_db('',$db);

$sql = "UPDATE a_gt3 SET valid='1' WHERE id = '$id'";

echo "Vos infos on été ajoutées.<br> ";

?>
soucis, ca me marque bien que mes infos on été ajouté, mais dans la table de ma DB, rien, le champ valid reste = 0

Pourquoi ?