mysql_fetch_array(): supplied argument is not a valid MySQL

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 : mysql_fetch_array(): supplied argument is not a valid MySQL

Re: mysql_fetch_array(): supplied argument is not a valid My

par moogli » 16 déc. 2011, 17:40

déja
$requete="SELECT * FROM CATEGORIES";
mysql_query($requete) or die(mysql_error()."\n".$requete);

c'est en trop tu a déjà une requête au dessus :)

Elle ne serais pas en minuscule ta table des fois ?

c'est toujours le même code ou un copier / coller ?

@+

Re: mysql_fetch_array(): supplied argument is not a valid My

par Morgane » 15 déc. 2011, 23:21

Alors voilà j'ai abandonné mon objectif des sous catégories.
et j'ai tout repris a zéro (ouais je sais je suis courageuse :mrgreen: ) LOL

mais ça n'empêche pas mes erreurs
donc je veux faire apparaitre la liste de mes différentes catégories dans un menu , jusque là tout se passe bien. je décide donc d'ajouter un article a une catégorie, (là aussi ça roule) mais lorsque je clique pour lire l'article dans sa totalité , j'ai une erreur qui apparait dans mon menu, celui là même qui marche super bien depuis tout a l'heure!!! J'avoue na pas comprendre :/

pour les courageux je vous laisse mon code et si vous pouvez seulement m'aiguiller
mon fichier menu.php
<div class="menu_l">

<ul>
<li><a class="menu" title="Accueil" href="http://<?php echo $_SERVER['HTTP_HOST'];?>">
Accueil</a></li>
<?php
//On est théoriquement déjà connecté à la BD
//On selectionne les données
$result = mysql_query("SELECT id,nom_categorie FROM CATEGORIES ORDER BY id ASC");
$requete="SELECT * FROM CATEGORIES";
mysql_query($requete) or die(mysql_error()."\n".$requete);
while($affiche = mysql_fetch_array($result))
 {
      echo '<li><a class="menu" title="'.$affiche['nom_categorie'].'" href="categorie.php?id='.$affiche['id'].'">'.$affiche['nom_categorie'].'</a></li>';
 }
?>
</ul>
 
</div>
(Ce code a été repris depuis un tuto.)
Voici ce qui apparait dans mon menu à la place de ma liste de catégorie:

Code : Tout sélectionner

Table 'freeheberg.CATEGORIES' doesn't exist SELECT * FROM CATEGORIES
Comment elle ne peut plus exister alors qu'elle existait pour les autres pages ?

Re: mysql_fetch_array(): supplied argument is not a valid My

par moogli » 03 oct. 2011, 23:20

si vraiment tu pige pas dit, je suis pas toujours trsè clair :mrgreen:

Re: mysql_fetch_array(): supplied argument is not a valid My

par Morgane » 03 oct. 2011, 14:51

8-| j'en ai pas compris la moitié, entre les patates & les carottes, et parents enfant petits enfants |*() LOL, je réfléchirais a ça , ce soir quand je ne saurais plus en train de "travailler" :mrgreen:

Re: mysql_fetch_array(): supplied argument is not a valid My

par moogli » 03 oct. 2011, 11:20

si la réponse est "query was empty", je dois faire quoi??? :oops:
heu mettre quelque chose dans le mysql_query :mrgreen:

quand au reste
CREATE TABLE IF NOT EXISTS `CONTENU` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
    `id_categorie` int(11) NOT NULL,  <=== NON tu l'a par la sous catégorie ou alors une seule table avec une auto jointure ;)
  `id_sous_categorie` int(11) NOT NULL,
  `titre` text collate latin1_general_ci NOT NULL,
  `description` text collate latin1_general_ci NOT NULL,
  `texte` text collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

-- exemple
CREATE TABLE IF NOT EXISTS `CATEGORIES` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
    idparent int(11) not null default 0,
  `nom_categorie` text collate latin1_general_ci NOT NULL,
  `description_categorie` text collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
