8795 sujets

Développement web côté serveur, CMS

Bonsoir,

Je souhaiterai avoir votre aide pour modifier mon code php.
J'aimerai transformé une url de ce type : http://www.nomdusite.com/produits-de-saison/fiche-legume.php?id_legumes=4

en ce résultat : http://www.nomdusite.com/produits-de-saison/artichaut

<?php 

// Déclaration des paramètres de connexion
$host = "localhost";
$user = "root";
$passwd = "";

$con=mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");

$bdd = mysql_select_db("eat-to-season", $con) or die("erreur de connexion a la base de donnees");

$res = mysql_query("SELECT * FROM `liste-legumes`") or die(mysql_error());

// Recuperation des resultats
echo "		<section class='ff-container'><ul class='ff-items'>";
while($row = mysql_fetch_array($res)){
	echo "<li><a href='fiche-legume.php?id_legumes=".$row['id_legumes']."'><span>".$row['noms']."</span> <img alt=".$row['noms']." src='".$row['image']."' /></a></li>";
}
echo "</ul></section>";
// Deconnexion de la base de donnees
mysql_close();

?>	


auriez-vous la possibilité de m'aider ?
Va voir de ce coté : http://www.webrankinfo.com/dossiers/techniques/tutoriel-url-rewriting

Lis attentivement le tutoriel, pratique le avec leurs exemples et une fois que tu as bien compris le principe, adapte les lignes selon ton projet.

Faire une selection via le nom n'est pas des plus précis... Vu que la clé primaire de ta base est unique et non nulle, la logique voudrait qu'on se serve de l'id_legume.

Autrement tu peux très bien le faire via le nom en modifiant le code qu'on a travaillé sur l'autre topic en insérant dans le lien le nom et non pas l'id du légume. (Ne pas oublier de modifier ton autre page en conséquence vu que ce n'est plus une requête selon l'ID)

Ensuite pour que ton lien ressemble a /produits-de-saison/lenom, tu devra passer par l'URL Rewriting.
Modifié par Apoooo (19 Sep 2012 - 09:45)
Apoooo a écrit :
Va voir de ce coté : http://www.webrankinfo.com/dossiers/techniques/tutoriel-url-rewriting

Lis attentivement le tutoriel, pratique le avec leurs exemples et une fois que tu as bien compris le principe, adapte les lignes selon ton projet.

Faire une selection via le nom n'est pas des plus précis... Vu que la clé primaire de ta base est unique et non nulle, la logique voudrait qu'on se serve de l'id_legume.

Autrement tu peux très bien le faire via le nom en modifiant le code qu'on a travaillé sur l'autre topic en insérant dans le lien le nom et non pas l'id du légume. (Ne pas oublier de modifier ton autre page en conséquence vu que ce n'est plus une requête selon l'ID)

Ensuite pour que ton lien ressemble a /produits-de-saison/lenom, tu devra passer par l'URL Rewriting.



super, le tuto à l'air très bien fait !! je laisse le post actif au cas ou !!!

Merci Apoooo
Apoooo a écrit :
Va voir de ce coté : http://www.webrankinfo.com/dossiers/techniques/tutoriel-url-rewriting


effectivement le tuto est très bien fait ! j'ai procédé comme dans l'exemple et ça à marché (mais j'ai quand même du toucher à mon serveur local wamp qui n'était pas paramétré pour les url rewriting).

J'ai donc adapté l'exemple à mon projet est là ... bah ça ne marche pas !.

1/ j'ai créer un fichier .htaccess dans lequel j'ai écris ce code

a écrit :

#--------------------------------------------------
# Répertoire : /produits-de-saison/
#--------------------------------------------------

# Le serveur doit suivre les liens symboliques :
Options +FollowSymlinks

# Activation du module de réécriture d'URL :
RewriteEngine on

#--------------------------------------------------
# Règles de réécriture d'URL :
#--------------------------------------------------

# exemple
RewriteRule ^([0-9]+)$ fiche-legume.php?id_legumes=$1 [L]


