mettre les résultats d'une requete en lien qui recupère des donnees

Eléphant du PHP | 83 Messages

11 janv. 2008, 18:15

Salut

j'arrive à récupérer des données de ma base avec SELECT mais je voudrais que les données de mes titres apparaissent en lien vers la fiche qui correspond à ce titre
comment puis je faire Merci d'avance.

voila le code de ma 1ère page
<html >
<head>
<title>Document sans titre</title>
<style type="text/css">
<!--
#Layer1 {
	position:absolute;
	left:62px;
	top:130px;
	width:627px;
	height:266px;
	z-index:1;
}
#Layer2 {
	position:absolute;
	left:70px;
	top:100px;
	width:647px;
	height:226px;
	z-index:1;
}
-->
</style>
</head>

<body>
<div id="Layer2">
  <form id="form1" name="form1" method="post" action="recherche2.php">
    <table width="527" height="160" border="0" cellpadding="0">
      <tr>
        <td width="144">&nbsp;</td>
        <td width="186"><div align="center">
          <div align="right">
            <select name="quoi" id="quoi">
              <option value="avion">marre</option>
              <option value="voiture">voiture</option>
            </select>
            </div>
        </div></td>
        <td width="189"><div align="center">
          <select name="endroit" id="endroit">
            <option>touslesd&eacute;partements</option>
            <option value="13009">13009</option>
          </select>
          </div></td>
      </tr>
      
      <tr>
        <td height="58" colspan="3"><div align="center">
          <input type="submit" name="Submit" value="rechercher" />
        </div></td>
      </tr>
    </table>
  </form>
</div>
</body>
</html>

et le code de ma 2ème
<?php
$liendb = mysql_connect("nomduserveur","identifiant","pass");
mysql_select_db ("nomdelabase");

$sql= "SELECT texte,titre   
  FROM annonce   
  WHERE categorie= '" . mysql_real_escape_string($quoi) . "'   
  AND departement = '" . mysql_real_escape_string($endroit) . "'";   



$resultat =mysql_query($sql) or die (mysql_error()); 
$nb_lignes = mysql_num_rows($resultat);
$nb_colonnes = mysql_num_fields($resultat);
echo "<table  border=1 width=100% >"; 
for ($i=0; $i<$nb_lignes; $i++)
{
echo "<tr>";
for ($j=0; $j<$nb_colonnes; $j++)
echo "<td>".mysql_result($resultat,$i,$j)."</td>";
echo"</tr>";

}
echo"</table>";
echo "$texte"; 


mysql_close($liendb); 
?> 

ViPHP
ViPHP | 1996 Messages

11 janv. 2008, 20:30

Change ta structure en :
$sql= "SELECT texte,titre   
  FROM annonce   
  WHERE categorie= '" . mysql_real_escape_string($quoi) . "'   
  AND departement = '" . mysql_real_escape_string($endroit) . "'";

$resultat_sql =mysql_query($sql) or die (mysql_error()); 
echo "<table  border=1 width=100% >"; 
while ($resultat = mysql_fetch_array ($resultat_sql))
{
echo "<tr>";
echo "<td><a href='lien'> ".$resultat["titre"]."</a></td><td>".$resultat["texte"]."</td>";
echo"</tr>";

}
echo"</table>";
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
ViPHP | 4674 Messages

11 janv. 2008, 21:58

La solution de Aureusms est juste. J'ajouterais cependant un petit bémol sur l'utilisation de mysql_fetch_array. On préférera utiliser mysql_fetch_assoc qui est plus rapide et prends moins de mémoire (même raisonnement pour mysql_fetch_row). Pour s'en convaincre, il suffit de lire la documentation :
Valeur de retour

Retourne un tableau de chaînes qui correspond à la ligne récupérée ou FALSE s'il n'y a plus de lignes. Le type de tableau retourné dépend de la définition du paramètre result_type . En utilisant MYSQL_BOTH (défaut), vous récupérerez un tableau contenant des indices associatifs et numériques. En utilisant MYSQL_ASSOC, vous ne récupérerez que les indices associatifs (comme le fonctionnement de la fonction mysql_fetch_assoc()), en utilisant MYSQL_NUM, vous ne récupérerez que les indices numériques (comme le fonctionnement de la fonctionmysql_fetch_row()).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
AB
ViPHP | 5818 Messages

11 janv. 2008, 22:13

Salut

...
<?php
$liendb = mysql_connect("nomduserveur","identifiant","pass");
mysql_select_db ("nomdelabase");

$sql= "SELECT texte,titre   
  FROM annonce   
  WHERE categorie= '" . mysql_real_escape_string($quoi) . "'   
  AND departement = '" . mysql_real_escape_string($endroit) . "'";   



$resultat =mysql_query($sql) or die (mysql_error()); 
$nb_lignes = mysql_num_rows($resultat);
$nb_colonnes = mysql_num_fields($resultat);
echo "<table  border=1 width=100% >"; 
for ($i=0; $i<$nb_lignes; $i++)
{
echo "<tr>";
for ($j=0; $j<$nb_colonnes; $j++)
echo "<td>".mysql_result($resultat,$i,$j)."</td>";
echo"</tr>";

}
echo"</table>";
echo "$texte"; 


mysql_close($liendb); 
?> 
Heu ... t'a compris le message http://www.phpfrance.com/forums/voir_re ... php#228598

Tu ferais bien d'y regarder d'un peu plus près.

Si tu arrives à récupérer directement $quoi c'est parce que ton serveur est configuré avec register global sur on et pour raisons de sécurité ils vont finir par devenir très rares car maintenant la configuration par défaut est sur off.

Ma petite précision sur get_magic_quote_gpc n'est pas à négliger non plus.

N'essaies pas d'aller trop vite sans comprendre ce que l'on te dis. Ton code qui fonctionne maintenant risque de ne pas fonctionner sur d'autres serveurs et ta méthode est dangereuse car non sécurisée :evil:
Ne prends pas cette mauvaise habitude de ne pas définir toi-même les variables :wink:

EDIT Je viens d'éditer le lien http://www.phpfrance.com/forums/voir_re ... php#228598
J'avais oublié de supprimer quelques mysql_real_escape_string() dans mon copié-collé

ViPHP
ViPHP | 1996 Messages

12 janv. 2008, 10:19

