Validation par admin des donnée d'un formulaire

sebf
Invité n'ayant pas de compte PHPfrance

07 mai 2005, 10:50

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:

Mammouth du PHP | 19672 Messages

07 mai 2005, 12:17

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

07 mai 2005, 12:21

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:

Mammouth du PHP | 19672 Messages

07 mai 2005, 12:36

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

sebf
Invité n'ayant pas de compte PHPfrance

07 mai 2005, 14:12

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à
:?

Mammouth du PHP | 19672 Messages

07 mai 2005, 14:19

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

sebf
Invité n'ayant pas de compte PHPfrance

07 mai 2005, 14:24

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

Mammouth du PHP | 19672 Messages

07 mai 2005, 14:26

Bizarre : essaye d'élargir tes cases de formulaire, le reste du texte est peut-être au delà de la zone visible... :?:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

sebf
Invité n'ayant pas de compte PHPfrance

07 mai 2005, 14:33

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:

Mammouth du PHP | 19672 Messages

07 mai 2005, 14:47

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 ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

sebf
Invité n'ayant pas de compte PHPfrance

07 mai 2005, 15:42

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 ...

Mammouth du PHP | 19672 Messages

07 mai 2005, 15:53

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

sebf
Invité n'ayant pas de compte PHPfrance

07 mai 2005, 16:18

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:

Mammouth du PHP | 19672 Messages

07 mai 2005, 16:30

à 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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

sebf
Invité n'ayant pas de compte PHPfrance

07 mai 2005, 18:39

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 ?