Variable dans les URL [resolu]

Eléphanteau du PHP | 34 Messages

17 oct. 2009, 22:28

Bonjour,

a vrai dire ma situation est plutot atypique.
J'ai appris le langage xhtml/CSS php/mysql sans réelle cohésion. C'est à dire que j'apprenais seulement en fonction de mes besoins.

ET là j'ai de réelles lacunes, notamment sur un aspect qui doit être fondamental pour vous.

Les url en test.php?=
que je ne sais pas faire

Voilà mon soucis:
Soit une table simple:
id
nom
prenom

ma requete:

Code : Tout sélectionner

$data = mysql_query("SELECT DISTINCT nom FROM table ORDER BY categories ASC"); // Requête SQL while ($donnees = mysql_fetch_array($data) ) { ?> <div id="links" class="col1"> <?php echo htmlentities(trim($data['nom'])); ?>
Rien de compliqué on affiche les nom.

Sauf que je voudrais que en cliquant sur le nom, cela me renvoie automatiquement vers une page où sont affichés tous les prénoms correspondant au nom.
En gros que je recup ma variable nom, que je la transmets dans l'url, que la nouvelle page affiche tous les prenoms du nom.


ET là grand vide sidéral pour moi. Je ne sais pas par où commencer. CA fait 3 jours que je regarde différents sites mais j'avance pas du tout.
Modifié en dernier par koliom le 18 oct. 2009, 05:09, modifié 1 fois.

ViPHP
ViPHP | 3607 Messages

17 oct. 2009, 23:02

Je pense que pour commencer avant de fair ele lien entre les pages, il faut coder ta deuxième page qui afficherai les prénoms poru un nom donné...
Donc il faut récupérer de quoi identifier la personne dont on veut afficher les prénoms, pour celà, on pourrait faire passer le nom dans l'url, mais, il se peut que plusieurs personnes aient le même nom et puis il y a plus de risque de corrompre des données textes que de prendre par exemple l'id correpondant dans ta table :)

Donc si on crée le fichier "afficheprenoms.php" comme ceci:
<?php

// conneciton à la bdd etc...

// SI on a un paramètre correct
if(!empty($_GET['nom'])){
    // On récupère et protège la variable
    $nom=mysql_real_escape_string($_GET['nom']);
    // On crée la requête qui récupère les prénoms
    $sql="SELECT prenom FROM tatable WHERE nom='".$nom."'";
    $results= mysql_query($sql) or die(mysql_error().'<br />Requête: '.$sql);

    echo 'Nom : '.$nom.'<br />Prénoms : <br />';

    while($entry = mysql_fetch_assoc($results)){
        echo '-'.$entry['prenom'].'<br />';
    }
}
// Sinon on affiche un message d'erreur
else {
    echo 'error!';
}
Voilà!
Et ensuite pour ce qui est du lien vers cette page, rien de plus simple:
<?php
$data = mysql_query("SELECT DISTINCT nom FROM table ORDER BY categories ASC"); // Requête SQL