La solution de Aureusms est juste. J'ajouterais cependant un petit bémol sur l'utilisation de mysql_fetch_array. On préférera utiliser mysql_fetch_assoc qui est plus rapide et prends moins de mémoire (même raisonnement pour mysql_fetch_row). Pour s'en convaincre, il suffit de lire la documentation :
Pas mal... Je viens de lire la doc (je ne lis jamais ces petites lignes là : c'est un défaut...). Si je comprend bien tu peux soit utiliser mysql_fetch_assoc($result) ou mysql_fetch_array ($result ,"MYSQL_ASSOC") qui te retourne le même résultat ? En élaguant pour la seconde pour utiliser moins de mémoire.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
ViPHP | 4674 Messages

12 janv. 2008, 13:07

Exactement. Mais comme la constante par défaut est MYSQL_BOTH (si ma mémoire est bonne), alors il te retourne les résultats de MYSQL_ASSOC et MYSQL_ROW. Donc 2 fois plus long, 2 fois plus lourd, 2 fois plus inutile.
Si on utilise le type de résultats ROW (avec mysql_fetch_row ou mysql_fetch_array($rsrc, MYSQL_ROW) donc), l'inconvénient est que si on ajoute un t-uplet à notre sélection, tous nos traitements seront erronés. En effet, tous seront décalés.

En définitive, il est préférable d'utiliser mysql_fetch_assoc directement. Plus rapide, plus maintenable, et plus pérenne.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
ViPHP | 1996 Messages

12 janv. 2008, 13:09

Exactement. Mais comme la constante par défaut est MYSQL_BOTH (si ma mémoire est bonne), alors il te retourne les résultats de MYSQL_ASSOC et MYSQL_ROW. Donc 2 fois plus long, 2 fois plus lourd, 2 fois plus inutile.
Si on utilise le type de résultats ROW (avec mysql_fetch_row ou mysql_fetch_array($rsrc, MYSQL_ROW) donc), l'inconvénient est que si on ajoute un t-uplet à notre sélection, tous nos traitements seront erronés. En effet, tous seront décalés.

En définitive, il est préférable d'utiliser mysql_fetch_assoc directement. Plus rapide, plus maintenable, et plus pérenne.
Je note ! :wink: Ca va finir en tuto çà :lol:
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
AB
ViPHP | 5818 Messages

12 janv. 2008, 19:36

Sinon si tu as l'habitude de travailler en objet tu peux aussi utiliser mysql_fetch_object

Eléphant du PHP | 83 Messages

13 janv. 2008, 15:46

coucou
merci de vos réponses mais je suis un peu perdue dois je faire une boucle ou mettre fetch _assoc
et surtout je ne comprends pas très bien comment intégré
echo "<td><a href=pagedescription.php?id=$id> ".$resultat["titre"]."</a></td><td>".$resultat["texte"]."</td>"; 


dans



<?php  

function stripgpc($value) {  
if(get_magic_quotes_gpc()) $value = stripslashes($value);  
return $value;  
}  

$liendb = mysql_connect("nomduserveur","identifiant","pass");  
mysql_select_db ("nomdelabase");  

$quoi = !empty($_POST['quoi'])? mysql_real_escape_string(stripgpc($_POST['quoi'])) : '';  
$endroit = !empty($_POST['endroit'])? mysql_real_escape_string(stripgpc($_POST['endroit'])) : '';  
$mot = !empty($_POST['mot'])? mysql_real_escape_string(stripgpc($_POST['mot'])) : '';  

if (empty($_POST['mot']))   
$sql= "SELECT texte,id FROM annonce WHERE categorie = '" . $quoi . "' AND departement = '" . $endroit . "'";   
else   
$sql = "SELECT texte FROM annonce WHERE categorie= '" . $quoi . "' AND departement = '" . $endroit . "' AND motcle1 = '" . $mot . "'";  

$resultat =mysql_query($sql) or die (mysql_error());  
$nb_lignes = mysql_num_rows($resultat);  
$nb_colonnes = mysql_num_fields($resultat); 
echo "<table  border=1 width=100% >"; 
for ($i=0; $i<$nb_lignes; $i++)
{
echo "<tr>";
for ($j=0; $j<$nb_colonnes; $j++)
echo "<td>".mysql_result($resultat,$i,$j)."</td>";
echo"</tr>";

}
echo"</table>";
echo "$texte"; 


mysql_close($liendb); 
?> 


pour que le lien me renvoie vers la page description en récupérant l'id
pour pouvoir afficher les détails



page description:
<?php 

$liendb = mysql_connect("serveur","username","pass");
mysql_select_db ("nombase");

$sql= "SELECT texte,departement FROM annonce WHERE id = '" . $id . "' ";  

$resultat =mysql_query($sql) or die (mysql_error()); 
$nb_lignes = mysql_num_rows($resultat);
$nb_colonnes = mysql_num_fields($resultat);
echo "<table  border=1 width=100% >"; 
for ($i=0; $i<$nb_lignes; $i++)
{
echo "<tr>";
for ($j=0; $j<$nb_colonnes; $j++)
echo "<td>".mysql_result($resultat,$i,$j)."</td>";
echo"</tr>";

}
echo"</table>";
echo "$texte"; 


mysql_close($liendb); 
?> 
[/php]



merci d'avance pour votre aide

ViPHP
AB
ViPHP | 5818 Messages

14 janv. 2008, 01:20

En reprenant ce code et en considérant que ta page de description se nomme description.php, la page principale serait :
<?php  

function stripgpc($value) {  
if(get_magic_quotes_gpc()) $value = stripslashes($value);  
return $value;  
}  

$liendb = mysql_connect("nomduserveur","identifiant","pass");  
mysql_select_db ("nomdelabase");  

$quoi = !empty($_POST['quoi'])? mysql_real_escape_string(stripgpc($_POST['quoi'])) : '';  
$endroit = !empty($_POST['endroit'])? mysql_real_escape_string(stripgpc($_POST['endroit'])) : '';  
$mot = !empty($_POST['mot'])? mysql_real_escape_string(stripgpc($_POST['mot'])) : '';  

if (empty($_POST['mot']))   
$sql= "SELECT titre, id FROM annonce WHERE categorie = '" . $quoi . "' AND departement = '" . $endroit . "'";   
else   
$sql = "SELECT titre, id FROM annonce WHERE categorie= '" . $quoi . "' AND departement = '" . $endroit . "' AND motcle1 = '" . $mot . "'";  

$resultat_sql = mysql_query($sql) or die (mysql_error()); 
?>

<!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">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans nom</title>
</head>

<body>  
<table style="border:1px solid black; width:100%"> 
<?php while ($resultat = mysql_fetch_assoc($resultat_sql))
{ ?>
<tr>
<td><a href="description.php?<?php echo 'id='.intval($resultat['id']) ?>"><?php echo htmlentities($resultat['titre'])?></a></td>
</tr>
<?php } mysql_free_result($resultat_sql); ?>
</table>
</body>
</html>
J'ai séparé le code PHP du code html pour être plus clair


page description.php :
<?php 

$liendb = mysql_connect("serveur","username","pass");
mysql_select_db ("nombase");

/*récupère la variable d'identifiant 'id' passée et caste le résultat en nombre entier pour sécuriser cette valeur. Dans ce cas précis mysql_real_escape_string devrait être inutile mais il faut prendre la bonne habitude de l'utiliser pour soumettre des variables dans une requête.
Ici la fonction stripgpc utilisée plus haut n'est pas nécessaire puisque dans un nombre, il n'y aura pas de ' */
$id = isset($_GET['id'])? mysql_real_escape_string(invtal($_GET['id'])) : 0;

$sql = "SELECT texte, departement FROM annonce WHERE id = '" . $id . "' ";  

$resultat_sql = mysql_query($sql) or die (mysql_error()); 

?>

<!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">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans nom</title>
</head>

<body>  
<table style="border:1px solid black; width:100%"> 
<?php while ($resultat = mysql_fetch_assoc($resultat_sql))
{ ?>
<tr>
<td><?php echo htmlentities($resultat['departement'])?><br /><?php echo htmlentities($resultat['texte'])?></td>
</tr>
<?php } mysql_free_result($resultat_sql); ?>
</table> 
</body>
</html>
karenma, au regard de tes questions j'en conclue que tu t'es embarquée dans un projet un peu compliqué pour tes connaissances actuelles.

Tu ferais bien de faire tous les tutos de phpdebutant.org (colonne de droite) avant d'aller plus loin sinon tu vas galérer. Il y a aussi lesiteduzero qui est bien. Se former n'est pas une perte de temps :wink:

Eléphant du PHP | 83 Messages

14 janv. 2008, 14:50

Salut

Merci à vous tous ça marche.

Petit à petit je deviens moins petite :lol:

ViPHP
ViPHP | 4674 Messages

14 janv. 2008, 15:09

Dis toi qu'on est tous passé par là (la science infuse n'ayant pas encore été découverte hélas ...). Si tu restes curieuse et motivée, tu ne pourras que te faire plaisir :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).