Pbl d'envois multiple dans le même formulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pbl d'envois multiple dans le même formulaire

par alaingpl » 27 févr. 2009, 12:32

Voici l'adresse où vous pouvez télécharger le fichier.


http://www.restoprof.fr/fichier_rar.html


Je ne pourrai pas suivre le topic car je dois m'absenter toute la semaine prochaine et la où je vais je n'ai pas de connexion Internet.

Merci encore de toute votre aide.

par sylvaing26 » 27 févr. 2009, 11:04

Envoie le zip sur ton serveur web et donne nous le lien :wink:

par alaingpl » 27 févr. 2009, 00:37

Je ne sais pas comment envoyer l'archive par le forum ?? Non plus par le mp ??

par thehawk » 26 févr. 2009, 23:50

tu peux me faire un fichier ZIP contenant les infos (script + sql) que je test en local :)

par alaingpl » 26 févr. 2009, 23:47

La page de traitement correspond bien à index.php?page=verif_evals.php et quand je fais
echo"<pre>"; 
print_r($_POST); 
echo"</pre>";
La page est vide, toute blanche, par contre quand je fais
echo $classe ;
echo $nom ;
echo $note ;
echo $matiere ;
echo $periode ;
echo $prenom ;
seule les variables $matière et $ periode s'affichent. Elles viennent du select dans le formulaire de la page précédente
Je n'arrive pas à saisir d'où vient le pbl. J'ai modifié le code plusieurs fois, essayé pas mal de chose, mais rien de rien. Là je suis " out ".

par thehawk » 26 févr. 2009, 18:45

Au dela du souci technique , je ne vois pas de <form action='...' ></form> a moins que la page de traitement correspond a : index.php?page=verif_evals.php , désolé je prend le train en route ;)


Donc ensuite , si tu ne trouve pas , au tout début de ta page de reception des données
rajoute :
echo"<pre>";
print_r($_POST);
echo"</pre>";
Ce qui te permettra de voir les données entrante via la method="POST" de ton formulaire.

Bye Hawk

par alaingpl » 26 févr. 2009, 17:37

Oui le post se fait dans une autre page dont voici l'ensemble du code php ci dessous. je confirme que l'affichage des champs de la table <eleves> se fait correctement
<?PHP
if(isset($_POST['classe']))    $classe=$_POST['classe'];

//echo $classe ;

require('connect.php');

$sql= 'SELECT id, nom, prenom FROM eleves  WHERE classe="'.$classe.'" ORDER BY id ';

$req = mysql_query ($sql) or die ('Erreur : '.mysql_error() );


    // début du tableau
	echo 'Eleves de la classe '.$classe.'<br><br>' ;
?>
<form name="evals" action="index.php?page=verif_evals.php"  method="post">
<table>
	<tr>
		<td>
		<select name="matiere">
			<option value="">Sélectionnez une matière</option>
			<option value="francais">Français</option>
			<option value="maths">Mathématiques</option>
			<option value="anglais">Anglais</option>
		</select>
			
		</td>
		<td></td>
		<td>
		<select name="periode">
			<option value="">Sélectionnez une période</option>
			<option value="septembre">Septembre</option>
			<option value="octobre">Octobre</option>
			<option value="novembre">Novembre</option>
			<option value="décembre">Décembre</option>
			<option value="janvier">Janvier</option>
			<option value="février">Février</option>
			<option value="mars">Mars</option>
			<option value="avril">Avril</option>
			<option value="mai">Mai</option>
			<option value="juin">Juin</option>
		</select>
			
		</td>
	</tr>
