Variable Tableau qui ne passe pas en condition ( ! )

Variable Tableau qui ne passe pas en condition ( ! ) - PHP - Programmation

Marsh Posté le 23-07-2012 à 09:10:38    

Bonjour à tous, j'au un petit problème fâcheux avec une variable qui vient d'un formulaire,
( la ligne du formulaire ->
 
 echo'<td align="center"> <input type="checkbox" name="validation_id_pole[]" value="'.$result->out_pole_emploi_id.'" /> </td>';)
 
Voila, jusque la tout va bien, ensuite je transmet les infos au php,et dans le php je fais :
 
$valid_manager = $_POST['validation_id_pole'];
echo"$valid_manager[0]";
 
Pour voir si mon tableau est récupéré dans mon PHP, et bien oui les cases sont pleines, la super content  :bounce: , ça marche, mais problème, quand je mets cette pu***** de variable en condition, cela plante, avec évidement une magnifique page blanche ....  
la finalité est d'inserrer les données dans la base par le biais de cette variable "tableau" par une boucle for, comme ceci ( mais même si dans un IF ça plante ???  :sweat: ) :
 
 for ($i=0 ; $i < count($valid_manager) ; $i++ ) {
$db = new CLconnexion();
$query.$i = " UPDATE OUT_BLA_BLA SET  
   
   BLA_BLA_manager='1',
   BLA_BLA_DTC_manager=$date_etap_valid
       
   WHERE  
   
   BLA_BLA_emploi_id = $valid_manager[$i]
       
   ";
$db->Open('magrossebase.net');
mysql_query($query.$i) or die(echo"mysql_error() </br> Erreur : Contactez le service informatique";);
$db->Close();
            }
 
PS : Merci ce votre aide :)


Message édité par Profil supprimé le 23-07-2012 à 10:01:59
Reply

Marsh Posté le 23-07-2012 à 09:10:38   

Reply

Marsh Posté le 23-07-2012 à 10:28:29    

SVP je vais devenir chauve à force de me tirer les cheveux,
 
je précise que dans ma page de contrôle je récupère bien les valeurs, le count fonctionne bien, il m'affiche combien de cellules sont entrées.... mais j'ai enlevé tout le superflu a savoir les $query.$i, le or die, remplacé le for par for ($i=0 ; $i < $compteur ; $i++ )  
 
le compteur est juste $compteur = count($valid_manager);
 
et non ça ne marche toujours pas... HELP :'(

Reply

Marsh Posté le 23-07-2012 à 11:16:55    

ça vas probablement pas résoudre ton problème. Mais dans ce cas un foreach est plus indiqué :

Code :
  1. $db->Open('magrossebase.net');
  2. $query = array()
  3. foreach ($valid_manager as $i=>$elem) {
  4.    $db = new CLconnexion();
  5.    $q = " UPDATE OUT_BLA_BLA SET 
  6.    
  7.    BLA_BLA_manager='1',
  8.    BLA_BLA_DTC_manager=$date_etap_valid
  9.      
  10.    WHERE 
  11.    
  12.    BLA_BLA_emploi_id = $elem
  13.      
  14.    ";
  15.   array_push($query, $q);
  16.   mysql_query($q) or die(echo"mysql_error() </br> Erreur : Contactez le service informatique";
  17. }


 
PS : En fait si ça peut t'aider car je suis pas sur que ce type de concaténation soit copain avec les tableau. Il me semble bien que les tableaux à index ne peuvent être concaténé qu'avec l'opérateur ".". ($var = "Une chaîne".$table[index]."Une autre chaîne" )
 
Edit : Pourquoi ne pas produire un tableau de requête plutôt qu'un objet tout sale. (souligné dans le code) C'est plus facile pour naviguer ensuite dedans. Bien que je ne comprenne pas très bien l’intérêt de stocker les requêtes vue qu'elles sont exécutés immédiatement.
 
Edit2 : Rein à voir avec ton problème mais quel est l’intérêt d'ouvrir la base à chaque itération de la boucle. L’ouvrir une fois au début n'est-il pas suffisant?. Sachant de plus qu'il faudrait la refermer à chaque fois (ou à la fin si tu ne l'ouvre qu'une fois)


Message édité par spamoa le 23-07-2012 à 16:02:53
Reply

Marsh Posté le 23-07-2012 à 14:15:47    

Sortir $db = new CLconnexion(); de la boucle. Ouvre/fermer la BD à chaque tour de boucle est une grosse perte de temps (perfs).
 
Par ailleurs, ne pas mettre le count() dans le for, il est réévalué à chaque tour de boucle
 
$date_etap_valid sort d'où :??: si c'est une date au format yyy-mm-dd, alors il faut mettre al valeur entre quotes  dans la requête sql pour l'affectation!

Code :
  1. $db = new CLconnexion();
  2. $db->Open('magrossebase.net');
  3.  
  4. foreach(validation_id_pole as $i => $id) {
  5.    $sSQL = "UPDATE OUT_BLA_BLA SET BLA_BLA_manager = '1', BLA_BLA_DTC_manager = '$date_etap_valid' WHERE BLA_BLA_emploi_id = $id";
  6.    mysql_query($sSQL) or die(echo"mysql_error() </br> Erreur : Contactez le service informatique";);
  7. }
  8.  
  9. $db->Close();


 


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 23-07-2012 à 14:24:13    

Merci de ces réponses complètes, enfaite apres moultes tentatives et recherce sur internet, mon code à fonctionner, et je l'ai rectifié graçe à vous :) merci ! Voila le code :

Code :
  1. $date_etap_valid = GetFullStrDate(time());
  2. $valid_manager = $_POST['validation_id_pole'];
  3. $compteur = count($valid_manager);
  4. /*Algo de la boucle FOR :
  5. TANT QUE $i est inferieur au nombre de case de la variable valid_manager, faire connexion BDD, et updater le pole emploi id
  6. par la varibale $validmanager[NUMERO DE LA CASE INCREMEMTER PAR $i], connexion à la base, execution du SQL, et ensuite si erreur, affichage du message d'erreur
  7. sinon FIN TANT QUE*/
  8. $db = new CLconnexion();
  9. $db->Open('magrossebase.net');
  10. for ($i=0 ; $i < $compteur ; $i++ ) {
  11. $query = " UPDATE OUT_POLE_EMPLOI SET
  12.   out_pole_emploi_fact_valid_manager='1',
  13.   out_pole_emploi_dte_valid_manager=".$date_etap_valid."
  14.   WHERE
  15.   out_pole_emploi_id = ".$valid_manager[$i]."
  16.   ";
  17. mysql_query($query) or die(mysql_error());
  18.          }
  19. $db->Close();


Message édité par Profil supprimé le 23-07-2012 à 14:27:20
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed