Page 1 sur 2

Problème insertion en bdd suite à boite cocher

Posté : 24 sept. 2013, 12:52
par Michel6359
Bonjour

J'ai résolu mon problème de boite a cocher avec mise a jour d'une table si boite cocher avec les membres php France bien sûr.

Mais il me reste un souci , la boite a cocher met a jour une entrée en bdd (materiels3) , mais je désire faire une insertion dans une autre bdd pour archiver(Archive_sortie). A ce jour l'insertion cela fais mais seulement pour une entrée donc pour une boite a cocher , je souhaite qu'il le fasse pour chaque boite cocher.

Merci pour votre aide :D

 <?php
 echo '<input type="checkbox" name="check[]"  value="'. $datas['id'].' "/>';
 

   
   ?>
 

</td>
<?php
  echo '</tr>';
  }
 
  echo '</tbody>';
  echo '<tfoot><tr><th colspan="12">&nbsp;</th></tr></tfoot>';
  echo '</table>';
  echo '<table><tr><td><input name="Update" value="Valider les Retours Matériels" type="submit" /></form></td></tr></table>';
  mysql_free_result($req);
  
  if (isset($_POST['Update'])) {
  $id = implode(',', $_POST['check']);

  $sql = "UPDATE materiels3 SET disponibilite='',chantier='',nom_retrait='',date_sortie='' WHERE id IN (".$id.")";
  $result=mysql_query($sql);  
	  
	
//en cas d'échec de la mise à jour, on affiche le message d'erreur
  if (!$result) {
   echo "erreur sql liée  à la mise à jour:\n" ;
    die( mysql_error());
}
    
   // Jusque ici c bon mais l'archivage en base de donnée ne ce fait que pour 1 boite a cocher //

// ENREGISTREMENT ARCHIVE //
       $idTab=array();
        //parcours du array des ids reçus
        foreach($_POST['check'] as $val) { 
        $idTab[]="($val)"; //
        }
       // $insertSql="INSERT INTO Archive_sortie(materiel_id) VALUES".implode(',',$idTab);
        $insertSql=("INSERT INTO Archive_sortie VALUES('',now(),'$designation','$reference','$date_sortie','$nom_retrait','$chantier','$date_retour' WHERE id='$idTab'");
        $result2=mysql_query($insertSql);
       
	    //en cas d'échec d'insertion, on affiche le message d'erreur
  if (!$result2) {
   echo "Erreur sql liée  à l'insertion:\n" ;
    die( mysql_error());
 }else{
  echo "Archivage effectué avec succès";
 }
	
 }
  mysql_close();



Re: Problème insertion en bdd suite à boite cocher

Posté : 24 sept. 2013, 13:05
par xTG
Un foreach sur ta variable et dedans une requête INSERT ?

Re: Problème insertion en bdd suite à boite cocher

Posté : 24 sept. 2013, 13:10
par Michel6359
RE

Bonjour , excuse moi je ne comprend pas ce que tu veux dire . La variable n'est pas bonne ? Un exemple stp.

Re: Problème insertion en bdd suite à boite cocher

Posté : 24 sept. 2013, 13:14
par xTG
Tu as dans la variable $_POST['check'] tous tes retours de checkbox.
Il te faut lancer une requête INSERT pour chacune d'entre elle.
Donc un foreach sur cette variable te permettra d'exécuter du code pour chacune de ces valeurs.
Et le code en question à exécuter est ta requête SQL d'insertion. :)

Re: Problème insertion en bdd suite à boite cocher

Posté : 24 sept. 2013, 13:18
par Michel6359
RE

Ok merci de vais essayer de faire ça (lol) :oops:

Merci beaucoup

Re: Problème insertion en bdd suite à boite cocher

Posté : 24 sept. 2013, 13:49
par Michel6359
RE