</table>
<br><br>
<?PHP
	
    echo '<table bgcolor="#FFFFFF" border=\"1\">'."\n";
       //1ere ligne on on affiche les titres
        echo '<tr>';
        echo '<td bgcolor="#669999"><center><b><u>Nom</u></b></center></td>';
        echo '<td bgcolor="#669999"><center><b><u>Prénom</u></b></center></td>';
		echo '<td>Notes</td>';
        echo '</tr>'."\n";
		
    // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
  while($row = mysql_fetch_array($req)) {  
        echo '<tr>';  
    //input des nom et prénom  
        echo '<td ><center><input name="nom_'.$row['id'].'" value='.$row['nom'].'></center></td>';  
        echo '<td><center><input  name="prenom_'.$row['id'].'" value="'.$row['prenom'].'"></center></td>';  
    //input des notes pour chaque élèves  
        echo '<td><center><input type="text" name="note_'.$row['id'].'">';  
    //input de la classe  
        echo '<input type="hidden" name=classe_'.$row['nom'].'" value="'.$classe.'">';
		echo '<input type="hidden" name=row" value="'.$row.'">';
        echo '</tr>'."\n";
    }
    echo '</table>'."\n";

    // fin du tableau.

mysql_close(); 
		}
?> 
et la page de traitement dans laquelle doit se faire l' INSERT dans la bd :
<?PHP
require('connect.php'); 
$sql= 'SELECT id, nom, prenom FROM eleves  WHERE classe="'.$classe.'" ORDER BY id ';  

    $req = mysql_query ($sql) or die ('Erreur : '.mysql_error() );  
    if(isset($_POST['nom_'.$row['nom'].'']))    $nom=$_POST['nom_'.$row['nom'].''];   
      
while($row = mysql_fetch_array($req))   
    {    
if(isset($_POST['nom_'.$row['nom'].'']))    $nom=$_POST['nom_'.$row['nom'].''];     
if(isset($_POST['prenom_'.$row['nom'].'']))    $prenom=$_POST['prenom_'.$row['nom'].''];     
if(isset($_POST['note_'.$row['nom'].'']))    $note=$_POST['note_'.$row['nom'].''];     
if(isset($_POST['classe_'.$row['nom'].'']))    $classe=$_POST['classe_'.$row['nom'].''];     
if(isset($_POST['matiere_'.$row['nom'].'']))    $matiere=$_POST['matiere_'.$row['nom'].''];     
if(isset($_POST['periode_'.$row['nom'].'']))    $periode=$_POST['periode_'.$row['nom'].''];     

 mysql_query("INSERT INTO note (id, classe, pseudo, $matiere, periode) VALUES ('', '$classe', '$nom', '$note', '$periode' )"); 

	}
	

echo $classe ;
echo $nom ;
echo $note ;
echo $matiere ;
echo $periode ;
echo $prenom ;

    mysql_close();  
     
	}

?>
et pour être sur que les champs de la table <note> pour l'insertion des données sont corrects ci dessous le code sql de la table

Code : Tout sélectionner