et cherche le parent lorsqu'il est différent de zéro à l'aide d'une sous requete, bon la c'est juste parent enfant pour un arbre complet avec plusieurs branche (genre parent, enfant, petit enfant, arrière petit enfant arrière arrière petit enfant etc etc etc :) ) la c'est plus compliqué et nécessite une véritable étude (que je sais pas trop faire la :mrgreen: ).

dans ton code la y a deux doctype html etc enfait ça
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/ DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<link href="../style.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="ckeditor/ckeditor.js"></script>
<title>Ajouter une sous-catégorie</title>
</head>
<body>
<div class="site">
       
        <div class="header">
      </div>
<?php include('menu.php');?>
<div class="corp">
      <div class="paragraphe">
<h1>Ajouter une sous-catégorie</h1>
je suppose que c'est un soucis de recopie ? sinon a virer ;)
quand au reste cela ne sert a rien de mettre une variable entre " pour l'utiliser (mis a part ralentir l’exécution du script)
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base")
devient donc
mysql_connect($nom_du_serveur,$nom_utilisateur,$passe);
mysql_select_db($nom_de_la_base);

pour éviter le query was empty,
- mettre la requete dans une variable pour pouvoir l'afficher correctement dans un beau message d'erreur et en plus y mettre le N° de ligne :)
exemple
<?php
$sql = 'bla bla sql';
$r = mysql_query($sql);
if ($r === false) {
echo '<p class="erreur">Erreur SQL à la ligne : ' .(__LINE__-4).'<br />Avec la requête : '.$sql.'</p>';
}
else {
// traitement de la requête
}
?>
ne met pas if (! $result) car cela peux te jouer des tours, $result n'est pas un booléen c'est donc comme si tu comparé des patates et des carottes (ça vient du jardin mais c'est pas du tout pareil ^^).
pourquoi ça pose soucis ? parce que le cast automatique de la variable (changement de type, de char à int par exemple ou dans le cas présent de tous ce que l'on veux à bool) peux conduire à des choses que tu souhaite pas.
le plus intérréssant dans notre cas c'est qu'un 0 en tant qu'entier ou en tant que chaine sera évalué à FALSE plus clairement l'égalité suivante est vrai 1 == '1' == true tout comme 0 == '0' == false.
donc si $result == '0' c'est la loose ton test sera valider alors que ce n'est pas ce que tu souhaite.

donc test ce type chose avec l'opérateur de comparaison avec type (===). et de manière générale une comparaison il y a deux partie c'est beaucoup plus claire même si ce que tu fait implique la comparaison avec true/ false

donc if ( $result === false).

de même évite le die c'est une façon crade de terminer les script, tu peux très afficher un beau message d'erreur au milieux d'une belle de ton site sans tout "casser" ;).
cela se gère avec le else.

indique nous le message d'erreur pour que l'on y vois plus claire :)

ps : utilise la balise
[/b] plutot que [code] (la colorisation de la syntaxe c'est royal :) )

@+

Re: mysql_fetch_array(): supplied argument is not a valid My

par Morgane » 02 oct. 2011, 16:56

une autre question:
quand on a tester le retour de SQL (merci a ton code moogli, que d'ailleurs j'ai oublié d'ajouter sur cette page #-o ) , si la réponse est "query was empty", je dois faire quoi??? :oops:

Re: mysql_fetch_array(): supplied argument is not a valid My

par Morgane » 02 oct. 2011, 16:44

me revoilà :)

donc j'ai tout recommencer pour intégrer une sous-catégorie a ma base de donnée afin que mon site soit dynamique.
voici ma create table
--
-- Structure de la table `CATEGORIES`
--
 
CREATE TABLE IF NOT EXISTS `CATEGORIES` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nom_categorie` text collate latin1_general_ci NOT NULL,
  `description_categorie` text collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
 
--
-- Contenu de la table `CATEGORIES`
--
 
 
-- --------------------------------------------------------
--
-- Structure de la table `SOUS_CATEGORIES`
--
 
CREATE TABLE IF NOT EXISTS `SOUS_CATEGORIES` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_categorie` int(11) NOT NULL,
  `nom_sous_categorie` text collate latin1_general_ci NOT NULL,
  `description_sous_categorie` text collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
 
--
-- Contenu de la table `SOUS_CATEGORIES`
--

-- --------------------------------------------------------



--
-- Structure de la table `CONTENU`
--
 
CREATE TABLE IF NOT EXISTS `CONTENU` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
    `id_categorie` int(11) NOT NULL,
  `id_sous_categorie` int(11) NOT NULL,
  `titre` text collate latin1_general_ci NOT NULL,
  `description` text collate latin1_general_ci NOT NULL,
  `texte` text collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
 
--
-- Contenu de la table `CONTENU`
--
finalement pour la table contenu j'ai mi les deux: id_categorie et id_sous_categorie


Mon 1er soucis:: Pourriez-vous me corriger ma requête?
mon objectif est de pouvoir sélectionner une catégorie quand je crée une sous-catégorie (liaison)

Mon fichier "ajouter-sous_categorie.php"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/ DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
 
<head>
 
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<link href="../style.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="ckeditor/ckeditor.js"></script> 
<title>Ajouter une sous-catégorie</title>
</head>
 
<body>
 <div class="site">
        
        <div class="header">
      </div>
	  


<?php include('menu.php');?>
<div class="corp">

	
		<div class="paragraphe">
<h1>Ajouter une sous-catégorie</h1>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/ DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
 
<head>
 
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<link href="../style.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../ckeditor/ckeditor.js"></script> 
<title>Ajouter une sous-catégorie</title>
</head>
 
<body>
 
<div id="moncadre">
<?php include('menu.php');?>
 
<div class="cadrecentrale">
<h1>Ajouter une sous-catégorie</h1>
<?php 
// on se connecte à la base de données
include('../connexion_bd.php');
 
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de s&eacute;lectionner une base de donn&eacute;e. Assurez vous d\'avoir correctement remplit les donn&eacute;es du fichier connexion_bd.php.');
 
//Traitement du formulaire
if(isset($_POST["Valider"]))
{
	$titre = htmlspecialchars(stripcslashes(trim($_POST["titre"])));
	$description = htmlspecialchars(stripcslashes($_POST["description"]));
	$contenu = stripcslashes($_POST["contenu"]);
	$categorie = $_POST["cat"];
 
	//Vérification du formulaire
	if(empty($titre)){
		$alerte0 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas saisie de titre.</div>';
	}
	else if(empty($description)){
		$alerte1 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas saisie de description.</div>';
	}

	else if(empty($categorie)){
		$alerte2 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas sélectionné de catégorie.</div>';
	}
	//Si tout est ok
	else
	{ 
		// on enregistre les données
		$result = mysql_query("INSERT INTO SOUS_CATEGORIES VALUES ( '', '".mysql_real_escape_string($categorie)."', '".mysql_real_escape_string($titre)."', '".mysql_real_escape_string($description)."', '".mysql_real_escape_string($contenu)."' ) ");
		//Si il y a une erreur, on crie ^^
		if (!$result) {
			die('Requête invalide : ' . mysql_error());
		}
		else{
			//Si tout est ok, on informe le webmaster
			$message_ok = '<div class="erreur"><a name="ok"></a><b>Page enregistr&eacute;e avec succ&egrave;s!</b><br/> <a href="javascript:history.back()">Retour page pr&eacute;c&eacute;dente</a></div>';
		}
		//On ferme else
	}
	//On ferme if(isset($_POST["Valider"]))
}	
?>
<?php echo $message_ok;?>
<form action="#ok" method="post">
<?php echo $alerte0;?>
<p>Titre de la page :<br/>
<input name="titre" size="65" value="<?php if (!empty($_POST["titre"])) { echo stripcslashes(htmlspecialchars($_POST["titre"],ENT_QUOTES)); } ?>" type="text"/>
</p>
<?php echo $alerte1;?>
<p>Description de la page :<br/>
<textarea name="description" rows="10" cols="50" ><?php
if (!empty($_POST["description"])) {
	echo stripcslashes(htmlspecialchars($_POST["description"],ENT_QUOTES));
}
?></textarea>
</p>
<?php echo $alerte2;?>
<p>Catégorie :<br/>
<select name="cat">
<option value="">Selectionnez une catégorie</option>
<?php
//On selectionne les données
$categorie = mysql_query("SELECT id,nom_categorie FROM CATEGORIES ORDER BY id ASC");
 
while($affiche = mysql_fetch_array($categorie))
{
	echo '<option value="'.$affiche['id'].'">'.$affiche['nom_categorie'].'</option>';
}	
?>
</select>
</p>
<p>
<input name="Valider" value="Valider" type="submit"/>
<input name="Effacer" value="Effacer" type="reset"/>
</p>
</form>
 
</div>


 
<?php include('foot.php');?>
 
la requête a corriger qui ne fonctionne pas et qui pourtant me paraît juste :
<?php
//On selectionne les données
$categorie = mysql_query("SELECT id,nom_categorie FROM CATEGORIES ORDER BY id ASC");
 
while($affiche = mysql_fetch_array($categorie))
{
	echo '<option value="'.$affiche['id'].'">'.$affiche['nom_categorie'].'</option>';
}	
?>

Re: mysql_fetch_array(): supplied argument is not a valid My

par moogli » 28 sept. 2011, 23:18

a priori c'est bon, à la limite tu peux avoir le groupe d'un article en "remontant" les id ;)

