update multi formulaire

nasdrovia70
Invité n'ayant pas de compte PHPfrance

26 avr. 2009, 00:05

Bonjour, mon problème est le suivant j'ai un formulaire de modification de table qui marche très bien et qui met a jour la table.
j'ai fait une boucle qui me donne plusieurs fiche a modifié sous forme de tableau

Code : Tout sélectionner

jour commande modèle ** ****** *** ** ****** ****
je n'arrive pas a mettre a jour plus d'une fiche en même temps

Mammouth du PHP | 881 Messages

26 avr. 2009, 18:34

Montre ton code, nous verrons mieux et ... (qui sait?) peut-être comprendrons-nous.
Soyez artisans de paix

nasdrovia70
Invité n'ayant pas de compte PHPfrance

26 avr. 2009, 21:47

jèai un formulaire de recherche qui tombe sur les résultat a modifié.
<?php
//paramètres de la base
$serveur="localhost";
$util="root";
$mpasse="";
$base="stocks";
// connexion au serveur Mysql
$lien=mysql_connect($serveur,$util,$mpasse);
// connexion à la base de données
mysql_select_db($base);
// réccupération des données du formulaire
$recherche=strip_tags($_POST['recherche']);
// Vérification du formulaire
$err=0;
$erreur="Votre formulaire est invalide...\n\n";
	if (!$recherche)
	{
	$erreur=$erreur."Vous devez saisir quelque chose.\n\n";
	$err=1;
	}
// Affichage en cas d'erreur
	if ($err==1)
	{
	echo "<font size='4'><b>Attention</font></b><br /><br /> ";
	$texte=nl2br($erreur);
	echo "<font size='3'>$texte</font><br /> ";
	echo "<br><br><a href='recherche.php'>Recommencer</a> ";
	}
	
	else
// Traitement si le formulaire est ok
	{
// déclaration de la fonction
		echo "<form action='modifier2.php' name='effacer' method='post'><input type='hidden' name='fiche' value='$fiche' />";
		echo "<table border='1' bordercolor='yellow' width='4010'>
						<tr>
							<td width='50'></td>
							<td width='300'><font color ='white'>ID</font></td>
							<td width='300'><font color ='white'>jour</font></td>
							<td width='300'><font color ='white'>commande</font></td>
							<td width='300'><font color ='white'>produit</font></td>
							<td width='300'><font color ='white'>marque</font></td>
							<td width='300'><font color ='white'>designation</font></td>
							<td width='300'><font color ='white'>sequence</font></td>
							<td width='300'><font color ='white'>etat</font></td>
							<td width='300'><font color ='white'>commentaire</font></td>
							<td width='300'><font color ='white'>serie</font></td>
							<td width='300'><font color ='white'>date</font></td>
							<td width='300'><font color ='white'>affectation</font></td>
							<td width='300'><font color ='white'>nom</font></td>
						</tr>
					</table>";
				
		
		
				
  function trouve($ch,$mot)
  	    {			
		$reponse = mysql_query("SELECT * FROM Pcs WHERE $ch='$mot'");
				
			while ($donnees = mysql_fetch_array($reponse))
			{
				
			$id = $donnees['id'];
			$jour = $donnees['jour'];
			$commande = $donnees['commande'];
			$produit = $donnees['produit'];
			$marque = $donnees['marque'];
			$designation = $donnees['designation'];
			$sequence = $donnees['sequence'];
			$etat = $donnees['etat'];
			$commentaire = $donnees['commentaire'];
			$serie = $donnees['serie'];
			$date = $donnees['date'];
			$affectation = $donnees['affectation'];
			$nom = $donnees['nom'];
						
					echo "<table border='1' bordercolor='yellow' width='4010'>
							<tr>
							<td width='300'><font color ='white'><input type='text' name='id' value='$id' size='10' /></font></td>
								<td width='300'><font color ='white'><input type='text' name='jour' value='$jour' size='50' /></font></td>
								<td width='300'><font color ='white'><input type='text' name='commande'	value='$commande' size='50'</font></td>
								<td width='300'><font color ='white'><input type='text' name='produit' value='$produit'	size='50'</font></td>
								<td width='300'><font color ='white'><input type='text' name='marque' value='$marque' size='50'</font></td>
								<td width='300'><font color ='white'><input type='text' name='designation' value='$designation'	size='50'</font></td>
								<td width='300'><font color ='white'><input type='text' name='sequence' value='$sequence' size='50'<font></td>
								<td width='300'><font color ='white'><input type='text' name='etat'	value='$etat' size='50'<font></td>
								<td width='300'><font color ='white'><input type='text' name='commentaire' value='$commentaire'	size='50'/font></td>
								<td width='300'><font color ='white'><input type='text' name='serie' value='$serie'	size='50'<font></td>
								<td width='300'><font color ='white'><input type='text' name='date'	value='$date' size='50'<font></td>
								<td width='300'><font color ='white'><input type='text' name='affectation' value='$affectation'	size='50'/font></td>
								<td width='300'><font color ='white'><input type='text' name='nom' value='$nom'	size='50'<font></td>
							</tr>
					</table>";
				
			
			}		
		
		}
	
	
	trouve("id",$recherche);
	trouve("jour",$recherche);	
	trouve("commande",$recherche);
	trouve("marque",$recherche);
	trouve("produit",$recherche);
	trouve("designation",$recherche);
	trouve("sequence",$recherche);
	trouve("etat",$recherche);
	trouve("commentaire",$recherche);
	trouve("serie",$recherche);
	trouve("date",$recherche);
	trouve("affectation",$recherche);
	trouve("nom",$recherche);
	echo "<input type='submit' name='envoyer' value='Modifier le contact' /></form>";
	}
	
	