J'ai une erreur : a la ligne 1709 invalid argument for foreach()
foreach($_POST['check'] as $val) {   
La variable est-elle bonne ?

Merci
<td width="1%" class="noir">
 
 <?php
 echo '<input type="checkbox" name="check[]"  value="'. $datas['id'].' "/>';
 
   ?>
 

</td>
<?php
  echo '</tr>';
  }
 
  echo '</tbody>';
  echo '<tfoot><tr><th colspan="12">&nbsp;</th></tr></tfoot>';
  echo '</table>';
  echo '<table><tr><td><input name="Update" value="Valider les Retours Matériels" type="submit" /></form></td></tr></table>';
  mysql_free_result($req);
  
 
          /  // ENREGISTREMENT ARCHIVE //
        //parcours du array des ids reçus
		
		
		if (isset($_POST['Update'])) {
               $id = implode(',', $_POST['check']);
               foreach($_POST['check'] as $val) { 
		$designation= $datas['designation'];
		$reference = $datas['reference'];
		$date_sortie = $datas['date_sortie'];
		$nom_retrait = $datas['nom_retrait'];
		$chantier = $datas['chantier'];
		$date_retour = date('Y/m/d') ;
	
        $insertSql=("INSERT INTO Archive_sortie VALUES('',now(),'$designation','$reference','$date_sortie','$nom_retrait','$chantier','$date_retour' WHERE id='$id'");
        $result2=mysql_query($insertSql);
        
		 } // ferme foreach //
		 
	       } // condition //
		   
		//en cas d'échec d'insertion, on affiche le message d'erreur
       if (!$result2) {
       echo "Erreur sql liée  à l'insertion:\n" ;
       die( mysql_error());
       }else{
       echo "Archivage effectué avec succès";
       
	   }


      if (isset($_POST['Update'])) {
      $id = implode(',', $_POST['check']);
      $sql = "UPDATE materiels3 SET disponibilite='',chantier='',nom_retrait='',date_sortie='' WHERE id IN (".$id.")";
      $result=mysql_query($sql);  
	  
	
	
     //en cas d'échec de la mise à jour, on affiche le message d'erreur
     if (!$result) {
     echo "erreur sql liée  à la mise à jour:\n" ;
     die( mysql_error());
     }
    
      }
     mysql_close(); // FERME LA BDD //


Re: Problème insertion en bdd suite à boite cocher

Posté : 24 sept. 2013, 15:07
par xTG
Que te donnes un var_dump($_POST['check']) juste avant le foreach ?

Re: Problème insertion en bdd suite à boite cocher

Posté : 24 sept. 2013, 16:43
par Michel6359
RE

Jamais fais ce genre de test ?? #-o :shock:

Je sais je ne facilite pas la tache pour m'aider.

Re: Problème insertion en bdd suite à boite cocher

Posté : 24 sept. 2013, 19:05
par xTG
Bah il serait temps d'apprendre à afficher des variables pour debugguer alors. :)
Tu as juste à mettre cette instruction dans ton code avant le foreach et exécuter ton script pour voir ce que ça affiches.

Re: Problème insertion en bdd suite à boite cocher

Posté : 24 sept. 2013, 20:16
par Michel6359
Bonsoir

J'ai ce message : array(3) { [0]=> string(5) "1009 " [1]=> string(5) "1012 " [2]=> string(5) "1014 " } Erreur sql liée à l'insertion: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id='1009 ,1012 ,1014 '' at line 1

J'ai fais un essai en validant le retour de 3 matériels.


Merci


<td width="1%" class="noir">
 
 <?php
 echo '<input type="checkbox" name="check[]"  value="'. $datas['id'].' "/>';
 
   ?>
 

</td>
<?php
  echo '</tr>';
  }
 
  echo '</tbody>';
  echo '<tfoot><tr><th colspan="12">&nbsp;</th></tr></tfoot>';
  echo '</table>';
  echo '<table><tr><td><input name="Update" value="Valider les Retours Matériels" type="submit" /></form></td></tr></table>';
  mysql_free_result($req);
  
 
          // ENREGISTREMENT ARCHIVE //
        //parcours du array des ids reçus
		
		
		if (isset($_POST['Update'])) {
                $id = implode(',', $_POST['check']);
		var_dump($_POST['check']);          // CE QUE MA DEMANDER //
                 foreach($_POST['check'] as $val) { 
		$designation= $datas['designation'];
		$reference = $datas['reference'];
		$date_sortie = $datas['date_sortie'];
		$nom_retrait = $datas['nom_retrait'];
		$chantier = $datas['chantier'];
		$date_retour = date('Y/m/d') ;
	
        $insertSql=("INSERT INTO Archive_sortie VALUES('',now(),'$designation','$reference','$date_sortie','$nom_retrait','$chantier','$date_retour' WHERE id='$id'");
        $result2=mysql_query($insertSql);
        
		 } // ferme fopreach //
		 
	       } // condition //
		   
		//en cas d'échec d'insertion, on affiche le message d'erreur
       if (!$result2) {
       echo "Erreur sql liée  à l'insertion:\n" ;
       die( mysql_error());
       }else{
       echo "Archivage effectué avec succès";
       
	   }
	
  
      if (isset($_POST['Update'])) {
      $id = implode(',', $_POST['check']);
      $sql = "UPDATE materiels3 SET disponibilite='',chantier='',nom_retrait='',date_sortie='' WHERE id IN (".$id.")";
      $result=mysql_query($sql);  
	  
	
	
     //en cas d'échec de la mise à jour, on affiche le message d'erreur
     if (!$result) {
     echo "erreur sql liée  à la mise à jour:\n" ;
     die( mysql_error());
     }
    
      }
     mysql_close(); // FERME LA BDD //

