[RESOLU] inner join et mysqli_fetch_array() expects parameter

Petit nouveau ! | 8 Messages

08 févr. 2013, 15:13

bonjour,

je suis nouveau sur le forum et en php, j'espere n'avoir omis aucune des regles de politesse propre au forum...j'ai fais mes recherches sur le net, dans des bouquins et je bloque sur un probleme....


if(isset($_GET['affichage']) && preg_match('/^[a-zA-Z0-9-]+$/',$_GET['affichage']))
{ $cherchepage="select * FROM paragraphes INNER JOIN pages
ON idpage = pages.id
WHERE pages.url=".$_GET['affichage'];
$affichages=mysqli_query($lien,$cherchepage);



while($lignecont=mysqli_fetch_array($affichages))
{$contenudelapage[]=array('id'=>$lignecont['id'],
'title'=>$lignecont['title'],
'description'=>$lignecont['description'],
'keywords'=>$lignecont['keywords'],
'titrepara'=>$lignecont['titrepara'],
'imgpetitepara'=>$lignecont['imgpetitepara'],
'imggrandepara'=>$lignecont['imggrandepara'],
'textepara'=>$lignecont['textepara'],
'classepara'=>$lignecont['classepara'],
'cat'=>$lignecont['cat']
);
}


include'contenu.html.php';


Si c'est mal codé, je le répète, je suis vraiment noob....bon, je recupere une variable par un $_GET, ici "affichage" et cette variable je m'en sers dans une requete sql pour créer un tableau. dans une version precedente avec des valeurs numerique dans affichage, tout fonctionnais bien et en passant par du texte dans ma variable, j'ai un message :

"Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given"
et
" Undefined variable: contenudelapage".

J'ai testé toutes mes variables et apparement la boulette vient du

"WHERE pages.url=".$_GET['affichage'];"

je precise donc que l'idpage est bien dans paragraphe au niveau de ma base.

voila, j'espere etre assez claire et suffisament concis.

Après vérification la requête passe bien avec des valeurs numériques mais pas avec du texte, normal ? pas normal ? j'aimerais en fait pouvoir recuperer le texte pour une reecriture d'url, je dois donc passer par deux variables? (si je veux rester tres simple bien sur )?

Donc j'ai un booleén en resultat...pas vraiment ce a quoi je m'attendais mais je comprends mieux qu'il n'y ai pas de création de variable $contenudelapage, je viens de lire qu'un $_GET ne renvoie que des chaines de caractères, en mettant "123" dans mon $GET , il y a bien création du tableau, en mettant un texte correspondant a ce que j'ai dans la base, j'ai donc un booleen, et si je supprime le $_GET dans la requete pour y mettre le texte en "clair" ça fonctionne...es-ce qu'il faut imposer un format de variable ? apparement c'est vrai pour du C ou je ne sais plus quel langage, mais le php semble beaucoup plus souple a se sujet( a ce que j'ai lu).... :-/

ViPHP
xTG
ViPHP | 7331 Messages

08 févr. 2013, 18:07

Booléen => requête qui plante => erreur de syntaxe
mysqli_error() peut t'afficher le message d'erreur correspondant.

Mais sinon le souci vient surtout du fait que tu n'échappes pas tes variables lors de l'injection SQL.
Affiches $cherchepage et tu devrais avoir un souci de quote je pense.
mysqli_real_escape_string() ou bien les requêtes préparées sont faites pour protéger contre les injections SQL.

Petit nouveau ! | 8 Messages

08 févr. 2013, 19:33

merci du tuyaux je vais essayer mysqli error et voir si je trouve mon erreur, en ce qui concerne les injections une expression reguliere n est elle pas sensee n accepter que certains caractere et donc bloquer les injections ?

ViPHP
xTG
ViPHP | 7331 Messages

08 févr. 2013, 19:42

Bah sauf si ton expression régulière ne gère pas tous les cas. :P

Mais une expression régulière n'est pas faite pour éviter les injections.
C'est fait pour invalider des caractères non souhaités rien de plus (si tu ne veux que des chiffres, ect).

Petit nouveau ! | 8 Messages

11 févr. 2013, 16:36

Un grand merci pour ton aide, la fonction mysqli_error() est bien pratique dans la caisse à outils, et j'ai pu trouver mon erreur. Je peux maintenant m'occuper des injections qui pourraient se faire....
Encore merci !