8791 sujets

Développement web côté serveur, CMS

bonjour

j'ai essayé de mettre le résultat de mes requete sur plusieurs pages mais le problème c que j'ai bien les liens des pages 1,2 et 3 qui apparaissent mais quand je clique vers ces liens la page est vide
Je ne vois pas les résultats de mes requetes alors qu'il devrait y en avoir
Il n'y a que la 1ère page où j'ai des résultats et pas sur le lien de page 1
Je ne comprends pas
merci d'avance pour votre réponse

Voici le formulaire


<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:36px; 
width:828px; 
height:290px; 
z-index:1; 
} 
--> 
</style> 
</head> 

<body> 
<div id="Layer2"> 
<form id="form1" name="form1" method="post" action="integrationmotcleetlienpage.php"> 
<table width="527" height="160" border="0" cellpadding="0"> 
<tr> 
<td width="144"><input name="mot" type="text" id="mot"></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é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 ma page integrationmotcleetlienpage.php


<html > 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Document sans titre</title> 
</head> 
<body> 
<?php 
$liendb = mysql_connect("nomserveur","user","pass"); 
mysql_select_db ("nombase"); 

function protection(&$value) { 
$value = (get_magic_quotes_gpc())? mysql_real_escape_string(stripslashes(trim($value))) : mysql_real_escape_string(trim($value)); 
return $value; 
} 

$quoi = !empty($_POST['quoi'])? protection($_POST['quoi']) : ''; 
$endroit = !empty($_POST['endroit'])? protection($_POST['endroit']) : ''; 

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

if (empty($_POST['mot']) === FALSE) { 

$tab = explode(' ', $_POST['mot']); 
array_walk($tab, 'protection'); 
$IN = implode("','", $tab); 

$sql .= " AND motcle1 IN ('$IN')"; 
} 


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


$nombreDeMessagesParPage = 2; 
$n =mysql_num_rows($resultat_sql); 
$nombresDePages =ceil($n/$nombreDeMessagesParPage ); 
echo 'Page : '; 
for ($i = 1 ; $i <= $nombresDePages ; $i++) 
{ 
echo '<a href="integrationmotcleetlienpage.php?page=' . $i . '">' . $i . '</a> '; 
} 


if (isset($_GET['page'])) 
{ 
$page = $_GET['page']; } 
else 
{ 
$page = 1; } 

$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage; 
$sqll= "SELECT texte,titre,id FROM annonce WHERE categorie = '" . $quoi . "' AND departement = '" . $endroit . "' ORDER BY id DESC LIMIT " . $premierMessageAafficher . ", " . $nombreDeMessagesParPage; 

if (empty($_POST['mot']) === FALSE) { 

$tab = explode(' ', $_POST['mot']); 
array_walk($tab, 'protection'); 
$IN = implode("','", $tab); 

$sqll .= " AND motcle1 IN ('$IN')"; 
} 

$resultatt_sql = mysql_query($sqll) or die (mysql_error()); 


?> 

<html > 

<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($resultatt_sql)) 
{ ?> 
<tr> 
<td><a href="description50page.php?<?php echo 'id='.intval($resultat['id']) ?>"><?php echo htmlentities($resultat['titre'])?></a></td> 
</tr> 
<?php } mysql_free_result($resultatt_sql); 

mysql_close($liendb); 
?> 
</table> 
</body> 
</html>
Salut karenma Smiley cligne ,

c'est normal que ça ne fonctionne pas car les variables POST envoyées par le formulaire n'existent que pour le premier affichage. Comme dans :
$quoi = !empty($_POST['quoi'])? protection($_POST['quoi']) : ''; 

Il existe plusieurs solutions comme par exemple utiliser des variables de SESSION :

* pour la première page qui contient le formulaire il faut rajouter avant la première balise (<html>)
<?php
$actuel = htmlspecialchars($_SERVER['PHP_SELF']);

if (isset($_POST['mot'])) { // Si le formulaire a été soumis
	session_start();
	$_SESSION['mot'] = !empty($_POST['mot']) ? htmlspecialchars(trim($_POST['mot'])) : '';
	$_SESSION['quoi'] = !empty($_POST['quoi']) ? htmlspecialchars(trim($_POST['quoi'])) : '';
	$_SESSION['endroit'] = !empty($_POST['endroit']) ? htmlspecialchars(trim($_POST['endroit'])) : '';
	header('Location: integrationmotcleetlienpage.php');
	exit();
}

?>
<html>
et remplacer
<form id="form1" name="form1" method="post" action="integrationmotcleetlienpage.php">
par
<form id="form1" method="post" action="<?php echo $actuel; ?>">


* et pour integrationmotcleetlienpage.php
<?php
$liendb = mysql_connect("nomserveur","user","pass"); 
mysql_select_db ("nombase"); 

session_start();
$mot = !empty($_SESSION['mot']) ? protection($_SESSION['mot']) : '';
$quoi = !empty($_SESSION['quoi']) ? protection($_SESSION['quoi']) : '';
$endroit = !empty($_SESSION['endroit']) ? protection($_SESSION['endroit']) : '';

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title> 
</head> 
<body> 
<?php 
function protection(&$value) { 
$value = (get_magic_quotes_gpc())? mysql_real_escape_string(stripslashes(trim($value))) : mysql_real_escape_string(trim($value)); 
return $value; 
} 
$sql= "SELECT texte,titre,id FROM annonce WHERE categorie = '" . $quoi . "' AND departement = '" . $endroit . "'"; 
if (empty($mot) === FALSE) { 
$tab = explode(' ', $mot); 
array_walk($tab, 'protection'); 
$IN = implode("','", $tab); 
$sql .= " AND motcle1 IN ('$IN')"; 
} 
$resultat_sql = mysql_query($sql) or die (mysql_error()); 
$nombreDeMessagesParPage = 2; 
$n =mysql_num_rows($resultat_sql); 
$nombresDePages =ceil($n/$nombreDeMessagesParPage ); 
echo 'Page : '; 
for ($i = 1 ; $i <= $nombresDePages ; $i++) 
{ 
echo '<a href="integrationmotcleetlienpage.php?page=' . $i . '">' . $i . '</a> '; 
} 
if (isset($_GET['page'])) 
{ 
$page = $_GET['page']; } 
else 
{ 
$page = 1; } 
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage; 
$sqll= "SELECT texte,titre,id FROM annonce WHERE categorie = '" . $quoi . "' AND departement = '" . $endroit . "'"; 
if (empty($mot) === FALSE) { 
$tab = explode(' ', $mot); 
array_walk($tab, 'protection'); 
$IN = implode("','", $tab); 
$sqll .= " AND motcle1 IN ('$IN')"; 
} 
$sqll .= " ORDER BY id DESC LIMIT " . $premierMessageAafficher . ", " . $nombreDeMessagesParPage; 
$resultatt_sql = mysql_query($sqll) or die (mysql_error()); 
?> 
<table style="border:1px solid black; width:100%"> 
<?php while ($resultat = mysql_fetch_assoc($resultatt_sql)) 
{ ?> 
<tr> 
<td><a href="description50page.php?<?php echo 'id='.intval($resultat['id']) ?>"><?php echo htmlentities($resultat['titre'])?></a></td> 
</tr> 
<?php } mysql_free_result($resultatt_sql); 
mysql_close($liendb); 
?> 
</table> 
</body> 
</html>

A+ Smiley smile
Modifié par Heyoan (19 Jan 2008 - 02:12)
bonjour
j'ai essayé ce que tu m'as dit mais ça ne marche pas j'ai l'erreur


Warning: session_start() [function.session-start]: open..., O_RDWR) failed: No such file or directory (2) in /...index50page2.php on line 5

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /...index50page2.php:5) in /.../index50page2.php on line 5

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /.../index50page2.php:5) in /.../index50page2.php on line 5

Warning: Cannot modify header information - headers already sent by (output started at /.../index50page2.php:5) in /.../index50page2.php on line 9

Warning: Unknown(): open(/..., O_RDWR) failed: No such file or directory (2) in Unknown on line 0

Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/...) in Unknown on line 0



que faire?
merci d'avance pour votre aide
Modifié par karenma (19 Jan 2008 - 14:52)
Salut,

tu fais les tests en local ? Avec EasyPHP, Wamp5, autre ?

Edit: en général les problèmes avec session_start surviennent parce que du code html a déjà été écrit avant mais cela peut également arriver quand le répertoire qui sert à gérer les sessions n'existe pas. Par exemple sur free.fr il faut créer un répertoire sessions à la racine du serveur...
Modifié par Heyoan (19 Jan 2008 - 15:11)
salut
bravo c'était ça!!
j'ai créé mon dossier et ça a marché et merci aussi pour les sessions
Merci beaucoup!!!
Petit à petit je deviens moi petite Smiley biggrin !!
karenma a écrit :
Petit à petit je deviens moi petite Smiley biggrin !!

Cool Smiley gol1 Smiley good !

Alors bonne continuation Smiley cligne !
coucou
encore moi
en fait je suis toujours petite car je ne m'étais pas rendu compte d'un problème car avant que j'essaye la pagination ça fonctionnait
Voilà la page integrationmotcleetlienpage.php renvoie pour chaque lien vers la page
<a href="description50page.php?<?php echo 'id='.intval($resultat['id']) ?>"><?php echo htmlentities($resultat['titre'])?></a>

et j'ai bien description50page.php?id=00
Mais ça ne marche pas
donc il connait l'id et devrait faire la requete
donc pas de besoin de sessions

Je ne comprend donc vraiment pas pourquoi ça ne marche pas
Merci d'avance pour votre aide

Voivi la page description50.php



[code]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.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 titre</title>
</head>

<body>

 
<?php 

$liendb = mysql_connect("http://serveur","user","pass");
mysql_select_db ("nombase");

$sql= "SELECT texte 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); 
?> 

</body>
</html>

Modifié par karenma (19 Jan 2008 - 22:37)
je ne vois pas comment tu récupères $id ?

Tu fais quelque chose comme ça ?
<?php
$id = isset($_GET['id']) ? $_GET['id'] : 0;
?>
coucou encore moi
En fait c'était ma faute à force d'être sur l'ordi je n'est plus toute ma tête
Mais là j'ai trouvé j'ai bien l'id
Merci beaucoup pour ton aide
Je crois que je vais aller me reposer
bonjour
je viens de me rendre compte que si par exemple quelqu'un refusait les cookies ça ne fonctionnait plus et que si c'était mis en favori non plus avec à la fin un "session_destroy"
on m'a parlé d'un "session.use_trans_sid" mais je crois que sur free c pas bon
comment faire alors pour transmettre les données
merci d'avance
karenma a écrit :
si par exemple quelqu'un refusait les cookies ça ne fonctionnait plus
Et non Smiley murf !

a écrit :
si c'était mis en favori non plus avec à la fin un "session_destroy"
Pas compris Smiley rolleyes ...


Tu peux regarder cet article et notamment le chapitre II.3 Propagation de l'ID de session.


Alors encore une fois plusieurs solutions :

1) Bof... 99% des visiteurs acceptent les cookies --> on laisse comme ça Smiley langue ...

2) Gérer toi-même le passage dans l'URL :

en remplaçant
header('Location: integrationmotcleetlienpage.php');
par
header('Location: integrationmotcleetlienpage.php?'.session_name().'='.session_id());


et
echo '<a href="integrationmotcleetlienpage.php?page=' . $i . '">' . $i . '</a> ';
par
echo '<a href="integrationmotcleetlienpage.php?'.session_name().'='.session_id().'&page=' . $i . '">' . $i . '</a> ';

3) ne pas utiliser de sessions mais passer tous les paramètres (mot, quoi, endroit) dans l'url et récupérer avec $_GET['mot']...

etc...

A+
bonjour
j'ai essayé la méthode 2) et ça fonctionne !!
mais je me demandais vu que je suis obligée de garder tous les numéros de sessions dans le dossier sessions sur le serveur (pour que quelqu'un qui a mis ma page en favori puisse la retrouver) es ce que cela ne va pas gêner à la longue, prendre de l'espace sur mon serveur?


sinon pour la méthode 3) j'ai essayé de remplacer

echo '<a href="integrationmotcleetlienpage.php?page=' . $i . '">' . $i . '</a> ';


par



echo '<a href="integrationmotcleetlienpage.php?page='.$i.'&quoi='.$quoi.'&endroit='.$endroit.'&mot='.$mot.'">'. $i .'</a> ';
 

Ca fonctionne si on ne met rien dans le champs mot.
Mais si je mets un mot j'ai l'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 'AND motcle1 IN ('espoir')' at line 1

Alors que j'ai bien dans l'url
http://.../integrationmotcleetlienpage.php?mot=espoir&quoi=voiture&endroit=13009&Submit=rechercher
Comment faire ?


Et sinon entre 2) et 3) laquelle est la plus rapide d'affichage et permet
qu'il y est un nombre élevé de requetes en même temps?


Merci d'avance pour ta réponse
karenma a écrit :
vu que je suis obligée de garder tous les numéros de sessions dans le dossier sessions sur le serveur (pour que quelqu'un qui a mis ma page en favori puisse la retrouver) es ce que cela ne va pas gêner à la longue, prendre de l'espace sur mon serveur?
On utilise plutôt les sessions, comme leur nom l'indique Smiley lol , pour sauvegarder des données le temps de la session. Si c'est pour plus longtemps autant utiliser les variables dans l'URL Smiley cligne !

karenma a écrit :
Ca fonctionne si on ne met rien dans le champs mot.
Mais si je mets un mot j'ai l'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 'AND motcle1 IN ('espoir')' at line 1

Alors que j'ai bien dans l'url
http://.../integrationmotcleetlienpage.php?mot=espoir&quoi=voiture&endroit=13009&Submit=rechercher
Comment faire ?
Tu as bien laissé un espace avant les " AND motcle1 IN... ? Si oui il faudrait remontrer ton code... Et en passant, inutile de rajouter &Submit=rechercher.


karenma a écrit :
Et sinon entre 2) et 3) laquelle est la plus rapide d'affichage et permet qu'il y est un nombre élevé de requetes en même temps?
A mon avis, aucune différence perceptible par un oeil humain Smiley biggol !
bonjour
je n 'arrive pas à résoudre le pb de

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 'AND motcle1 IN ('espoir')' at line 1
quand je mets un mot clé
as tu une idée ?
voilà mes 2 pages