Re: Problème insertion en bdd suite à boite cocher

Posté : 24 sept. 2013, 20:20
par xTG
Donc le foreach est correct.
Par contre le second message indique une erreur de SQL.
Et celle-ci est causée car tu utilises la mauvaise variable.
C'est $val qu'il faut utiliser dans ta requête.

Re: Problème insertion en bdd suite à boite cocher

Posté : 24 sept. 2013, 20:26
par Michel6359
RE

OK je vais tester , merci beaucoup.

Re: Problème insertion en bdd suite à boite cocher

Posté : 24 sept. 2013, 20:35
par Michel6359
re

Ma requête :
$insertSql=("INSERT INTO Archive_sortie VALUES('',now(),'$designation','$reference','$date_sortie','$nom_retrait','$chantier','$date_retour' WHERE id='$val'");
        $result2=mysql_query($insertSql);
Erreur : array(3) { [0]=> string(5) "1657 " [1]=> string(5) "1558 " [2]=> string(4) "298 " } Erreur sql liée à l'insertion: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id='298 '' at line 1

Pas de retours matériels et pas d'archivage.

Re: Problème insertion en bdd suite à boite cocher

Posté : 25 sept. 2013, 10:30
par xTG
Il manque la fermeture d'une parenthèse dans ta requête. ;)

Re: Problème insertion en bdd suite à boite cocher

Posté : 25 sept. 2013, 12:58
par Michel6359
Bonjour

J'ai toujours même erreur #-o . Merci pour l'aide

Avant de cocher erreur : Erreur sql liée à l'insertion
Après cocher 2 lignes : array(2) { [0]=> string(5) "1657 " [1]=> string(5) "1558 " } Erreur sql liée à l'insertion: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id=1558 )' at line 1


$insertSql=("INSERT INTO Archive_sortie VALUES('',now(),'$designation','$reference','$date_sortie','$nom_retrait','$chantier','$date_retour') WHERE id=".$val."");
        $result2=mysql_query($insertSql);

 $insertSql=("INSERT INTO Archive_sortie VALUES('',now(),'$designation','$reference','$date_sortie','$nom_retrait','$chantier','$date_retour' WHERE id=".$val.")");
        $result2=mysql_query($insertSql);
Code complet
<td width="1%" class="noir">
 
 <?php
 echo '<input type="checkbox" name="check[]"  value="'. $datas['id'].' "/>';
 
   ?>
 

</td>
<?php
  echo '</tr>';
  }
 
  echo '</tbody>';
  echo '<tfoot><tr><th colspan="12">&nbsp;</th></tr></tfoot>';
  echo '</table>';
  echo '<table><tr><td><input name="Update" value="Valider les Retours Matériels" type="submit" /></form></td></tr></table>';
  mysql_free_result($req);
  
 
          // ENREGISTREMENT ARCHIVE //
        //parcours du array des ids reçus
		
		
		if (isset($_POST['Update'])) {
        $id = implode(',', $_POST['check']);
		var_dump($_POST['check']);
        foreach($_POST['check'] as $val) { 
		$designation= $datas['designation'];
		$reference = $datas['reference'];
		$date_sortie = $datas['date_sortie'];
		$nom_retrait = $datas['nom_retrait'];
		$chantier = $datas['chantier'];
		$date_retour = date('Y/m/d') ;
		
		echo $designation; 
		echo $reference; 
		echo $chantier; 
	    echo $nom_retrait;
		
        $insertSql=("INSERT INTO Archive_sortie VALUES('',now(),'$designation','$reference','$date_sortie','$nom_retrait','$chantier','$date_retour' WHERE id=".$val.")");
        $result2=mysql_query($insertSql);
        
		 } // ferme fopreach //
		 
	       } // condition //
		   
		//en cas d'échec d'insertion, on affiche le message d'erreur
       if (!$result2) {
       echo "Erreur sql liée  à l'insertion:\n" ;
       die( mysql_error());
       }else{
       echo "Archivage effectué avec succès";
       
	   }
	
  
      if (isset($_POST['Update'])) {
      $id = implode(',', $_POST['check']);
      $sql = "UPDATE materiels3 SET disponibilite='',chantier='',nom_retrait='',date_sortie='' WHERE id IN (".$id.")";
      $result=mysql_query($sql);  
	  
	
	
     //en cas d'échec de la mise à jour, on affiche le message d'erreur
     if (!$result) {
     echo "erreur sql liée  à la mise à jour:\n" ;
     die( mysql_error());
     }
    
      }
     mysql_close(); // FERME LA BDD //