Requete sql dans php

Fermé
Tatoo - 10 mars 2010 à 19:17
 Tatoo - 11 mars 2010 à 19:57
Bonjour,
je suis en train de crée un site pour un ami en php j'utilise wamp server pour le visualiser et tout fonctionne parfaitement mais lorsque j'ai voulus le mettre sur internet via webhost mon menu ne fonctionne plus.

Normalement lorsque je clic sur une catégorie dans mon menu il ne devrait m'afficher que les sujets qui concerne cette catégorie pour cela j'ai crée une base de donnée avec une table categories qui contient les champs id, href, intitule et title
et une table wb_article qui contient les champs id,titre,img,chapeau,texte,visible,date et categorie

le champ href de la table categories contient le même terme que le champ categorie de la table wb_article dans mon code php j'ai du code qui permet de voir si on a cliqué sur le titre de l'article ou sur une catégorie si on clic sur le titre sa renvoi dans l'adresse l'id de l'article et si on clic sur une catégorie sa renvoi le href

if(isset($_GET['id'])){
		if(is_numeric($_GET['id'])){
			$sqlA="SELECT id,titre,date,texte,categorie,img FROM wb_article WHERE visible=1 AND id=".$_GET['id']  ;
		} else {
			$sqlA="SELECT id,titre,chapeau,date,categorie,img FROM wb_article WHERE visible=1  AND id<10 ORDER BY date DESC ";
		}
	}else{
		$sqlA="SELECT id,titre,chapeau,date,categorie,img FROM wb_article WHERE visible=1  AND id<10 ORDER BY date DESC";
	}
	if(isset($_GET['href'])){
		$sqlA="SELECT id,titre,chapeau,date,categorie,img FROM wb_article ORDER BY date DESC WHERE visible=1 AND categorie=".$_GET['href'];
	}	

$sqlC="SELECT id,intitule,href,title FROM categories";
	
	$cate = fetchAll($sqlC);
	
	$articles = fetchAll($sqlA);




function fetchAll($sql){
	
		$res=mysql_query($sql) or die(mysql_error());
		while($tuple=mysql_fetch_assoc($res)){
			$tuples[]=$tuple;
		}
		return $tuples;
	}



<div id="menu">
			<ul id="cat">
				<li class="titremenu">
					Catégories
				</li>
				<li class="itemmenu">
					<a href="index.php" title="retour vers la page d'accueil" class="lienmenu" > 
						Page Principale
					</a>
				</li>
				<?php 
				foreach($cate as $cat) {
				?>
					<li class="itemmenu">
						<a href="?href='<?php echo ($cat['href']); ?>'" title="<?php echo $cat['title'];?>" class="lienmenu" > 
							<?php echo $cat['intitule']; ?>
						</a>
					</li>
				<?php
					}
				?>
			</ul>
		</div> <!-- fin menu -->
		<div id="corps">
			<?php
				foreach ($articles as $article){
			?>
				<ul class="article">
					<li class="titre">
						<a href="?id=<?php echo $article['id']; ?>" class="titre" title="Permet de voir l'articles en entier" > 
							<?php echo $article['titre']; ?>
						</a>
					</li>
					<li class="image">
						<a href="?id=<?php echo $article['id']; ?>" class="titre" title="Permet de voir l'articles en entier" > 
							<img <?php echo $article['img']; ?>/>
						</a>
					</li>
					<li class="date">
						<p>
							Edité <?php echo strftime('en %Y',strtotime($article['date'])); ?>
						</p>
					</li>
					<li class="chapeau">
							<?php echo($article['chapeau']); ?>
					</li>
					<li class="texte">
						<?php echo($article['texte']); ?>
					</li>
					<li class="vide">
					</li>
				</ul>
			<?php
				}
			?>
		</div>


comme je l'ai dis sur mon pc en local via wamp server afficher uniquement l'article sélectionner (via id) fonctionne parfaitement et afficher uniquement la catégorie sélectionnée (via href) fonctionne tout aussi bien mais dès que je passe par webhost afficher l'article grâce à l'id fonctionne mais affiché la catégorie grâce à href ne fonctionne pas voici le message d'erreur

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE visible=1 AND categorie=\'roman\'' at line 1

pourtant il me renvoi exactement la même chose dans l'adresse

https://www.000webhost.com/migrate?static=true


Je ne sais pas si j'ai vraiment été claire c'est claire dans ma tete mais j'ai toujours du mal à déveloper ^^ si quelqu'un peut m'expliquer mon erreur ca m'aiderai vraiment car ca fait un moment que je cherche
Merci d'avance
A voir également:

13 réponses

Titial69 Messages postés 259 Date d'inscription lundi 22 février 2010 Statut Membre Dernière intervention 11 mars 2010 20
10 mars 2010 à 19:40
il faurdait que tu entoure le nom de ta catégorie par ' ', exemple :
$sqlA="SELECT id,titre,chapeau,date,categorie,img FROM wb_article ORDER BY date DESC WHERE visible=1 AND categorie='".$_GET['href']."'";