mysql_close(); // Déconnexion de MySQL
?>
et la mon essai d'actualisation de la table lol.
<?php
//paramètres de la base
$serveur="localhost";
$util="root";
$mpasse="";
$base="stocks";
// connexion au serveur Mysql
$lien=mysql_connect($serveur,$util,$mpasse);
// connexion à la base de données
mysql_select_db($base);
// réccupération des données du formulaire
$jour=strip_tags($_POST['jour']);
$commande=strip_tags($_POST['commande']);
$produit=strip_tags($_POST['produit']);
$marque=strip_tags($_POST['marque']);
$designation=strip_tags($_POST['designation']);
$sequence=strip_tags($_POST['sequence']);
$etat=strip_tags($_POST['etat']);
$commentaire=strip_tags($_POST['commentaire']);
$serie=strip_tags($_POST['serie']);
$date=strip_tags($_POST['date']);
$affectation=strip_tags($_POST['affectation']);
$nom=strip_tags($_POST['nom']);


if(is_array($_POST['id'])) {  
    
		foreach($_POST['id'] as $k=>$val)
			{   
mysql_query("DELETE FROM Pcs jour='$jour', commande='$commande', produit='$produit', marque='$marque', designation='$designation', sequence='$sequence', etat='$etat', commentaire='$commentaire', serie='$serie', date='$date', affectation='$affectation', nom='$nom' WHERE id='$val'");
			}
			mysql_close(); // Déconnexion de MySQL
			echo "<meta http-equiv='refresh' content='1; url=index.php'>";  // redirection vers l'index
		      } 

else 
	{  
	mysql_close(); // Déconnexion de MySQL
	echo "<meta http-equiv='refresh' content='5; url=index.php'>"; 
	echo "erreur dans le formulaire !"; 
	}	

?>


nasdrovia70
Invité n'ayant pas de compte PHPfrance

26 avr. 2009, 21:52

c'est UPDATE pas DELETE je me suis trompé, si quelqu'un a la solution.

ViPHP
AB
ViPHP | 5818 Messages

26 avr. 2009, 22:11