2 / j'ai placé ce fichier dans le dossier contenant le fichier php "fiche-legume"

Auriez-vous une idée du problème ?
Oui.

RewriteRule fiche-legume-([0-9]+)-([a-z]+).html$ /fiche-legume.php?id_legumes=$1


Petite explication :

RewriteRule => Règle qui dit au serveur qu'on utilise l'URL rewriting

fiche-legume-([0-9]+)-([a-z]+).html$ => Toutes les adresses de ton site qui se termineront par fiche-legume-(une suite de chiffre)-(une suite de lettre).html

/fiche-legume.php?id_legumes=$1 => Afficheront en fait la page fiche-legume.php?id_legumes=(la suite de chiffre)

J'ai rajouté la suite de lettre au cas où tu veuilles mettre aussi le nom du légume, mais tu n'es pas obligé de t'en occuper pour l'instant, ce qui donnerait :
RewriteRule fiche-legume-([0-9]+).html$ /fiche-legume.php?id_legumes=$1


Ensuite, dès que tu écriras dans ta barre d'adresse http://www.monsite.com/fiche-legume-3.html, ça sera comme si tu avais tapé http://www.monsite.com/fiche-legume.php?id_legumes=3
Modifié par MattBPA (20 Sep 2012 - 23:29)
Le plus dur avec l'URL Rewriting (ce n'est que mon avis), c'est de bien faire attention aux chemins que tu mets pour pointer sur les fichiers. Cela dépend de où se trouve ton .htaccess, ton fichier source et le lien que tu veux faire apparaitre dans le navigateur...

Si je ne fais pas d'erreur sur ton arborescence, essai ceci :
RewriteRule ^([0-9]+)[b]/[/b]$ [b]./[/b]fiche-legume.php?id_legumes=$1 [L]


1 - Le rajout de "/" stipulera que tu souhaites que ton lien se termine par un répertoire virtuel plutot qu'un fichier .html,.php ou autre...

2 - L'ajout de "./" devant le fichier précisera que le fichier fiche-legume.php se trouve dans le dossier courant où se situe le fichier .htaccess où tu mets tes règles.

Tiens nous au jus !
Modifié par Apoooo (21 Sep 2012 - 09:21)
Apoooo a écrit :
Le plus dur avec l'URL Rewriting (ce n'est que mon avis), c'est de bien faire attention aux chemins que tu mets pour pointer sur les fichiers. Cela dépend de où se trouve ton .htaccess, ton fichier source et le lien que tu veux faire apparaitre dans le navigateur...

Si je ne fais pas d'erreur sur ton arborescence, essai ceci :
RewriteRule ^([0-9]+)[b]/[/b]$ [b]./[/b]fiche-legume.php?id_legumes=$1 [L]


1 - Le rajout de &quot;/&quot; stipulera que tu souhaites que ton lien se termine par un répertoire virtuel plutot qu'un fichier .html,.php ou autre...

2 - L'ajout de &quot;./&quot; devant le fichier précisera que le fichier fiche-legume.php se trouve dans le dossier courant où se situe le fichier .htaccess où tu mets tes règles.

Tiens nous au jus !


Je crois que tu lis dans mes pensées. Effectivement le code que j avais essayé d écrire avait comme but de ne plus voir apparaître .html ou .php.

Je n ai pas encore pu tester la modification du code avec le "/" mais je le fais des ce soir et je donne mon retour d expérience juste après.
Apoooo a écrit :
Le plus dur avec l'URL Rewriting (ce n'est que mon avis), c'est de bien faire attention aux chemins que tu mets pour pointer sur les fichiers. Cela dépend de où se trouve ton .htaccess, ton fichier source et le lien que tu veux faire apparaitre dans le navigateur...

Si je ne fais pas d'erreur sur ton arborescence, essai ceci :
RewriteRule ^([0-9]+)[b]/[/b]$ [b]./[/b]fiche-legume.php?id_legumes=$1 [L]