0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
10 mars 2010 à 19:43
Essai ça:
$sqlA='SELECT id,titre,chapeau,date,categorie,img FROM wb_article WHERE visible="1" AND categorie="'.mysql_real_escape_string($_GET['href']).'" ORDER BY date DESC;
0
Titial69 Messages postés 259 Date d'inscription lundi 22 février 2010 Statut Membre Dernière intervention 11 mars 2010 20
10 mars 2010 à 19:45
exact, il faut aussi mettre entre guillement le "1", après je crois que ca ne change rien si on utilise " ou ', non ?
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
10 mars 2010 à 19:47
Non par contre j'ai surtout interverti le ORDER BY avec le WHERE et rajouté la fonction mysql_real_escape_string()
0
Titial69 Messages postés 259 Date d'inscription lundi 22 février 2010 Statut Membre Dernière intervention 11 mars 2010 20
10 mars 2010 à 19:50
ah oui, j'avais meme pas vu ca.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
et bien si j'essaie

$sqlA="SELECT id,titre,chapeau,date,categorie,img FROM wb_article ORDER BY date DESC WHERE visible=1 AND categorie='".$_GET['href']."'";

je garde exactement le même problème qu'il ne veut pas aller dans ma categorie mais pour cette erreur ci cette fois

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE visible=1 AND categorie='\'roman\''' at line 1


et si j'essaie celui ci

$sqlA='SELECT id,titre,chapeau,date,categorie,img FROM wb_article WHERE visible="1" AND categorie="'.mysql_real_escape_string($_GET['href']).'" ORDER BY date DESC;

et bien il ne m'affiche même plus ma page j'ai directement droit à ceci

PHP Error Message

Parse error: syntax error, unexpected T_STRING in /home/a1568083/public_html/index.php on line 27

Free Web Hosting

mais j'ai quand meme teste en tapant moi meme dans l'url https://www.000webhost.com/migrate?static=true

et il m'affiche ca

Parse error: syntax error, unexpected T_STRING in /home/a1568083/public_html/index.php on line 27

je pense que la premiere requete je l'avais deja essayer mais le mysql_real_escape_string je ne connaissais pas
0
Titial69 Messages postés 259 Date d'inscription lundi 22 février 2010 Statut Membre Dernière intervention 11 mars 2010 20
10 mars 2010 à 20:24
essai d'inverser les " et les ' dans la solution 2
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
10 mars 2010 à 20:33
Ma requête est bonne. Le souci n'est pas là.

Qu'as tu a la ligne 27 ?
0
non ca ne change rien mais normalement php ne fait pas de différence entre ' et " juste qu'il faut refermer avec le même et encore la plupart du temps il accepte la fermeture même si on n'utilise pas le même
0
en fait mon code est rangé sur plusieurs page j'ai donc ma page index avec tout ce qui est php et une page vue.php ou est noté tout ce qui s'affichera à l'écran de l'utilisateur et à la ligne 27 de mon index j'ai juste un include ('vue.php');
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
10 mars 2010 à 21:02
Je le vois pas dans ton code cité précédemment...
0
C'est par ce que j'ai regroupé tout sinon il y a aussi une page config avec tout ce qui est utile à la connection à la base de donnée, une page screen pour le css et la fonction fetchall se trouve sur une page modele.php ou je regroupe mes fonction c'est le systeme que personne n'aime mais avec lequel j'ai apris a coder j'avais un prof qui aimait rangé tout pour que ca reste claire ^^
0
Après réflexion mon problème est qu'il me rajoute des \ de chaque côté de ma catégorie vu l'avertissement y a t-il une facon de codé qui utilise les \ peut etre pour prendre en compte les ""
0
Pff encore moi j'ai cru que j'avais trouvé la solution un ami viens de m'apprendre que c'était parce que le serveur utilise une version de php plus récente que la mienne et dans les nouvelles version lorsqu'on fait un $_GET['href'] par exemple et bien il crée de lui même une variable nommée $href de ce fait j'ai directement mis dans ma requete sql la variable

$sqlA="SELECT id,titre,chapeau,date,categorie,img FROM wb_article WHERE visible='1' AND categorie='$href'" ;

mais j'ai maintenant droit à une erreur php lorsque je vais sur une page de catégorie

Warning: Invalid argument supplied for foreach() in /home/a1568083/public_html/vue.php on line 48

cette erreu me signale qu'une des éléments de mon tableau qui est parcouru par ma boucle foreach n'est pas valide j'ai donc vérifié toute mes table et j'ai fini par mettre la verifier ma requete sql par phpmyadmin en remplacant bien entendu $href par le nom d'une catégorie et il me trouve effectivement tout les éléments demandé donc je passe d'un problème à l'autre juste pour m'amuser un peu ^^
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
11 mars 2010 à 19:49
Quel est le contenu précis du fichier vue.php ?
0
je vais donc faire un long message