si t'a des soucis de requête poste les create table et la requête qui pose soucis :)

@+

Re: mysql_fetch_array(): supplied argument is not a valid My

par Morgane » 27 sept. 2011, 16:49

je crois que je vais créer une table supplémentaire (groupe) et utiliser id_groupe.

donc j'espère avoir le bon raisonnement

j'ai créer une nouvelle table que j'ai appelé groupe( id(clé primaire),nom_groupe, description_groupe)
dans ma table catégorie (déjà existante) j'ai rajouter id_groupe mais je n'ai rien changer a ma table contenu. j'espère que ce n'est pas une bêtise (je m'en fous de savoir a quelle groupe appartient un article)

donc ce qui fait que groupe est lié a catégorie par id_groupe et que contenu est lié a catégorie par id_catégorie....

et ben maintenant ya plus qu'à changer toute mes requêtes #-o .

Re: mysql_fetch_array(): supplied argument is not a valid My

par moogli » 26 sept. 2011, 22:33

salut,

au vu de ton titre tu aun mysql_query qui retourne false ou rien.

il faut toujours tester le retour de mysql_query avant de l'exploiter.
par exemple
<?php
$r = mysql_query($requete);
if ($r === false ) {
// erreur
echo 'Erreur SQL : '.$requete.'<br />'.mysql_error();
}
else {
if (mysql_num_rows($r) > 0) {
// affichage 
}
else {
// aucun tuple retourné par la requete
}
}
?>

pour le reste ce que tu fait est un problème de conception car dès que tu va vouloir ajouter une ligne ça va foutre le brin.

pour le faire correctement tu a deux possibilités.
deux tables :
- une table groupe (id, nom)
- une table catégorie qui contient une référence à la table groupe (la jointure) ex id, nom, idgroupe.
ce système est simple et évolutif, il te suffit de connaitre les jointures

une seule table et la tu fait un auto jointure
ex
create table categories (
	idcategorie		int not null auto_increment primary key,
	nomcategorie 	varchar not null,
	idparent		int	default 0
)
lorsqu'il s'agit d'une catégorie idparent vaut zéro (c'est l’ancêtre) s'il s'agit d'une sous catégorie on utilise le idcatégorie correspondant à l'ancêtre.