Salut, bon j'ai donc modifié mon code par celui proposé ci-dessus, j'ai également modifié le lien dans une de mes pages (celle qui appel le fichier fiche-legume.php), mais je rencontre le souci de la page 404 Not found !!

j'ai donc essayé de retiré le ./ car dans mon test (avec l'exercice précédent je n'en avait pas eu besoin !) mais là aussi je fais chou blanc.

donc en résumé, j'ai du oublié quelques chose !

pour ceux qui n'aurait pas eu toutes les infos, j'ai un dossier "produits-de-saison" contenant le fichier "legumes-de-saison.php", mon .htaccess et le fichier "fiche-legume.php".

avant de vouloir utiliser l'URL rewriting, ma page legumes-de-saison appelait via un lien la page fiche-legume, ce que je souhaitais faire dans un premier temps, c'était de voir apparaitre uniquement le chiffre du produit dans l'url sans voit fiche-legume.php?id_legumes= + le chiffre du produit appelé dans la base de sonnée.
Peux tu poster ton .htaccess et le code où se trouve ton lien vers ta page ? L'erreur vient peut être de ton lien qui n'est pas correct et donc la réécriture ne le reconnait pas.

Tu confirmes que ton arborescence est comme suit ? :
-- RACINE
|-> /produits-de-saison/
    |-> .htaccess
    |-> legumes-de-saison.php
    |-> fiche-legume.php 

Modifié par Apoooo (25 Sep 2012 - 11:51)
Apoooo a écrit :
Peux tu poster ton .htaccess et le code où se trouve ton lien vers ta page ? L'erreur vient peut être de ton lien qui n'est pas correct et donc la réécriture ne le reconnait pas.

Tu confirmes que ton arborescence est comme suit ? :
-- RACINE
|-&gt; /produits-de-saison/
    |-&gt; .htaccess
    |-&gt; legumes-de-saison.php
    |-&gt; fiche-legume.php 


Je confirme !!

Mon .htaccess
#--------------------------------------------------
# Répertoire : /produits-de-saison/
#--------------------------------------------------

# Le serveur doit suivre les liens symboliques :
Options +FollowSymlinks

# Activation du module de réécriture d'URL :
RewriteEngine on

#--------------------------------------------------
# Règles de réécriture d'URL :
#--------------------------------------------------

# exemple
RewriteRule ^([0-9]+)/$ ./fiche-legume.php?id_legumes=$1 [L]


le contenu php dans le page : "legumes-de-saison.php"


<?php 

// Déclaration des paramètres de connexion
$host = "localhost";
$user = "root";
$passwd = "";

$con=mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");

$bdd = mysql_select_db("eat-to-season", $con) or die("erreur de connexion a la base de donnees");

$res = mysql_query("SELECT * FROM `liste-legumes`") or die(mysql_error());

// Recuperation des resultats
echo "		<section class='ff-container'><ul class='ff-items'>";
while($row = mysql_fetch_array($res)){
	echo "<li><a href='fiche-legume.php?id_legumes=".$row['id_legumes']."'><span>".$row['noms']."</span> <img alt=".$row['noms']." src='".$row['image']."' /></a></li>";
}
echo "</ul></section>";
// Deconnexion de la base de donnees
mysql_close();

?>	


et enfin ma page : "fiche-legume.php"

<?php 

// Déclaration des paramètres de connexion
$host = "localhost";
$user = "root";
$passwd  = "";

// Connexion au serveur
$con=mysql_connect($host,$user,$passwd) or die("erreur de connexion au serveur");

$bdd = mysql_select_db("eat-to-season", $con) or die("erreur de connexion a la base de donnees");

$id=$_GET['id_legumes'];

// Creation et envoi de la requete
$res = mysql_query("SELECT * FROM `liste-legumes` WHERE id_legumes='".$id."' ") or die(mysql_error());

