Remplacer un id par le nom récupéré dans une base de données

WRInaute passionné
si tu sais réécrire "www.exemple.fr/offre-25" alors tu sais réécrire "www.exemple.fr/offre-offre" et donc "www.exemple.fr/offre-nom" non...?

Ensuite, au lieu de chercher dans ta base de données par l'id, tu cherches par le nom (à condition qu'il y ait une relation 1<=> 1 entre l'id et le nom)

(Ou alors j'ai rient compris à ton problème...)
 
Nouveau WRInaute
Anto1982 a dit:
si tu sais réécrire "www.exemple.fr/offre-25" alors tu sais réécrire "www.exemple.fr/offre-offre" et donc "www.exemple.fr/offre-nom" non...?
Oui , mais je voudrais l'automatiser pour ne pas avoir à saisir chaque nom à la main sachant que j'en ai plus de 100

Anto1982 a dit:
Ensuite, au lieu de chercher dans ta base de données par l'id, tu cherches par le nom (à condition qu'il y ait une relation 1<=> 1 entre l'id et le nom)

(Ou alors j'ai rient compris à ton problème...)

Comme je n'ai pas créé le site je souhaiterais éviter de modifier le code, mais pour les relations 1-1 c'est peu être le plus simple
 
WRInaute passionné
OK, en fait, tu n'as pas de problème... juste un petit souci de logique.

pour avoir des adresses du type: "www.exemple.fr/offre-nom"

Tu as une base de données:
id|nom
1|nom1
2|nom2
...
n|nomn

sur ta page d'accueil (c'est un exemple). Tu vas faire appel à ta base de données pour afficher les liens vers les pages relatives à l'id 2 et l'id 6.

=> requete mysq
=> tu récupères les noms (nom2 et nom6)

=> tu écris tes liens vers tes pages <a href="www.exemple.fr/nom2">Nom2</a> et <a href="www.exemple.fr/nom6">Nom6</a>

=> Tu modifies ton htaccess avec un truc du genre:
RewriteRule ^([(a-z)(A-Z)(0-9)_]*)$ /offre.php?nom=$1 [L]

L'url "www.exemple.fr/nom2" pointera sur ton fichier php "offre.php"
dans ton fichier "offre.php" tu récupère la variable nom ($_GET['nom'])

=> requete mysql, (tu récuperes ce que tu veux dans ta base en cherchant par ta variable nom - qui aura la valeur "nom2")
=> Tu affiches ce que tu veux.

;-)

C'est ce que tu veux faire non?
 
Nouveau WRInaute
Anto1982 a dit:
OK, en fait, tu n'as pas de problème... juste un petit souci de logique.

pour avoir des adresses du type: "www.exemple.fr/offre-nom"

Tu as une base de données:
id|nom
1|nom1
2|nom2
...
n|nomn

sur ta page d'accueil (c'est un exemple). Tu vas faire appel à ta base de données pour afficher les liens vers les pages relatives à l'id 2 et l'id 6.

=> requete mysq
=> tu récupères les noms (nom2 et nom6)

=> tu écris tes liens vers tes pages <a href="www.exemple.fr/nom2">Nom2</a> et <a href="www.exemple.fr/nom6">Nom6</a>

Je comprends à peu près la logique que tu as l'air de dominer, mais malheureusement je n'y connais rien en requêtes sql.
J'ai lu des articles traitant mon problème, mais je n'ai rien trouvé d'assez clair pour un néophyte comme moi.
Je vais tenter. Pourquoi choisir la page index ? Est-ce que ça a une importance?

Merci
 
WRInaute passionné
Arg...; effectivement, sans avoir de base de données derrière, ça risque d'être non pas plus compliqué (enfin pour moi si) mais plus difficile à entretenir et mettre à jour...
 
Nouveau WRInaute
Anto1982 a dit:
Arg...; effectivement, sans avoir de base de données derrière, ça risque d'être non pas plus compliqué (enfin pour moi si) mais plus difficile à entretenir et mettre à jour...

J'ai bien une base de données.

Je reprends mon problème en détaillant

Je souhaite afficher des offres de formations selon des régions. je suis sur la page www.ex.fr/offres.php?all
J'ai un menu déroulant des régions de france
Je choisis Alsace une qui m'ouvre la page www.ex.fr/offre.php?code_region=25
je souhaiterais que cette url soit www.ex.fr/offre-alsace

Je peux déjà la réécrire sous la forme www.ex.fr/offre-25

Ensuite je plante pour remplacer 25 par alsace. Quelle requête sql dois-je faire?

Merci
 
WRInaute passionné
Ton menu, tu le récupères bien en faisant une requête dans ta base? (ou bien est-il écrit en "dur"?)