CREATE TABLE `note` ( `id` int(11) NOT NULL auto_increment, `classe` varchar(10) NOT NULL, `pseudo` varchar(25) NOT NULL, `francais` varchar(3) default NULL, `maths` varchar(3) default NULL, `anglais` varchar(3) NOT NULL, `techno_rest` varchar(3) default NULL, `aps_sc` varchar(3) default NULL, `aps_opc` varchar(3) default NULL, `periode` varchar(25) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ;
Là, j'ai tout mis en ligne. Mais l'insertion dans la base bd ne fonctionne pas. Je fais un echo des variables, seules celles des posts : matiere et periode sont lues. Elles ont 1 seule donnée chacune !!
Le pbl viendrais soit : les variables ou les input ou les post ne sont pas capables de lire un tableau (array). Cela ne reste qu'une supposition de ma part.
Si quelqu'un a une solution, merci pour d'avance.

par sylvaing26 » 26 févr. 2009, 16:18

le post se fait sur une autre page pour le traitement ?
dans ce cas dans l'autre page il faut aussi mettre
require('connect.php');
$sql= 'SELECT id, nom, prenom FROM eleves  WHERE classe="'.$classe.'" ORDER BY id '; 

    $req = mysql_query ($sql) or die ('Erreur : '.mysql_error() ); 
    if(isset($_POST['nom_'.$row['nom'].'']))    $nom=$_POST['nom_'.$row['nom'].''];  
     
while($row = mysql_fetch_array($req))  
    {   
if(isset($_POST['nom_'.$row['nom'].'']))    $nom=$_POST['nom_'.$row['nom'].''];    
if(isset($_POST['prenom_'.$row['nom'].'']))    $prenom=$_POST['prenom_'.$row['nom'].''];    
if(isset($_POST['note_'.$row['nom'].'']))    $note=$_POST['note_'.$row['nom'].''];    
if(isset($_POST['classe_'.$row['nom'].'']))    $classe=$_POST['classe_'.$row['nom'].''];    
if(isset($_POST['matiere_'.$row['nom'].'']))    $matiere=$_POST['matiere_'.$row['nom'].''];    
if(isset($_POST['periode_'.$row['nom'].'']))    $periode=$_POST['periode_'.$row['nom'].''];    

 mysql_query("INSERT INTO note (id, classe, pseudo, $matiere, periode) VALUES ('', '$classe', '$nom', '$note', '$periode' )"); 
 

par alaingpl » 26 févr. 2009, 15:19

Voici le code où j'inscrit les notes pour chacun des élèves. Là j'ai bien la bonne liste en fonction de la classe et les input en face de chaque nom pour y inscrire la note de chaque élève.
require('connect.php');

$sql= 'SELECT id, nom, prenom FROM eleves  WHERE classe="'.$classe.'" ORDER BY id ';

$req = mysql_query ($sql) or die ('Erreur : '.mysql_error() );

    // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
  while($row = mysql_fetch_array($req)) {  
        echo '<tr>';  
    //input des nom et prénom  
        echo '<td ><center><input name="nom_'.$row['id'].'" value='.$row['nom'].'></center></td>';  
        echo '<td><center><input  name="prenom_'.$row['id'].'" value="'.$row['prenom'].'"></center></td>';  
    //input des notes pour chaque élèves  
        echo '<td><center><input type="text" name="note_'.$row['id'].'">';  
    //input de la classe  
        echo '<input type="hidden" name=classe_'.$row['nom'].'" value="'.$classe.'">';
        echo '</tr>'."\n";
    }
    echo '</table>'."\n";

    // fin du tableau.

mysql_close(); 
		}
et je fais ceci à la réception
$sql= 'SELECT id, nom, prenom FROM eleves  WHERE classe="'.$classe.'" ORDER BY id ';

	$req = mysql_query ($sql) or die ('Erreur : '.mysql_error() );
	if(isset($_POST['nom_'.$row['nom'].'']))    $nom=$_POST['nom_'.$row['nom'].'']; 
	
while($row = mysql_fetch_array($req)) 
	{  
if(isset($_POST['nom_'.$row['nom'].'']))    $nom=$_POST['nom_'.$row['nom'].''];   
if(isset($_POST['prenom_'.$row['nom'].'']))    $prenom=$_POST['prenom_'.$row['nom'].''];   
if(isset($_POST['note_'.$row['nom'].'']))    $note=$_POST['note_'.$row['nom'].''];   
if(isset($_POST['classe_'.$row['nom'].'']))    $classe=$_POST['classe_'.$row['nom'].''];   
if(isset($_POST['matiere_'.$row['nom'].'']))    $matiere=$_POST['matiere_'.$row['nom'].''];   
if(isset($_POST['periode_'.$row['nom'].'']))    $periode=$_POST['periode_'.$row['nom'].''];   

$sql = "INSERT INTO note (id, classe, pseudo, $matiere, periode) VALUES ('', '$classe', '$nom', '$note', '$periode' )";
	}
et là, tout est vide, il n'y a rien. Pour vérifier, je fais des echo des variables

J'ai essayé d'autres solutions comme faire passer en POST la variable $row du while mais sans résultat

Je n'ai plus d'idée et d'avance merci pour votre aide

par thehawk » 26 févr. 2009, 11:40

et tu fais bien un mysql_query($sql); ?

par sylvaing26 » 26 févr. 2009, 10:42

Tu as bien rajouté MYSQL CONNECT .... $req= ..... dans l'autre page ? avant
while($row = mysql_fetch_array($req)) { 
if(isset($_POST['nom_'.$row['nom'].'']))    $nom=$_POST['nom_'.$row['nom'].''];  
if(isset($_POST['prenom_'.$row['nom'].'']))    $prenom=$_POST['prenom_'.$row['nom'].''];  
if(isset($_POST['note_'.$row['nom'].'']))    $note=$_POST['note_'.$row['nom'].''];  
if(isset($_POST['classe_'.$row['nom'].'']))    $classe=$_POST['classe_'.$row['nom'].''];  
if(isset($_POST['matiere_'.$row['nom'].'']))    $matiere=$_POST['matiere_'.$row['nom'].''];  
if(isset($_POST['periode_'.$row['nom'].'']))    $periode=$_POST['periode_'.$row['nom'].''];  

$sql = "INSERT INTO note (id, classe, pseudo, $matiere, periode) VALUES ('', '$classe', '$nom', '$note', '$periode' )";}
 

par alaingpl » 25 févr. 2009, 16:53

Merci pour les 2 derniers messages en ce qui concerne les injections sql et j'en tiendrai compte.

J'ai essayé plusieurs solutions en plus de c'elles de sylvaing26 mais aucun résultat, soit il ne lit ou ne réceptionne pas les
name ="nom_'.$row['id'].'" value='.$row['nom'].' 
Ce que je souhaite faire:
En fonction d'une liste d'élève inscrits dans une bd et de 2 contraintes : matière et période, enregistrer la note de chaque élève et envoyer toutes les notes en même temps.

Mon problème :
le code :
if(isset($_POST['nom']))    $nom=$_POST['nom']; 
enregistre dans la bd qu'une seule note (la dernière du tableau (mysql_fetch_array).
Pour résumer mon problème : Comment envoyer plusieurs infos dans une seule et même variable en fonction de plusieurs contraintes de nom, prénom...

Si quelqu'un sait comment il faut faire car la je suis à court d'idée.
D'avance merci

par Aureusms » 24 févr. 2009, 23:21

J'ai eu le cas cet après midi avec un update de password...

par Berzemus » 24 févr. 2009, 23:13

Et, genre, protéger les variables contre l'injection SQL ?

addslashes() , mysql_real_escape_string() , y'a le choix.

(je dis c'était pas encore mentionné, je me doute que tout le monde y pense, mais un rappel ne fait jamais de tort)

par sylvaing26 » 24 févr. 2009, 21:56

Oui car il fausdrai refaire appele à la requete sql
while($row = mysql_fetch_array($req)) { if(isset($_POST['nom_'.$row['nom'].'']))    $nom=$_POST['nom_'.$row['nom'].'']; 
if(isset($_POST['prenom_'.$row['nom'].'']))    $prenom=$_POST['prenom_'.$row['nom'].'']; 
if(isset($_POST['note_'.$row['nom'].'']))    $note=$_POST['note_'.$row['nom'].'']; 
if(isset($_POST['classe_'.$row['nom'].'']))    $classe=$_POST['classe_'.$row['nom'].'']; 
if(isset($_POST['matiere_'.$row['nom'].'']))    $matiere=$_POST['matiere_'.$row['nom'].'']; 
if(isset($_POST['periode_'.$row['nom'].'']))    $periode=$_POST['periode_'.$row['nom'].'']; 

$sql = "INSERT INTO note (id, classe, pseudo, $matiere, periode) VALUES ('', '$classe', '$nom', '$note', '$periode' )";}
Quelque chose de ce gout là