while($rows = mysql_fetch_array($res)){
         // Tu génères ta page avec les données.
		 
// Deconnexion de la base de donnees
?>	

			<h2 class="ribbon"><span>Tout sur <?php echo $rows['particule'] ?> 
<?php	if (isset($rows['noms']))
	{
	echo $rows['noms']."</span></h2>";
	}
	else // Il manque des paramètres, on avertit le visiteur
	{
		echo "Ce légume n\'éxiste pas!";
	}
?>
			<div class="featured">
			<img width="60%" src="<?php echo $rows['image'] ?>"/>
			<script type="text/javascript"><!--
			google_ad_client = "ca-pub-8634071726964693";
			/* ban légume */
			google_ad_slot = "5035862001";
			google_ad_width = 200;
			google_ad_height = 90;
			//-->
			</script>
			<script type="text/javascript"
			src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
			</script>
			</div>
			
			<div class="featured">
			<h3 class="title">Informations sur le produit</h3>
			<p><b>Nom anglais :</b> <?php echo $rows['name'] ?></p>
			<p><b>Saison (s) : <?php echo $rows['saison'] ?></b></p>
			<p><b>A consommer de préférence entre :</b> <?php echo $rows['mois_debut'] ?> à <?php echo $rows['mois_fin'] ?></p>
			<p><b>Provenances :</b> <?php echo $rows['provenance'] ?></p>
			<p><b>Variétées :</b> <?php echo $rows['varietees'] ?></p>
			<p><b>Couleur :</b> <?php echo $rows['couleurs'] ?></p>
			<a href="../dietetique-poids-sante.html" accesskey="5" class="more"><i>découvrez toutes les informations liées aux couleurs.</i></a>
			<p>&nbsp;</p>
			</div>
			
			<div class="featured">
			<h3 class="title">Valeurs nutritionnelles : <?php echo $rows['noms'] ?></h3>
			<aside class="nutrition">
			<p><b>Protéines :</b> <?php echo $rows['proteines'] ?> g</p>
			<p><b>Lipides :</b> <?php echo $rows['lipides'] ?> g</p>
			<p><b>Glucides :</b> <?php echo $rows['glucides'] ?> g</p>
			<p><b>Calories :</b> <?php echo $rows['calories'] ?> kcal</p>
			<p><b>Fibres :</b> <?php echo $rows['fibres'] ?> g</p>
			<p><i>Valeurs pour 100g</i><br>Source ANSES Ciqual 2012 (Fr), Fichier Canadien 2010, Nubel (Be)</p>
			</aside>
			</div>
					
			<h2 class="ribbon"><span>Choisir et conserver</span></h2>
			<div class="featured">
			<h3 class="title">Nos conseils pour vos achats</h3>
			<p><?php echo $rows['conseil_achat'] ?></p>
			</div>

	        <div class="featured">
			<h3 class="title">Comment conserver <?php echo $rows['particule'] ?> <?php echo $rows['noms'] ?></h3>
			<p><?php echo $rows['conservation'] ?></p>
			</div>
		
			<h2 class="ribbon"><span>Idées recettes : <?php echo $rows['particule'] ?> <?php echo $rows['noms'] ?> dans tous ses états</span></h2>
			<div>
			<p><?php echo $rows['recettes_preconisees'] ?></p>
			<p>en cours de rédaction</p>
			</div>
		<?php } 
		
		mysql_close();
		?>

Modifié par dafid5 (26 Sep 2012 - 08:10)
Je viens de le faire de mon coté, normalement tu n'as aucun soucis au niveau de ton .htaccess.

Le soucis vient de ton lien. Le but de l'URL Rewriting est de stipuler au serveur un moyen d'interpréter telle ou telle URL donnée afin d'afficher une autre page. Donc si tu crées une règle et que tu ne lui changes pas le lien, il n'y a pas d'intéret...

Donc ton code :
echo "<li><a href='fiche-legume.php?id_legumes=".$row['id_legumes']."'><span>".$row['noms']."</span> <img alt=".$row['noms']." src='".$row['image']."' /></a></li>";


Se transforme tout simplement en :
echo "<li><a href='".$row['id_legumes']."/'><span>".$row['noms']."</span> <img alt=".$row['noms']." src='".$row['image']."' /></a></li>";


