[RESOLU] UPDATE - Modifier plusieurs ligne avec une seule requête

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 : [RESOLU] UPDATE - Modifier plusieurs ligne avec une seule requête

Re: UPDATE - Modifier plusieurs ligne avec une seule requête

par Jeunesapeur47 » 04 janv. 2013, 15:03

Pas de problème, merci beaucoup pour votre aide très précieuse ! :D

Re: UPDATE - Modifier plusieurs ligne avec une seule requête

par Mazarini » 04 janv. 2013, 14:42

Il faut quand même vérifier qu'il y a bien au moins 1 case de cochée sinon update... id in(), ca ne va pas le faire.
Il faut également vérifier que $_POST['interet'] contient que des entiers
Il faut vérifier la bonne exécution de la requête avec mysql_errno() et en cas d'erreur afficher l'ordre sql (pour contrôle visuel) et le message d'erreur mysql_error() (pour facilité l'analyse de l'erreur).

Re: UPDATE - Modifier plusieurs ligne avec une seule requête

par Jeunesapeur47 » 04 janv. 2013, 14:37

D'acord, merci, je vais essayer sa ! :)

EDIT : SUPER, sa marche, merci beaucoup pour votre aide ! :D

Re: UPDATE - Modifier plusieurs ligne avec une seule requête

par Mazarini » 04 janv. 2013, 14:35

<?PHP
  $sql = "UPDATE engins
  SET etat='#9400D3' 
  WHERE id IN(".implode(',',$_POST['interets']).") ";
  $res = mysql_query($sql);
?>
Mais il faudrait ajouter un contrôle du contenu de $_POST['interets'] pour éviter les injections SQL

Dans ton code, tu génères du mauvais sql : update .... in (1,2,) la dernière "," est en trop

edit : correction ordre des param de implode
edit 2 : :P

UPDATE - Modifier plusieurs ligne avec une seule requête

par Jeunesapeur47 » 04 janv. 2013, 14:19

Bonsoir à tous !

Je poste ce sujet pour vous faire part d'un problème, qui m'embête énormément !

Je vous explique :

J'ai ce code qui me permet d'afficher les donnés de ma table sur PhpMyAdmin :
            while ($row = $sql->fetch())
            {
              $array = $bdd->query("SELECT COUNT(engin)FROM engins WHERE fonction = '" . $row['fonction'] . "'");
              $nb_total = $array->fetchColumn();
              
              $array2 = $bdd->query("SELECT COUNT(engin) FROM engins 
                                          WHERE etat = '#31f12c' AND fonction = '" . $row['fonction'] . "' AND carburant > 10");    
              $nb_dispo = $array2->fetchColumn();
              
              if ($row['fonction'] != $save)
              {
                  echo $nb_total . ' <strong>[' . $row['fonction'] . ']</strong> (' . $nb_dispo . '/' . $nb_total . ') : <br />';
                  $save = $row['fonction'];
              }
              
              echo '<input type="checkbox" name="interets[]" value="' . intval($row['id']) . '" /> ';
              echo $row['engin'] . ' ' . intval($row['numero']) . ' <span style="font-weight: bold;">CI ' . $row['cs'] . '</span> <br />';
Comme vous l'avez compris, ce code permet d'afficher les données sous formes de cases à cochés.

Le problème ne viens pas de la, mais d'ici :
$interets = $_POST['interets'];
$sqlinterets = '';
for ($i=0; $i<count($interets); $i++)
{
  $sqlinterets .= $interets[$i];
  $sqlinterets .= ',';
}

  $sql = "UPDATE engins
  SET etat='#9400D3' 
  WHERE id IN($sqlinterets) ";
  $res = mysql_query($sql);
Le but serait de modifié les cases sélectionnées et de mettre leurs états en : "#9400D3" !

Après plusieurs recherches, je n'ai pas trouvé comment résoudre ce problème ?

Alors, auriez vous l'aimabilité de me dire ce qui ne vas pas et ou ce qu'il faut modifier !

Bien amicalement, Jeunesapeur47 !

PS : Pourquoi si je met des smilies, je ne peux pas poster mon message, sa me met un message en anglais comme quoi c'est du Spam ?