On ne peut pas faire directement des update sur plusieurs lignes dans une même table en une seule requête (sauf si plusieurs lignes répondent à la même clause where).
Donc tu peux faire une boucle sur tes update mais une autre solution dans ton cas serait peut-être d'utiliser la syntaxe INSERT INTO ... ON DUPLICATE KEY UPDATE ce qui te permettrait de n'effectuer qu'une seule requête. A voir si tu nous en dit plus.

EDIT Oup's j'avais pas vu ta réponse ...

ViPHP
AB
ViPHP | 5818 Messages

26 avr. 2009, 22:17

Quand tu souhaites faire une redirection en php fait le avec un header

EDIT Et puis on n'utilise pas strip_tags pour protéger des données dans les requêtes mais mysql_real_escape_string()

ViPHP
AB
ViPHP | 5818 Messages

26 avr. 2009, 23:02

Oui en regardant le formulaire tu as un pb puisque tu nomme tes champs toujours de la même manière donc si tu fais une boucle, les nouveaux champs écrasent les anciens. Il faut les récupérer dans un tableau donc faire name= jour[] à la place de name= jour.
Ensuite tu auras les résultats dans $_POST['jour'] (qui sera un tableau) et de même pour les autres champs...

nasdrovia70
Invité n'ayant pas de compte PHPfrance

27 avr. 2009, 08:55

Je ne comprend pas trop mes champs on le même nom mais chaque ligne a son id propre donc ou est le problème

ViPHP
AB
ViPHP | 5818 Messages

27 avr. 2009, 17:31

Oui j'arrive pas à comprendre ta logique...
Essaies de me donner un exemple simple de ce que tu veux générer comme code html pour faire ton update sur plusieurs lignes, c'est à dire à quoi ressemblerait le code source de ta page concernant plus particulièrement le formulaire.

nasdrovia70
Invité n'ayant pas de compte PHPfrance

27 avr. 2009, 21:07

j'ai le même problème pour insèrer plusieurs ligne de données.
J'ai un formulaire ou je peux choisir le nombre de fiche a insèrer dans la base je choisi,j'envoi si il y en a qu'un ça l'ajoute,si il y en a plusieurs ça m'emmène sur cette page
<?php   
					
//paramètres de la base
$serveur="localhost";
$util="root";
$mpasse="";
$base="stocks";
// connexion au serveur Mysql
$lien=mysql_connect($serveur,$util,$mpasse);
// connexion à la base de données
mysql_select_db($base);
// réccupération des données du formulaire