while ($donnees = mysql_fetch_array($data) )
{
?>

<div id="links" class="col1">

<a href="afficheprenoms.php?nom=<?php echo urlencode($data['nom']);?>" title="Afficher les prenoms">
<?php echo htmlentities(trim($data['nom'])); ?>
</a>
N'hésite pas à demander ce qui te parait pas évident... Et il reste surement des erreurs dans le code puisque fait de tête sans tester ;)
Bonne soirée

ViPHP
ViPHP | 2291 Messages

17 oct. 2009, 23:07

Salut,

Pour le lien.
<?php
echo '<a href="page.php?nom='.$donnees['nom'].'">Lien</a>';
?>
Et la recupération des données dans page.php :
$Nom = (isSet($_GET['nom']) ? $_GET['nom'] : null);

$Sql = "SELECT * FROM MATABLE WHERE nom = '".$Nom."'";
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 2291 Messages

17 oct. 2009, 23:16

<a href="afficheprenoms.php?nom=<?php echo urlencode($data['nom']);?>" title="Afficher les prenoms">
<?php echo htmlentities(trim($data['nom'])); ?>
A mon avis jojolapine voulais dire
<a href="afficheprenoms.php?nom=<?php echo urlencode($donnees['nom']);?>" title="Afficher les prenoms">
<?php echo htmlentities(trim($donnees['nom'])); ?>
:wink:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphanteau du PHP | 34 Messages

18 oct. 2009, 01:59

Bonsoir,

merci pour vos réponses.

J'ai essayé d'adapter à mes fichiers.
J'ai donc un fichier categories.php:
// On se connecte a la db 

 <?php
$data = mysql_query("SELECT DISTINCT categories FROM infos_tbl ORDER BY categories ASC"); // Requête SQL  
// On fait une boucle pour lister tout ce que contient la table :
 while ($donnees = mysql_fetch_array($data) )
{
?>			
 
 <div id="links1" class="col1">	  
					 
			<h2><font color="#00000"> <?php echo $donnees['categories']; ?> </h2>
			 <p> <center><a href="test.php?categories=<?php echo urlencode($donnees['categories']);?>" title="Afficher les prenoms">
<?php echo htmlentities(trim($donnees['categories'])); ?> </a>	     </p>         </div>                  
// on ferme la db.....


Ma page test.php
<?php
// conneciton à la bdd etc...

// SI on a un paramètre correct
if(!empty($_GET['categories'])){
// On récupère et protège la variable
$categories=mysql_real_escape_string($_GET['categories']);
	 // On crée la requête qui récupère les prénoms
    $sql="SELECT * FROM infos_tbl WHERE categories='".$categories."'"  ;
    $results= mysql_query($sql) or die(mysql_error().'<br />Requête: '.$sql);
   // on va scanner tous les tuples un par un
while ($data = mysql_fetch_array($results)) {	
  // Sinon on affiche un message d'erreur
?>
   		<div id="links" class="col4">
  <h3><font color="#ffffff"> <?php echo  htmlentities(trim($data['prenom'])); ?> <?php	 echo  htmlentities(trim($data['nom'])); ?></h3>
	
   </div>	
   <?php
 }
 } else {
    echo 'error!';
}   


?>		
Le resultat:
Ca marche

Maintenant je voudrais complexifier ma requete de mon fichier test.php
Car ma bdd le champ categories, le champ categories2 et le champ categories3
donc:
$sql="SELECT * FROM infos_tbl WHERE categories='".$categories."' OR categories2='".$categories2."' OR categories3='".$categories3."'"  ;
Une requete comme ça.
Il faut donc que je définisse les variables $categories2 et $categories3

Désolé de paraitre aussi nul, mais c'est vraiment un aspect de php que j'ai complétement délaissé à tort.
Et làç, je veux combler cette grave lacune.

ViPHP
fab
ViPHP | 2657 Messages

18 oct. 2009, 02:21

Tu peux faire un copié collé du message d'erreur?
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 34 Messages

18 oct. 2009, 02:31

Si je remplace la requete initiale par celle-là
$sql="SELECT * FROM infos_tbl WHERE categories='".$categories."' OR categories2='".$categories2."' OR categories3='".$categories3."'"  ;
voia l'erreur:
Notice: Undefined variable: categories2 in C:\Program Files\EasyPHP5.3.0\www\test.php on line 50
Notice: Undefined variable: categories3 in C:\Program Files\EasyPHP5.3.0\www\test.php on line 50

La ligne 50 est celle de la requete

Normal dirais-je vu que categories2 et categories3 ne sont pas définis.

Mais je ne sais pas où et quand les définir. J'essaye plusieurs choses depuis mais rien de nouveau

ViPHP
fab
ViPHP | 2657 Messages

18 oct. 2009, 02:43

Les variables $categories2 et $categories3 n'existent pas :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 34 Messages

18 oct. 2009, 02:47

Ouep :D
ce que j'ai dit plus haut
Mais je ne sais pas où et quand les définir. J'essaye plusieurs choses depuis mais rien de nouveau.

J'ai pas avancé depuis

ViPHP
fab
ViPHP | 2657 Messages

18 oct. 2009, 02:52

Pardon, j'avais traversé le sujet un peu en diagonale...

Tu voudrais quoi en fait ? que le $_GET['categories'] correspondent au categorie1 ou categorie2 ou categorie3 de ta table sql?

je crois que je te suis pas trop là en fait..
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 34 Messages

18 oct. 2009, 03:11

c'est bon j'ai trouvé:

fallait faire ceci:
$sql="SELECT * FROM infos_tbl WHERE categories='".$categories."' OR categories2='".$categories."' "  ;
Maintenant vu que j'ai bcp de résultats (100), j'ai mis mon script de barre de navigation qui affiche 6 résultats par page.

ma requete
$sql="SELECT * FROM infos_tbl WHERE categories='".$categories."' OR categories2='".$categories."' ORDER BY id DESC LIMIT".$_GET['debut'].','.$nb_affichage_par_page;  ;

Il me met parse error sur cette ligne.

Peut etre dois-je ouvrir un nouveau topic vu qu'on change de sujet, non ?
Et je pourrais mieux expliquer mon soucis

ViPHP
fab
ViPHP | 2657 Messages

18 oct. 2009, 03:24

On peut continuer ici t'inquiète pas :) surtout pour la parse error enfin arpès si tu veux qu'on explique la pagination etc.. effectivement fait un autre sujet :)

Parse error c'est que tu as des problèmes de syntaxe ( grammaire serait plus exacte si on parle version théorie des langages ), et effectivement regarde à la fin de ta requête on voit que tu as deux ; et que tu as pas fermé ton " de départ!

De plus de mettre $_GET['debut'] directement dans ta requête SQL est une très mauvaise idée! Car la première fois ou tu vas vouloir accéder à la page tu n'auras probablement pas ce paramètre d'url. La deuxième raison c'est la sécurité, c'est peut être encore un peu loin pour toi toutes ces considérations mais il ne faut jamais faire confiance à ce qui vient de l'utilisateur, là je te conseille donc de vérifier si la valeur est bien numérique :) ( Ce type de faille ça s'appelle l'injection sql )
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 34 Messages

18 oct. 2009, 03:37

Voila c'est bon j'ai réussi en faisant:
 $sql = "SELECT * FROM infos_tbl WHERE nom='".$nom."' ORDER BY id DESC LIMIT ".$_GET['debut'].','.$nb_affichage_par_page;	

Maintenant autre soucis :). Décidemment cette nuit est longue.