Quand tu écris ton menu, au lieu de mettre des liens
www.ex.fr/offre.php?code_region=25
tu mets des liens
www.ex.fr/offre-alsace
(en fait, tu fait ce que tu veux!)

(à cette étape, on n'en est pas encore à la réécriture!)

ensuite, quand tu vas cliquer sur ces liens, c'est la que la réécriture d'url entre en jeu.
Si tu n'as pas encore commencé à coder... on est un peu en train de parler dans le vide...

Anto
 
Nouveau WRInaute
L'idéal quand tu as des noms dont l'orthographe peut contenir des caractères spéciaux est de rajouter une colonne : "name_rewrited" par exemple, et de faire ta requête basé sur ce nom :
url : "/offre-pyrenees"
en base : ID = 25, name = "Pyrénées", name_rewrited = "pyrenees"

en PHP tu pourrais faire une petite fonction de ce style pour générer les noms ré-écrits :
Code:
function get_rewrited_name($name)
{
     $rname = str_replace("é","e",$name);
     $rname = str_replace(" ","_",$rname);
     ...
     return strtolower($name);
}
 
Nouveau WRInaute
Le site est ici : http://www.alternance.enils.fr/offres.php?all

Voici la fonction qui créé le lien vers les offres de la région à partir du choix effectué dans la liste

FIRST_REG_ est le nom de la région
Code:
function selectRegion() {

		$htm="<select name='CODE_REG'>\n";
		$htm.="<option value='' $sel>Toutes les régions</option>\n";
		$sql = "select   	CODE_REG  	, FIRST_REG_  from region order by FIRST_REG_ asc ";
		$res =mysql_query($sql);
		while ($r =mysql_fetch_array($res)) {
			if ($r[CODE_REG]==$_REQUEST['CODE_REG'])			$sel =" selected " ; else $sel ="";
			$htm.="<option value='".$r[CODE_REG]."' $sel>".ucfirst(strtolower( $r[FIRST_REG_] ))."  </option>\n";
		}
		$htm.="</select>\n";
		return $htm;


Je pense que c'est la ligne $htm. qui définit le lien. J'aimerais ajouter au lien crée le nom de la région, mais là je coince
 
WRInaute passionné
function selectRegion() {

$htm="<select name='CODE_REG'>\n";
$htm.="<option value='' $sel>Toutes les régions</option>\n";
$sql = "select CODE_REG , FIRST_REG_ from region order by FIRST_REG_ asc ";
$res =mysql_query($sql);
while ($r =mysql_fetch_array($res)) {
if ($r[CODE_REG]==$_REQUEST['CODE_REG']) $sel =" selected " ; else $sel ="";
$htm.="<option value='".$r[CODE_REG]."' $sel>".ucfirst(strtolower( $r[FIRST_REG_] ))." </option>\n";
}
$htm.="</select>\n";
return $htm;

En fait, dans ce code, il n'y a pas de lien... Je pense que c'est juste une liste, avec un formulaire qui te renvoi quelque part... (??) juste une liste déroulante (ou alors, tu as un code javascript qui te crée des liens...
Pour récuperer le nom de la region il faudrait faire un truc du genre

$sql = "select NOM_REG,CODE_REG , FIRST_REG_ from region order by FIRST_REG_ asc ";
$res =mysql_query($sql);
while ($r =mysql_fetch_array($res)) {
if ($r[CODE_REG]==$_REQUEST['CODE_REG']) $sel =" selected " ; else $sel ="";
$htm.="<option value='".$r[NOM_REG]."' $sel>".ucfirst(strtolower( $r[FIRST_REG_] ))." </option>\n";
}

ou "NOM_REG" serait le nom de la colonne dans laquelle se trouve le nom de la region dans Mysql...
 
Nouveau WRInaute
J'ai trouvé une autre fonction
Code:
if (isset($_REQUEST[CODE_REG])) {	
			echo "<form method=get>";
			echo "<div id=SelectTitre>Région</div>"; 
			echo $this->selectRegion();
			echo "<input type=image src=img/go.gif onClick=\"submit();\" />";
			echo "</form >";
		}

elle appelle la précédente
 
WRInaute passionné
En fait, c'est parceque tu ne publie pas des liens. Tu soumets un formulaire... Ce n'est pas la même methode (et du coup, c'est normal...

Pour naviguer dans certaines parties de mon site, je fais ça: (mais c'est pas bon pour le référencement...


Code:
<select onchange="if(this.value != ''){window.open(this.value, '_self')};" id="select_url">
<option value="http://tonurl.com/Offres/Region">Region</option>
<option value="http://tonurl.com/Offres/Region1">Region1</option>
</select>


<script type="text/javascript" language="javascript">var label = 'Go to Url' 
	var select01 = new selectRef.init('select_url', label)</script>
 
Discussions similaires
Haut