Le lien est donc sous la forme http://domaine.fr/produits-de-saison/1
Le serveur va interprété ton lien sous la forme "http://domaine.fr/produits-de-saison/fiche-legume.php?id_legumes=1

(en admettant que le legume à pour ID 1 sur ce lien...)

Je te met le .htaccess que j'ai utilisé pour tester, à savoir que le "./" que je t'avais mis n'est pas utile vu que le fichier fiche-legume.php est dans le même dossier que le .htaccess :
Options +FollowSymLinks
RewriteEngine On 

# Redirections simples
RewriteRule ^([0-9]+)/$ fiche-legume.php?id_legumes=$1 [L]


Normalement ca devrait etre tout bon. Smiley cligne
Modifié par Apoooo (26 Sep 2012 - 09:15)
Apoooo a écrit :
Normalement ca devrait etre tout bon. Smiley cligne



ça fonctionne .. presque

J'ai bien modifié l'URL dans mon code php
echo "<li><a href='".$row['id_legumes']."/'><span>".$row['noms']."</span> <img alt=".$row['noms']." src='".$row['image']."' /></a></li>";

et enlever le "./" du fichier .htaccess

Les pages apparaissent bien avec le format d'URL souhaité, mais la mise en forme de la page (css) ne se fait pas! faut-il redéfinir une url dans le fichier htaccess pour indiquer ou se trouve le fichier css ?
Modifié par dafid5 (26 Sep 2012 - 23:50)
dafid5 a écrit :

ça fonctionne .. presque


Si ta page s'est affiché, c'est que ça fonctionne, il n'y a pas de "presque" avec l'URL Rewriting ^^

Il faut juste que tu penses au lien de tes fichiers CSS.

Explication :
Ton navigateur affiche : http://domaine.fr/produits-de-saison/1/
Cela équivaut à ceci selon l'interprétation du navigateur : http://domaine.fr/produits-de-saison/1/index.html

Par conséquent, ta page fiche-legume.php (qui se trouve dans le dossier produits-de-saison et non dans un répertoire avec un ID de légume) qui a des liens vers les fichiers CSS en relatif n'est plus bonne.

Il faut que tes fichiers CSS soient pointés en suivant ton nouveau lien et non plus la vrai arborescence sur ton FTP.

Je pense qu'il suffit simplement à ton lien de lui faire un retour en arrière dans les répertoires :
<link rel="stylesheet" type="text/css" href="../styles.css" />


Enfin à toi de voir selon le vrai emplacement de ton fichier CSS... je ne le connais pas.

Un autre conseil pour ne pas avoir d'erreur de ce genre :
- tu te crée un fichier de config.php
- tu insères une variable $domain="http://www.ton-domaine.fr/";
- Sur tes pages, tu fais un require 'config.php';
- Ensuite, pour tout ce qui est lien vers des fichiers externes (css, js, img ou autre...), tu mets un :
<link rel="stylesheet" type="text/css" href="<?php echo $domain;?>styles.css" />


Comme cela, tous tes liens sont en absolu et donc tu n'auras plus de problèmes vu que le chemin vers le fichier sera toujours à partir de la racine.
Apoooo a écrit :

[code=php]
Un autre conseil pour ne pas avoir d'erreur de ce genre :
- tu te crée un fichier de config.php
- tu insères une variable $domain=&quot;http://www.ton-domaine.fr/&quot;;
- Sur tes pages, tu fais un require 'config.php';
- Ensuite, pour tout ce qui est lien vers des fichiers externes (css, js, img ou autre...), tu mets un :
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;&lt;?php echo $domain;?&gt;styles.css&quot; /&gt;


Comme cela, tous tes liens sont en absolu et donc tu n'auras plus de problèmes vu que le chemin vers le fichier sera toujours à partir de la racine.


Super, j'essaye ce soir cette méthode, ça m'a l'air plus simple et propre !

Encore Merci Apooo et peut-être à bientôt pour un problème d'accentuation ! (sur un autre post)
Modifié par dafid5 (27 Sep 2012 - 10:47)