[PHP] Probleme de variables

Alors voila,
je réalise actuellement un petit site php, et il faut savoir que j’ai pratiqué tres peu de php, il y a 3 ans quand j’avais fais mon site perso.
Je me suis donc inspiré d’un vieux script pour faire l’annuaire mais voici les problemes affichés, lorsque je mets en place ma page qui affichera tous les sites, triés et classés :

le code :

<? require "secret/connect.php";

if($debut==""){$debut=0;}
if($tri==""){$tri=titre;}
if($ord==""){$ord=ASC;}

$affsites = mysql_query("SELECT * FROM annuaire WHERE cat='$cat' AND accepte = '028' ORDER BY $tri $ord LIMIT $debut,10");
$ncat = mysql_num_rows($affsites)or die(mysql_error());
?> 

J’avais deja utilisé le meme code auparavent et ça fonctionnait sans probleme, vous savez d’ou ça peut venir ?
Merci

Peux tu indiquer sur c’est du php dans ton titre ? (bouton éditer)

Ensuite:

  1. <? pas bien, <?php bien (comme ça ça marche partout et pas seulement chez toi)
  2. require -> require_once si le fichier ne doit pas être inclut plus de deux fois (c’est le cas, sauf si tu veux te connecter deux fois?)
  3. $debut == “” : si $debut est une variable GET (passant par l’url) alors c’est de là que viennent tes erreurs.

$_GET[‘debut’] = !isset($_GET[‘debut’]) ? 0:(int) $_GET[‘debut’];

titre n’est pas une constante, et en fait tu veux que ce soit une chaîne de caractères. Donc ‘titre’.

Pour le reste, suffit de lire les messages d’erreur et de relier ça au 3…

Salut,

Tu dois initialiser tes variables avant de les utiliser et effectivement $tri recoit une chaine donc la valeur doit être entre ’ '.

Utilise la fonction “isset()” pour vérifier que la variable a été initialisée, dans le code si dessous je verifie le cas ou elle ne l’est pas, donc : !isset()

Quand au <? ?> c’est bon


<? require "secret/connect.php";

if (!isset($debut)){$debut=0;}
if (!isset($tri)){$tri='titre';}
if (!isset($ord)){$ord=ASC;}

$affsites = mysql_query("SELECT * FROM annuaire WHERE cat='$cat' AND accepte = '028' ORDER BY $tri $ord LIMIT $debut,10");
$ncat = mysql_num_rows($affsites)or die(mysql_error());
?> 

Non. <? c’est faux. Simplement parce que ça peut être désactivé.

Comme le reste peut l’être aussi ;), mais sur une config par défaut <? est accepté

Merci de votre aide,

j’ai donc modifié le code, et ajouté des ’ ’ pour la valeur $ord, c’est bien ça ?

voici ce qu j’ai comme erreur :

la ligne 8 correspond à ça :

$affsites = mysql_query("SELECT * FROM annuaire WHERE cat='$cat' AND accepte = '028' ORDER BY $tri $ord LIMIT $debut,10");

je ne vois pas ou est l’erreur pourtant :frowning:

Tu n’as pas initialisé la variable $cat : WHERE cat=’$cat’

Non. A partir de php5 ce n’est plus <? par défaut. Tout comme les GPC sont forcées par défaut (donc $cat != $_GET[‘cat’]).

nikeman> comme je l’ai dis, lis le message d’erreur : il te dit juste qu’une variable n’est pas définie. A toi de voir ce que $cat est dans ton contexte (certainement une variable get, de type entier) et de faire un truc de ce gout avant :

$cat = isset($_GET[‘cat’])?(int)$_GET[‘cat’]:0;

Merrci bcp ça fonctionne :slight_smile: