PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 27-08-2010 02:53:22

nom
Membre
Inscription : 24-07-2010
Messages : 8

Problème avec array

Bonjour,
aurait-il quelqu'un qui puisse m'aider sur un probleme sur les tableaux. au fait j'ai besoin de verifier si une valeur existe dans le tableau et on me donne l'erreur suivante: Warning: in_array() expects parameter 2 to be array, boolean given in C:\wamp\www\tests\ajouterr.php on line 35 (la ligne 35 est celle en rouge soulignée)
voici mon code je vous serai très reconnaissant si vous m'aidiez:
<?php
if (isset($_POST['ref_pere']) && isset($_POST['indicateur'])&& isset($_POST['ordre'])&& isset($_POST['niveau'])&& isset($_POST['volet'])&& isset($_POST['libelle']) ) // Si les variables existent
{
if ($_POST['ref_pere'] != NULL AND $_POST['indicateur'] != NULL) // Si on a quelque chose à enregistrer
{
// D'abord, on se connecte à MySQL
    // information pour la connection à le DB
    $host = 'localhost';
    $user = 'root';
    $pass = '';
    $db = 'bds';

    // connection à la DB
    $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    mysql_select_db($db) or die ('Erreur :'.mysql_error());

$ref_pere0=$_POST['ref_pere'];
$indicateur0 = $_POST['indicateur'];
$ordre0 = $_POST['ordre'];
$niveau0 = $_POST['niveau'];
$volet0 = $_POST['volet'];
$libelle0 = $_POST['libelle'];



    $select = 'SELECT indicateur FROM k where ref_pere="$ref_pere0"';
    $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
    $total = mysql_num_rows($result);
if($total) {
    while($row = mysql_fetch_array($result)) {
        $row[]=$row["indicateur"];
    }
}

  if(in_array($indicateur0,$row)){

            
             mysql_query("UPDATE k set ordre = ordre+1, indicateur=indicateur+1 WHERE ref_pere=$ref_pere0 and ordre>=$ordre0;");

             mysql_query("INSERT INTO k( ref_pere,indicateur, ordre, volet, libelle, niveau) values('$ref_pere0','$indicateur0', '$ordre0', '$volet0', '$libelle0', '$niveau0')");
     }

else
{
    mysql_query("INSERT INTO k( ref_pere,indicateur, ordre, volet, libelle, niveau) values('$ref_pere0','$indicateur0', '$ordre0', '$volet0', '$libelle0', '$niveau0')");



}
}}

?>

Hors ligne

#2 27-08-2010 07:08:57

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Problème avec array

salut,
une pettite traduction :
in_array () s'attend à ce que le paramètre 2 soit un tableau.
a++

Hors ligne

#3 27-08-2010 09:51:27

nom
Membre
Inscription : 24-07-2010
Messages : 8

Re : Problème avec array

oui je sais ça, est ce que $row n'est pas defini autant qu'un tableau? de peur que ca soit le cas sans que je m'en aperçoive j'ai ajouté auparavant un $row=array avant le test if($total) mais ca ne change rien!

Hors ligne

#4 27-08-2010 09:52:35

nom
Membre
Inscription : 24-07-2010
Messages : 8

Re : Problème avec array

dsl je voulais dire $row=array()

Hors ligne

#5 27-08-2010 15:00:31

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : Problème avec array

while($row = mysql_fetch_array($result)) {
        $row[]=$row["indicateur"];
    }

il y a un problème ici car $row est redéfinit à chaque boucle par l'affectation du mysql_fetch_array(), et ensuite tu y ajoute le $row['indicateur'] ce qui fait que tu auras cette donnée deux fois, et que la dernière !

le message d'erreur indique que $row est un booleen, donc il y a surement une erreur à la ligne au milieux du while !

commentaire généraux :
tu peut supprimer le deuxième if en utilisant empty dans le 1er
quelques commentaire dans le code avec une première correction

<?php
if (!empty($_POST['ref_pere']) && !empty($_POST['indicateur'])&& isset($_POST['ordre'])&& isset($_POST['niveau'])&& isset($_POST['volet'])&& isset($_POST['libelle']) ) // Si les variables existent{
  // D'abord, on se connecte à MySQL
  // information pour la connection à le DB
  $host = 'localhost';
  $user = 'root';
  $pass = '';
  $db = 'bds';

  // connection à la DB
  $link = mysql_connect ($host,$user,$pass);
  if ($link === false) {
    echo '<p class="erreur">Impossible de se connecter au serveur MySQL : '.mysql_error()).'</p>';
  }
  else {
    $select = mysql_select_db($db,$link);
    if ($select === false) {
      echo '<p class="erreur">Impossible de selectionner la base de donnée : '.mysql_error().'</p>';
    }
    else {
      /*
      Inutile car tu double les variables !
        $ref_pere0=$_POST['ref_pere'];
        $indicateur0 = $_POST['indicateur'];
        $ordre0 = $_POST['ordre'];
        $niveau0 = $_POST['niveau'];
        $volet0 = $_POST['volet'];
        $libelle0 = $_POST['libelle'];
      */

     
      /*
        $select = 'SELECT indicateur FROM k where ref_pere="$ref_pere0"';
        Requete foireuse car tu cherche tous le temps la chaine de caractère "$ref_pere0" dans le champ ref_pere et non le contenue de la variable.
        Je t'invite a revoir le tuto sur la concaténation     
      */

      $select = 'SELECT indicateur FROM k where ref_pere=\''.mysql_real_escape_string($_POST['ref_pere']).'\'';
      // Mysql_real_escape_string permet d'éviter de te faire "hacker" en deux temps trois mouvement. (c'est que la base bien entendu).
      $result = mysql_query($select,$link);
      if ( $result === false) {
        echo '<p class="erreur">Erreur lors de la requete SQL :'.$select.'<br />Avec l\'erreur : '.mysql_error().'</p>';
      }
      else {
        $total = mysql_num_rows($result);
        /*
        La si $total =0 tu créer une erreur )à la ligne du in_array (ce qui est le cas non ?)
        if($total) {
          while($row = mysql_fetch_array($result)) {
            $row[]=$row["indicateur"];
          }
        }

        if(in_array($indicateur0,$row)){

           mysql_query("UPDATE k set ordre = ordre+1, indicateur=indicateur+1 WHERE ref_pere=$ref_pere0 and ordre>=$ordre0;");

           mysql_query("INSERT INTO k( ref_pere,indicateur, ordre, volet, libelle, niveau) values('$ref_pere0','$indicateur0', '$ordre0', '$volet0', '$libelle0', '$niveau0')");
         }

        else
        {
          mysql_query("INSERT INTO k( ref_pere,indicateur, ordre, volet, libelle, niveau) values('$ref_pere0','$indicateur0', '$ordre0', '$volet0', '$libelle0', '$niveau0')");
        }
        */
       
      }
    }
  }
}
?>