vue.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" xml:lang="fr-BE" lang="fr-BE">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title><?php echo (TITRE.' - '.$soustitre); ?></title>
<link rel="stylesheet" type="text/css" href="screen.css" media="screen" title="Normal"/>
</head>

<body>
<div id="conteneur">
<div id="entete">

<h1>
<a href="index.php" title="lien vers la page principal" class="lienlogo" >
<img src="logoplein.png" title="Logo de Richard Faymonville" alt="erreur au chargement du logo" id="logo" height="121px" width="159px"/>
</a>
</h1>
</div> <!-- fin en tete -->
<div id="contenu">
<div id="menu">
<ul id="cat">
<li class="titremenu">
Catégories
</li>
<li class="itemmenu">
<a href="index.php" title="retour vers la page d'accueil" class="lienmenu" >
Page Principale
</a>
</li>
<?php
foreach($cate as $cat) {
?>
<li class="itemmenu">
<a href="?href='<?php echo ($cat['href']); ?>'" title="<?php echo $cat['title'];?>" class="lienmenu" >
<?php echo $cat['intitule']; ?>
</a>
</li>
<?php
}
?>
</ul>
</div> <!-- fin menu -->
<div id="corps">
<?php
foreach ($articles as $article){
?>
<ul class="article">
<li class="titre">
<h2>
<a href="?id=<?php echo $article['id']; ?>" class="titre" title="Permet de voir l'articles en entier" >
<?php echo $article['titre']; ?>
</a>
</h2>
</li>
<li class="image">
<a href="?id=<?php echo $article['id']; ?>" class="titre" title="Permet de voir l'articles en entier" >
<img <?php echo $article['img']; ?>/>
</a>
</li>
<li class="date">
<p>
Edité <?php echo strftime('en %Y',strtotime($article['date'])); ?>
</p>
</li>
<li class="chapeau">
<?php echo($article['chapeau']); ?>
</li>
<li class="texte">
<?php echo($article['texte']); ?>
</li>
<li class="vide">
</li>
</ul>
<?php
}
?>
</div><!-- fin corps -->
</div> <!-- fin contenu -->
<div id="pieddepage">
<p class="layout">
<a href="https://www.000webhost.com/migrate?static=true" title="lien vers le portfolio de Tatiana Faymonville" class="lien" >
Layout created by Tatiana
</a>
</p>
</div> <!-- fin pied de page -->
</div> <!-- fin conteneur -->
</body>
</html>




Index.php

<?php
include ('config.php');
include ('modele.php');
mysql_connect(HOST,USER,PASS) or die(mysql_error());
mysql_select_db(DBNAME) or die(mysql_error());


if(isset($_GET['id'])){
if(is_numeric($_GET['id'])){
$sqlA="SELECT id,titre,date,texte,categorie,img FROM wb_article WHERE visible='1' AND id=".$_GET['id'] ;
} else {
$sqlA="SELECT id,titre,chapeau,date,categorie,img FROM wb_article WHERE visible='1' AND id='1' ";
}
}else{
$sqlA="SELECT id,titre,chapeau,date,categorie,img FROM wb_article WHERE visible='1' AND id='1' ORDER BY date DESC";
}
if(isset($_GET['href'])){
$sqlA="SELECT id,titre,chapeau,date,categorie,img FROM wb_article WHERE visible='1' AND categorie=".$_GET['href'] ;
}

$sqlC="SELECT id,intitule,href,title FROM categories";

$cate = fetchAll($sqlC);

$articles = fetchAll($sqlA);

include ('vue.php');
?>



modele.php

<?php
define('TITRE','Formateur Richard Faymonville');
$soustitre = 'Formateur' ;

//$sqlA='SELECT id,titre,texte,chapeau,date FROM wb_article';

//$sqlC='SELECT id,auteurcom,datecom,adresse,site,com FROM commentaires ORDER BY datecom DESC';

function fetchAll($sql){

$res=mysql_query($sql) or die(mysql_error());
while($tuple=mysql_fetch_assoc($res)){
$tuples[]=$tuple;
}
return $tuples;
}
?>






config.php

<?php
define('HOST','localhost');
define('USER','root');
define('PASS','');
define('DBNAME','richard');
?>



Base de donnée

table wb_article
id, titre, chapeau, texte, date, img, cotegorie, visible

exemple:
id= 1
titre = L'academie
chapeau = dans l'academie...
texte = dans l'academie de mon village on apprend la musique
date= 10/03/2010
img = src="" title=""
categorie = roman
visible = 1


table categories
id, intitule, href,title

exemple:
id = 1
intitule = Roman
href = roman
title = lien vers la page des roman
0