Aller au contenu

php && mysql probleme


brazerio

Messages recommandés

Salut,

j'ai un problème avec ma query j'explique dans ma page en php j'ai :

<?php

$query = "SELECT * from lien, categorie WHERE lien.nocategorie=categorie.nocategorie AND categorie.categorie=$categorie";

$result = mysql_query($query)

$array = mysql_fetch_array($result)

?>

et quand je veux faire afficher ma page il m'affiche une erreur a la ligne "$array..."

habituellement quand j'ai cet erreur cela voulais dire que ma query n'étais pas bonne, mais elle marche. Ce problème m'est aussi parvenu dans une aurre query.

si vous avez la réponse...

Lien vers le commentaire
Partager sur d’autres sites

Maitenant j'ai un autres problème, qu est moins "cave" que l'autre. j'ai tranférédes mes fichiers.php et mes tables vers un autres serveur.

et dans ce nouveau serveur lors que je veux faire afficher ce que j'ai dans mes champs il ne me les affiche pas. J'ai remarquer que mes variables sont vide.

ex: <form action="afficher.php" method="post">

<td>

<select name="langue" onchange="this.form.submit();">

<option value="0" selected> langue </option>

<?php while ($array = mysql_fetch_array($result2))

{ ?>

<option value="<?php echo $array['nolangue']; ?>" > <?php echo $array['langue']; ?> </option>

<?php } ?>

</select>

</td>

</form>

bon ici c'est simplement une list box qui m'affiche tous ce que j'ai dans mon champs langue (là pas de problème)

ensuite

if (isset($langue)

{

...

}

c'est ici que j'ai mon problème sur mon ancien serveur ma var. "$langue" étais pleine lorsque je l'utilisait. Mais sur mon nouveau serveur la variable est vide. A chaqe fois que je choisi une langue dans ma list box il n'affiche rien a cause que ma variable est vide.

Et là je suis perdu...pkoi??? el code et mes tables sont pareil dans les 2 serveur

Lien vers le commentaire
Partager sur d’autres sites

Laisse-moi deviner... Sur ton serveur de développement (chez toi je pense), tu as register_globals sur ON (:iloveyou:), alors que sur le serveur final cette option est désactivée.

Du coup, tu ne récupères plus les variables du formulaire de la page précédente directement (d'où ton impression que la variable est vide). Pour rectifier cela, il faut que tu récupères ta variable $array dans l'un des tableaux $HTTP_*_VARS.

Essaie, tu me diras si c'était bien ça.

Lien vers le commentaire
Partager sur d’autres sites

Merci de l'explication, mais je ne suis pas famillier totalement avec les

$HTTP_*_VARS. Je suis aller me renseigner, ca m'a aider a les comprendre un peu. Mais je ne sais pas comment les ajouters pour que cela fonctionne.

Le serveur que j'utilise n'est pas le miens (pas pour l'instant) donc si c'Est dans un fichier de configuration je ne peux pas lechanger directement. Pourrais tu m'éclairer quelque peu. Ca ma l'air intéressant de bien comprendre les environement globaux. :francais:

Lien vers le commentaire
Partager sur d’autres sites

Explication...

Prenons un exemple : une page 1 contenant un formulaire fonctionnant en POST. Dans ce formulaire un champ s'appelle $toto.

Lorsque tu valides le formulaire, $toto est placé dans un tableau associatif appelé $HTTP_POST_VARS, puis la page suivante (page 2) est appelée.

Ainsi, dans la page 2, ce tableau permet de récupérer toutes les variables de la page précédente. Tu peux donc récupérer la valeur de ta variable $toto de la première page ici : $HTTP_POST_VARS['toto'].

(Il existe aussi $HTTP_GET_VARS pour les formulaires passés en GET, et $HTTP_SESSION_VARS pour les sessions... d'où mon appellation générique $HTTP_*_VARS des posts précédents)

Jusque là tout est clair ? Poursuivons.

Maintenant regardons la config de PHP.

Dans le fichier de configuration de php (php.ini), il y a une option appelée REGISTER_GLOBALS. Cette option, lorsqu'elle est activée, permet de créer automatiquement dans la page 2 autant de variables qu'il y a d'éléments dans les tableaux $HTTP_*_VARS (*=GET, POST, SESSION, etc...).

Dans notre exemple, cela recréera une variable $toto dans la page 2, qui aura la même valeur que dans la page 1.

Cette option peut sembler très pratique lorsqu'on apprend le PHP (on retrouve magiquement nos variables d'une page à l'autre), mais en fait c'est une magnifique faille de sécurité, car on ne sait pas d'où vient la valeur de la variable $toto de la page 2 : vient-elle bien du POST, ou du GET (un petit malin a-t-il mis un &toto=truc dans l'url ?). C'est donc une option à désactiver de toute urgence.

Pour revenir à ton cas, si sur ton serveur 1 tu récupérais automatiquement ton tableau $array dans ta page 2, et que cela ne fonctionne plus sur ton serveur 2, il a de bonnes chances pour que cela vienne de l'option REGISTER_GLOBALS. Ton serveur de test, installé par défaut, a laissé l'option activée, alors que les serveurs "sérieux" de Free ou d'ailleurs l'ont désactivée.

Donc, pour résoudre ton problème, il va falloir qu'au début de chaque page tu récupères dans les tableaux $HTTP_*_VARS les variables dont tu as besoin.

Exemple : $array = $HTTP_GET_VARS['array'];

Voilà, j'espère que l'explication est claire...

Par ailleurs, réjouis-toi, tu viens de faire un pas vers la programmation "propre" en PHP : ne jamais compter sur les variables magiques :)

Lien vers le commentaire
Partager sur d’autres sites

Bon, pour ton explication des HTTP_*_VARS ca ca bien, mon problème du début est régler, parcontre en mettant les $_POST je suis perdu un peu car j'ai une erreur.

dans mon code j'ai fais une list box qui affiche des catégorie et son "name" est catégorie (le code est plus haut je crois)

Bon là :

if (isset($_POST['categorie']))

{

//choisi toutes les affiche le site par rapport à la catégorie choisi dans le list box

$result = mysql_query("SELECT * from lien, categorie, langue WHERE lien.nocategorie=categorie.nocategorie AND categorie.nocategorie = $categorie

}

monproblème est a la fin " = $categorie". Quand je choisi une catégorie il me donne l'erreur suivante

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/brazerio/public_html/lien/afficher.php on line 99

la ligne 99 est "$array = mysql_fetch_array($result);

l'internet ne m'as pas donner la solution a mon problème

*dsl de mes question fréquente...

Lien vers le commentaire
Partager sur d’autres sites

Dans ton extrait de code (de ton dernier post), tu ne récupères apparemment pas la valeur de $catégorie.

Il faudrait faire :

if (isset($_POST['categorie']))
{
  $categorie = $_POST['categorie'];
  $result = etc...
}

ou alors (mais c'est plus lourd) :

(isset($_POST['categorie']))
{
//choisi toutes les affiche le site par rapport à la catégorie choisi dans le list box
$result = mysql_query("SELECT * from lien, categorie, langue WHERE lien.nocategorie=categorie.nocategorie AND categorie.nocategorie = ".$_POST['categorie']);
}

Fais aussi attention à bien fermer les guillemets et parenthèses dans ta requête.

Je rappelle que php n'aime pas trop les variables de type tableau directement dans les strings : mieux vaut

$requete = "bla bla and truc = ".$_POST['machin'];

que :

$requete = "bla bla and truc = $_POST['machin']";

Bon code :)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...