$nb_fiches=strip_tags($_POST['nb_fiches']);
$jour=strip_tags($_POST['jour']);
$commande=strip_tags($_POST['commande']);
$produit=strip_tags($_POST['produit']);
$marque=strip_tags($_POST['marque']);
$designation=strip_tags($_POST['designation']);
$sequence=strip_tags($_POST['sequence']);
$etat=strip_tags($_POST['etat']);
$commentaire=strip_tags($_POST['commentaire']);
$serie=strip_tags($_POST['serie']);
$date=strip_tags($_POST['date']);
$affectation=strip_tags($_POST['affectation']);
$nom=strip_tags($_POST['nom']);
$dt= date("d/m/Y");
$dt2= date("Y");	
							
							
								
	if ($nb_fiches=="")
				
		{

// Ajout d'une nouvelle fiche à la table user
mysql_query("INSERT INTO Pcs VALUES(NULL,'$jour','$commande','$produit','$marque','$designation','$sequence','$etat','$commentaire','$serie','$date','$affectation','$nom')");
echo "<meta http-equiv='refresh' content='1; url=index.php'>";
mysql_close(); // Déconnexion de MySQL
		}

					 
								
	else	{
echo "	
<font color='white' size='5'><center><b>Ajouterunefiche</b></center></font><br /><br />";
echo "<table border='1' bordercolor='yellow' width='4050'>
	<tr>
	<td width='50'><font color ='white'>n°</font></td>
	<td width='300'><font color ='white'>jour</font></td>
	<td width='300'><font color ='white'>commande</font></td>
	<td width='300'><font color ='white'>produit</font></td>
	<td width='300'><font color ='white'>marque</font></td>
	<td width='300'><font color ='white'>designation</font></td>
	<td width='300'><font color ='white'>sequence</font></td>
	<td width='300'><font color ='white'>etat</font></td>
	<td width='300'><font color ='white'>commentaire</font></td>
	<td width='300'><font color ='white'>serie</font></td>
	<td width='300'><font color ='white'>date</font></td>
	<td width='300'><font color ='white'>affectation</font></td>
	<td width='300'><font color ='white'>nom</font></td>
          </tr>
</table>";
				
							
	
for($i=1;$i<=$nb_fiches;$i++)
	{ 
	$nb=$i;
	$sequence=$nb_fiches;
echo " <form action='ajout3.php' name='nb_fiches[]' method='post'>";
echo " <table width='4050' align='center' border='1' bordercolor='yellow'>
	<tr>
	     <td width='300'><font color ='white'>$nb</font></td>
	     <td width='300'><input type='text' name='jour[]' value='$jour' size='50' /></td>
	     <td width='300'><input type='text' name='commande[]' value='$commande' size='50' /></td>
	    <td width='300'><input type='text' name='produit[]' value='$produit' size='50' /></td>
	    <td width='300'><input type='text' name='marque[]' value='$marque' value=size='50' /></td>
	    <td width='300'><input type='text' name='designation[]' value='$designation' size='50' /></td>
	    <td width='300'><input type='text' name='sequence[]' value='$nb/$sequence' size='50' /></td>
	   <td width='300'><input type='text' name='etat[]' value='$etat' size='50' /></td>
	   <td width='300'><input type='text' name='commentaire[]' value='$commentaire' size='50' /></td>
	   <td width='300'><input type='text' name='serie[]' value='$serie' size='50' /></td>
	   <td width='300'><input type='text' name='date[]' value='$date' size='50' /></td>
	   <td width='300'><input type='text' name='affectation[]' value='$affectaion' size='50' /></td>
	   <td width='300'><input type='text' name='nom[]' value='$nom' size='50' /></td>
	</tr>
</table>";
										} 
echo "<input type='submit' name='ajouter' value='ajouter le contact' /></form>
<font size='4'><a href='index.php'><center><b>Retour</center></b></a></font><br />";	
		} ?>
Après j'envoie mes données a insèrer et ça m'envoie sur mon fichier qui traite l'insertion
<?php
//paramètres de la base
$serveur="localhost";
$util="root";
$mpasse="";
$base="stocks";
// connexion au serveur Mysql
$lien=mysql_connect($serveur,$util,$mpasse);
// connexion à la base de données
mysql_select_db($base);

$nb_fiches=strip_tags($_POST['nb_fiches[$i]']);
// Traitement

for ($i=0;$i>$nb_fiches;$i++)
	{   // boucle de traitement 
	$jour=strip_tags($_POST['jour[$i]']);
	$commande=strip_tags($_POST['commande[$i]']);
	$produit=strip_tags($_POST['produit[$i]']);
	$marque=strip_tags($_POST['marque[$i]']);
	$designation=strip_tags($_POST['designation[$i]']);
	$sequence=strip_tags($_POST['sequence[$i]']);
	$etat=strip_tags($_POST['etat[$i]']);
	$commentaire=strip_tags($_POST['commentaire[$i]']);
	$serie=strip_tags($_POST['serie[$i]']);
	$date=strip_tags($_POST['date[$i]']);
	$affectation=strip_tags($_POST['affectation[$i]']);
	$nom=strip_tags($_POST['nom[$i]']);
	
       mysql_query("INSERT INTO Pcs VALUES(NULL,'$jour','$commande','$produit','$marque','$designation','$sequence','$etat','$commentaire','$serie','$date','$affectation','$nom')");
echo "<meta http-equiv='refresh' content='1; url=index.php'>";
               }
	mysql_close(); // Déconnexion de MySQL
	echo "<meta http-equiv='refresh' content='1; url=index.php'>";  // redirection vers l'index
							