Pourquoi utiliser in_array alors que mysql peut le faire ?
Une version corrigée qui fait la même chose !


<html>
<head>
<style>
.erreur{
  font: bold 120% verdana;
  color: #ff0000;
  border: 2px solid #FF0000;
  background-color:#FAFAFA;
  width: 500px;
  margin: auto;
  padding: 5px;
}
</style>
</head>
<body>
<?php
if (!empty($_POST['ref_pere']) && !empty($_POST['indicateur'])&& isset($_POST['ordre'])&& isset($_POST['niveau'])&& isset($_POST['volet'])&& isset($_POST['libelle']) ){
  // information pour la connection à le DB
  $host = 'localhost';
  $user = 'root';
  $pass = '';
  $db = 'bds';
  // connection à la DB
  $link = mysql_connect ($host,$user,$pass);
  if ($link === false) {
    echo '<p class="erreur">Impossible de se connecter au serveur MySQL : '.mysql_error()).'</p>';
  }
  else {
    $select = mysql_select_db($db,$link);
    if ($select === false) {
      echo '<p class="erreur">Impossible de selectionner la base de donnée : '.mysql_error().'</p>';
    }
    else {
      $select = 'SELECT count(indicateur) as nbindic FROM k where ref_pere=\''.mysql_real_escape_string($_POST['ref_pere']).'\'
      and indicateur=\''
.mysql_real_escape_string($_POST['indicateur'].'\'';
      $result = mysql_query($select,$link);
      if ( $result === false) {
        echo '<p class="erreur">Erreur lors de la requete SQL :'.$select.'<br />Avec l\'erreur : '.mysql_error().'</p>';
      }
      else {
        $data = mysql_fetch_assoc($result);
        if ($data['nbindic'] == 0) {
          $req = 'INSERT INTO k( ref_pere,indicateur, ordre, volet, libelle, niveau)
          values(\''
.mysql_real_escape_string($_POST['ref_pere']).'\',
          \''
.mysql_real_escape_string($_POST['indicateur']).'\',
          \''
.mysql_real_escape_string($_POST['ordre'])'.\',
          \''
.mysql_real_escape_string($_POST['volet']).'\',
          \''
.mysql_real_escape_string($_POST['libelle'].'\',
          \''
.mysql_real_escape_string($_POST['niveau'].'\')';$ret = mysql_query($req);
          if ($ret === false) {
            echo '<p class="erreur">Erreur SQL : '.$req.'<br />'.mysql_error().'</p>';
          }
        }
        else {
          $update = 'UPDATE k set ordre = ordre+1, indicateur=indicateur+1 WHERE ref_pere=$ref_pere0 and ordre>=$ordre0;';
          $ret_up = mysql_query($update);
          if ($ret_up === false) {
            echo '<p class="erreur">Erreur SQL : '.$update.'<br />'.mysql_error().'</p>';
          }
          $req = 'INSERT INTO k( ref_pere,indicateur, ordre, volet, libelle, niveau)
          values(\''
.mysql_real_escape_string($_POST['ref_pere']).'\',
          \''
.mysql_real_escape_string($_POST['indicateur']).'\',
          \''
.mysql_real_escape_string($_POST['ordre'])'.\',
          \''
.mysql_real_escape_string($_POST['volet']).'\',
          \''
.mysql_real_escape_string($_POST['libelle'].'\',
          \''
.mysql_real_escape_string($_POST['niveau'].'\')';
          $ret = mysql_query($req);
          if ($ret === false) {
            echo '<p class="erreur">Erreur SQL : '.$req.'<br />'.mysql_error().'</p>';
          }
        }
      }
    }
  }
}
else {
  // y a un soucis dans le formulaire on renvoi dessus
  header('Location: url formulmaire');
}
?>
</body>
</html>

A comprendre et tester avant de dire ça marche pas smile

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#6 12-09-2010 13:23:00

nom
Membre
Inscription : 24-07-2010
Messages : 8

Re : Problème avec array

Merci beaucoup. Désolé je n'ai pas vu ton message à temps je te remercie d'avoir pris du temps à me repondre, tn code est nettement plus logique et surtout plus structuré(je suis très debutant et ca m'a appris bcp de chose) , j'ai remédié à mon problème mais pas de la sorte maintenant je vais testé ton code car apparemment il est beaucoup mieux. et merci mille fois encore

Hors ligne

Pied de page des forums