[RESOLU] Problème insertion en bdd suite à boite cocher

Eléphant du PHP | 134 Messages

24 sept. 2013, 12:52

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();



ViPHP
xTG
ViPHP | 7331 Messages

24 sept. 2013, 13:05

Un foreach sur ta variable et dedans une requête INSERT ?

Eléphant du PHP | 134 Messages

24 sept. 2013, 13:10

RE

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

ViPHP
xTG
ViPHP | 7331 Messages

24 sept. 2013, 13:14

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

Eléphant du PHP | 134 Messages

24 sept. 2013, 13:18

RE

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

Merci beaucoup

Eléphant du PHP | 134 Messages

24 sept. 2013, 13:49

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


ViPHP
xTG
ViPHP | 7331 Messages

24 sept. 2013, 15:07

Que te donnes un var_dump($_POST['check']) juste avant le foreach ?

Eléphant du PHP | 134 Messages

24 sept. 2013, 16:43

RE

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

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

ViPHP
xTG
ViPHP | 7331 Messages

24 sept. 2013, 19:05

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.

Eléphant du PHP | 134 Messages

24 sept. 2013, 20:16

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

ViPHP
xTG
ViPHP | 7331 Messages

24 sept. 2013, 20:20

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.

Eléphant du PHP | 134 Messages

24 sept. 2013, 20:26

RE

OK je vais tester , merci beaucoup.

Eléphant du PHP | 134 Messages

24 sept. 2013, 20:35

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.

ViPHP
xTG
ViPHP | 7331 Messages

25 sept. 2013, 10:30

Il manque la fermeture d'une parenthèse dans ta requête. ;)

Eléphant du PHP | 134 Messages

25 sept. 2013, 12:58

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