Categories.php
La requete:
$sql = 'SELECT * FROM infos_tbl ORDER BY id DESC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
// on affiche les résultats 

// on affiche le lien
<a href="test2.php?resultats=<?php echo urlencode($data['nom']);?>-<?php echo urlencode($data['prenom']);?>" title="Afficher les prenoms"><?php echo  htmlentities(trim($data['prenom'])); ?> <?php	 echo  htmlentities(trim($data['nom'])); ?></a>

// C'est simple je veux afficher la page test2.php?resultats=nom-prenom

Ok ma page test2 (ce qui nous concerne):
if(!empty($_GET['nom'])) {
    // On récupère et protège la variable
    $nom=mysql_real_escape_string($_GET['nom']);
	
	   // On crée la requête qui récupère les prénoms
   $sql = "SELECT * FROM infos_tbl WHERE nom='".$nom."' ORDER BY id DESC LIMIT ".$_GET['debut'].','.$nb_affichage_par_page;		
J'ai récupéré ce qu'on avait fait plus haut.
Il me faut donc integrer la variable prenom dans la requete et la déclarer.

Pour l'intregrer dans ma requete, je pense que c'est simple et ressemble à ceci:
$sql = "SELECT * FROM infos_tbl WHERE nom='".$nom."' AND prenom='".$prenom."'  ORDER BY id DESC LIMIT ".$_GET['debut'].','.$nb_affichage_par_page;	


Mon problème, comment la déclarer avant ?

ViPHP
fab
ViPHP | 2657 Messages

18 oct. 2009, 03:42

Et si tu transmettais deux paramètres en URL ? :p
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 34 Messages

18 oct. 2009, 03:45

c'est à dire ?

Je suis parti sur un truc comme ça:
if(!empty($_GET['nom']) AND !empty($_GET['prenom'])) {
Bonne piste?

EDIT:

Alors j'ai mis
<a href="test2.php?nom=<?php echo urlencode($data['nom']);?>&prenom=<?php echo urlencode($data['prenom']);?>" title="Afficher les prenoms">
et dans ma page test2:
if(!empty($_GET['nom']) AND !empty($_GET['prenom']))  {
    // On récupère et protège la variable
    $nom=mysql_real_escape_string($_GET['nom']);
$prenom=mysql_real_escape_string($_GET['prenom']);	
	   // On crée la requête qui récupère les noms et prénoms
   $sql = "SELECT * FROM infos_tbl WHERE nom='".$nom."' AND prenom='".$prenom."' ORDER BY id DESC LIMIT ".$_GET['debut'].','.$nb_affichage_par_page;		

	   
 
Error :) comme s'il me trouvait rien dans ma bdd :?:
En faisant des tests, c'est comme si la variable prenom etait

EDIT: résolu :D

MERCI BEAUCOUP
Modifié en dernier par koliom le 18 oct. 2009, 05:09, modifié 8 fois.