?>
Je n'arrive pas a terminer ce fichier je sais qu'il faut mettre des $i dans les $_POST['champ'] mais je ne sais pas comment.

Mammouth du PHP | 881 Messages

27 avr. 2009, 23:49

Puisque ton formulaire génère un tableau, il faut que tu traites un tableau.

Ainsi ta boucle $i devrait-elle lire des informations ainsi:
$jour=strip_tags($_POST['jour'][$i]);
en sortant l'indice du nom du champ

Ceci, à condition bien sûr, que tu aies nommé tes champs ainsi

Code : Tout sélectionner

<input name="jour[]">
dans ton formulaire.
Soyez artisans de paix

ViPHP
AB
ViPHP | 5818 Messages

28 avr. 2009, 00:33

Avec la syntaxe INSERT INTO ... ON DUPLICATE KEY UPDATE... tu aurais certainement pu faire le même code pour tes deux pages (insert et update) tout en utilisant qu'une seule requête (pas dans une boucle).
Mais bon si tu n'as que quelques fiches tu ne perdras pas beaucoup en performances en mettant tes requêtes dans une boucle.

Patriboom t'a montré où mettre tes indices mais j'ai quand même envie d'insister pour que tu protèges tes variables correctement avec mysql_real_escape_string() pour les utiliser dans les requêtes :
$jour = mysql_real_escape_string($_POST['jour'][$i]); 
Et l'on protège ensuite l'affichage avec htmlentities() ou htmlspecialchars();

strip_tags peut te poser des soucis dans les champs qui auraient des symboles ressemblants à des balises php ou html, notamment dans le champ commentaire, et par ailleurs cette fonction ne remplace pas mysql_real_escape_string().

nasdrovia70
Invité n'ayant pas de compte PHPfrance

28 avr. 2009, 09:52

Quand j'ajoute mes entrée il crée 50000 entrée vide et 1 entrée rempli que faire.
<?php 
//paramètres de la base 
$serveur="localhost"; 
$util="root"; 
$mpasse=""; 
$base="stocks"; 
// connexion au serveur Mysql 
$lien=mysql_connect($serveur,$util,$mpasse); 
// connexion à la base de données 
mysql_select_db($base); 

	
// Traitement 

for ($i=0;$i<=$nb_fiches;$i++) 
    {   // boucle de traitement 
	$nb_fiches=mysql_real_escape_string($_POST['nb_fiches'][$i]);	
    $jour=mysql_real_escape_string($_POST['jour'][$i]); 
    $commande=mysql_real_escape_string($_POST['commande'][$i]); 
    $produit=mysql_real_escape_string($_POST['produit'][$i]); 
    $marque=mysql_real_escape_string($_POST['marque'][$i]); 
    $designation=mysql_real_escape_string($_POST['designation'][$i]); 
    $sequence=mysql_real_escape_string($_POST['sequence'][$i]); 
    $etat=mysql_real_escape_string($_POST['etat'][$i]); 
    $commentaire=mysql_real_escape_string($_POST['commentaire'][$i]); 
    $serie=mysql_real_escape_string($_POST['serie'][$i]); 
    $date=mysql_real_escape_string($_POST['date'][$i]); 
    $affectation=mysql_real_escape_string($_POST['affectation'][$i]); 
    $nom=mysql_real_escape_string($_POST['nom'][$i]); 
	
     
       mysql_query("INSERT INTO Pcs  ( `NULL` , `jour` , `commande` , `produit` , `marque` , `designation` , `sequence` , `etat` , `commentaire` , `serie` , `date` , `affectation` , `nom` ) 
VALUES(NULL,'$jour','$commande','$produit','$marque','$designation','$sequence','$etat','$commentaire','$serie','$date','$affectation','$nom')"); 
echo "<meta http-equiv='refresh' content='1; url=index.php'>"; 
               } 
    mysql_close(); // Déconnexion de MySQL 
    echo "<meta http-equiv='refresh' content='1; url=index.php'>";  // redirection vers l'index 
                             
?>