la 1ère

<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:36px; 
width:828px; 
height:290px; 
z-index:1; 
} 
--> 
</style> 
</head> 

<body> 
<div id="Layer2"> 
<form id="form1" name="form1" method="get" action="integrationmotcleetlienpage.php"> 
<table width="527" height="160" border="0" cellpadding="0"> 
<tr> 
<td width="144"><input name="mot" type="text" id="mot"></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é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 la 2éme integrationmotcleetlienpage



<html > 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Document sans titre</title> 
</head> 
<body> 
<?php 
$liendb = mysql_connect("serveur","user","pass"); 
mysql_select_db ("nombase"); 

function protection(&$value) { 
$value = (get_magic_quotes_gpc())? mysql_real_escape_string(stripslashes(trim($value))) : mysql_real_escape_string(trim($value)); 
return $value; 
} 


$quoi = !empty($_GET['quoi'])? protection($_GET['quoi']) : ''; 
$endroit = !empty($_GET['endroit'])? protection($_GET['endroit']) : ''; 


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

if (empty($_GET['mot']) === FALSE) { 

$tab = explode(' ', $_GET['mot']); 
array_walk($tab, 'protection'); 
$IN = implode("','", $tab); 
$sql .= " AND motcle1 IN ('$IN')"; 
} 


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


$nombreDeMessagesParPage = 2; 
$n =mysql_num_rows($resultat_sql); 
$nombresDePages =ceil($n/$nombreDeMessagesParPage ); 
echo 'Page : '; 
for ($i = 1 ; $i <= $nombresDePages ; $i++) 
{ 
echo '<a href="integrationmotcleetlienpage.php?page='.$i.'&quoi='.$quoi.'&endroit='.$endroit.'&mot='.$mot.'">'. $i .'</a> '; 
} 


if (isset($_GET['page'])) 
{ 
$page = $_GET['page']; } 
else 
{ 
$page = 1; } 

$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage; 
$sqll= "SELECT texte,titre,id FROM annonce WHERE categorie = '" . $quoi . "' AND departement = '" . $endroit . "' ORDER BY id DESC LIMIT " . $premierMessageAafficher . ", " . $nombreDeMessagesParPage; 

if (empty($_GET['mot']) === FALSE) { 

$tab = explode(' ', $_GET['mot']); 
array_walk($tab, 'protection'); 
$IN = implode("','", $tab); 
$sqll .= " AND motcle1 IN ('$IN')";
} 

$resultatt_sql = mysql_query($sqll) or die (mysql_error()); 


?> 

 
<table style="border:1px solid black; width:100%"> 
<?php while ($resultat = mysql_fetch_assoc($resultatt_sql)) 
{ ?> 
<tr> 
<td><a href="description50page.php?<?php echo 'id='.intval($resultat['id']) ?>"><?php echo htmlentities($resultat['titre'])?></a></td> 
</tr> 
<?php } mysql_free_result($resultatt_sql); 

mysql_close($liendb); 
?> 
</table> 
</body> 
</html>
salut,

j'ai regardé ta requete. je pense que tu as ce probleme avec la requete $sqll

car tu as rajouté un order by.... et ensuite tu concatene le AND motcle1 IN....

il faut que tu changes le code pour que le order by arrive en dernier dans la requete.

Pascal.
CPascal a écrit :
je pense que tu as ce probleme avec la requete $sqll
car tu as rajouté un order by.... et ensuite tu concatene le AND motcle1 IN....

il faut que tu changes le code pour que le order by arrive en dernier dans la requete.

+1 Smiley langue !

D'autant plus que la page integrationmotcleetlienpage.php était déjà corrigé dans ce post et qu'à priori il suffisait de changer les $_SESSION par des $_GET et de rajouter les variables (mot, quoi et endroit) dans le <a href="integrationmotcleetlienpage.php... Smiley cligne .
Modifié par Heyoan (27 Jan 2008 - 13:17)
bonjour
mea culpa
c vrai qu'en changeant et en enlevant les sessions je me suis mélangée les pinceaux...
C bon là ça fonctionne désolé pour la question