Vous n'êtes pas identifié(e).
Pages :: 1
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
salut,
une pettite traduction :
in_array () s'attend à ce que le paramètre 2 soit un tableau.
a++
Hors ligne
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
dsl je voulais dire $row=array()
Hors ligne
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
// 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 !
A comprendre et tester avant de dire ça marche pas
@+
Il en faut peu pour être heureux pompompompompompompompompompompom
Hors ligne
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
Pages :: 1