Donc pour avoir toute les catégories un simple where idparent=0, après pour tout tu organise par idcatégorie, idparent (ou l'inverse je suis pas sur :) )

@+

mysql_fetch_array(): supplied argument is not a valid MySQL

par Morgane » 26 sept. 2011, 19:45

Bonjour,

j'ai un petit soucis avec l'une de mes requêtes SQL dans mes menus.
<div class="clean"></div>
     <div class="menu_v">
            <div class="menu_v_top">Plannifier</div>
				<div class="menu_v_ctn">
<?php
//On est théoriquement déjà connecté à la BD
//On selectionne les données
$result = mysql_query("SELECT id,nom_categorie FROM CATEGORIES ORDER BY id ASC LIMIT 0,3");
 while($affiche = mysql_fetch_array($result))
 {
      echo '<li><a class="menu" title="'.$affiche['nom_categorie'].'" href="categorie.php?id='.$affiche['id'].'">'.$affiche['nom_categorie'].'</a></li>';
 }
?>

				</div>
			
			
			 <div class="menu_v_top">Tenues/beaut&#233;</div>
				<div class="menu_v_ctn">
<?php

$result1 = mysql_query("SELECT id,nom_categorie FROM CATEGORIES ORDER BY id ASC LIMIT 2,4");
 while($affiche1 = mysql_fetch_array($result1))
 {
      echo '<li><a class="menu" title="'.$affiche1['nom_categorie'].'" href="categorie.php?id='.$affiche1['id'].'">'.$affiche1['nom_categorie'].'</a></li>';
 }
?>
				</div>
			
			
			<div class="menu_v_top">Reception</div>
				<div class="menu_v_ctn">
<?php

$result2 = mysql_query("SELECT id,nom_categorie FROM CATEGORIES ORDER BY id ASC LIMIT 6,2");
 
while($affiche2 = mysql_fetch_array($result))
 {
      echo '<li><a class="menu" title="'.$affiche2['nom_categorie'].'" href="categorie.php?id='.$affiche2['id'].'">'.$affiche2['nom_categorie'].'</a></li>';
 }
?>            
			</div>
			
			           
			<div class="menu_v_top">D&#233;coration</div>
				<div class="menu_v_ctn">
<?php

$result3 = mysql_query("SELECT id,nom_categorie FROM CATEGORIES ORDER BY id ASC LIMIT 8,3");
 while($affiche3 = mysql_fetch_array($result3))
 {
      echo '<li><a class="menu" title="'.$affiche3['nom_categorie'].'" href="categorie.php?id='.$affiche3['id'].'">'.$affiche3['nom_categorie'].'</a></li>';
 }
?>      
				</div>
			
			<div class="menu_v_top">Animation</div>
				<div class="menu_v_ctn">
<?php

$result4 = mysql_query("SELECT id,nom_categorie FROM CATEGORIES ORDER BY id ASC LIMIT 11,4");
 while($affiche4 = mysql_fetch_array($result4))
 {
      echo '<li><a class="menu" title="'.$affiche4['nom_categorie'].'" href="categorie.php?id='.$affiche4['id'].'">'.$affiche4['nom_categorie'].'</a></li>';
 }
?>  
				</div>
			
            <div class="menu_v_top">Nos partenaires</div>
				<div class="menu_v_ctn">
<a href="http://www.facebook.com/pages/Isalys-cr%C3%A9ation-datmosph%C3%A8re/189229171132333">Isalys cr&#233;ations d'atmosph&#232;re</a><br/>
				~<br>
<a href="http://www.1001lanternes.fr" title="lanterne volante &#233;cologique">1001lanternes.fr</a><br>
			  ~<br>
<a href="partenaires.php" title="partenaire référencement">partenaires r&#233;f&#233;rencement</a></div>
			 
			<div class="menu_v_top">Outils a t&#233;l&#233;charger</div>
				<div class="menu_v_ctn"> 
<a href="budget.php">Outil budget facile</a><br />

				</div>
       







	   </div>


mon but avec cette requête c'est de séparer mes catégorie en plusieurs menus:(parce qu'elles étaient toute groupé dans le même)
Planifier (3 catégories)
Tenue/beauté (4")
réception (2")
décoration(3")
animation (4")
c'est pour cette raison que j'ai utilisé LIMIT

j'ai pris en compte que SQL démarrait à 0 (et pas à 1) et j'ai donné un nom différente a chaque requête ($affiche,$affiche1,$affiche2,$affiche3,$affiche4)

Mais alors qu'est-ce que j'ai oublié??? :evil: