8796 sujets

Développement web côté serveur, CMS

Pages :
Bonjour à tous

voici ma question. Est-il possible d'identifier par quel moyen une variable est transmise en GET ou en POST?

Je m'explique… j'ai une page recherche qui est donc un formulaire dont les variables sont transmises en POST. Sur la page résultat de la recherche, j'ai une pagination. La fonction pagination transmet les variables en GET. La fonction pagination pour afficher la page suivante fait appel à la même page que celle qui affiche le résultat de recherche. Donc elle réception les variable en POST une première fois pour afficher les résultats mais lorsqu'on clique sur page suivante, elle reçoit en GET mais je n'ai pas trouvé le moyen de distinguer par quelle méthode elle reçoit. Donc elle ne sait pas traiter les variables reçue en GET.

Avez-vous une idée ou une solution?

D'avance merci de m'avoir lu et de votre aide.
Modifié par paintbox (03 Jul 2010 - 10:19)
Le mieux et le plus simple serait que ton premier formulaire envoie des données via GET, et non par POST.
Ça simplifie énormément ton problème étant donné que tu ne travailles plus qu'avec des variables GET.
Hello pixelb,

merci pour ton aide.

Effectivement, cela semble résoudre mon problème. J'avais un moment envisagé cette solution mais je pensais qu'un formulaire ne pouvait envoyer qu'en POST et je n'avais donc pas essayé.

Encore merci
Rectification, mon problème n'est qu'a moitié résolu. Cela fonction mais sur mon formulaire, j'ai des bouton checkbox qui permettent de sélectionner des critères. Du coup, en GET ils ne sont plus pris en compte.

Une autre idée?
Hell o,

Je pense que le truc à faire pour ce genre de situation est de faire dans un premier temps.
un ternaire ou des if et des else si tu préfère indiquant la méthode à faire marcher dans les request sql.

Donc (je vais essayer de m'expliquer):


$premierchamps = (isset($_POST['tonchamps'])) ? $_POST['tonchamps'] : $_GET['tonchamps'];
$deuximechamps = (isset($_POST['tonchamps'])) ? $_POST['tonchamps'] : $_GET['tonchamps'];


Ensuite la ou les variable(s)
$premierchamps, $deuximechamps
tu pourrais t'en servir bien évidement pour tes ou ta requête SQL.

Attention tout même au caractères spéciaux car ils vont t'embêter pas mal donc il faudrait
voir les fonctions
htmlentities(), html_entity_decode()
entre autres.

Pour tes checkbox tu pourrais faire la même chose.

L'idée est dons de récupérer les donnés envoyé par POST est de les transformer en GET pour tes requête SQL et tes liens de pagination, tu pourrais faire par exemple :


<a href="index.php?tonchamps=<?php echo $premierchamps; ?>&tonchamps2=<?php echo $deuxiemechamps; ?>&tacheckbox=<?php echo $tacheckbox; ?>">page 2</a>


P.S : Je suis hispanophone désole pour les phrase mal écrites en français.
Modifié par Rwail (18 Jun 2010 - 16:52)
Pourquoi se compliquer la vie lorsque tout peut être fait simplement ?

Sachant que la pagination n'est qu'une nouvelle recherche identique à la première à l'exception des limites, il me semble normal et logique d'utiliser un seul et même procédé pour réaliser à la fois la première recherche et la pagination...
pixelb : tu a tout a fais raison par rapport à la pagination mais de que tu auras cliquez dans les liens pour aller dans les page suivantes le POST disparaitra et donc c'est pour ca qu'il est essentiel de récupérer ces données et les faire suivre en GET pour les autres "pages" sinon c'est mort et il faudrait tout retaper dans le formulaires.
Modifié par Rwail (18 Jun 2010 - 15:58)
Merci Rwail pour tes explications.

Je ne comprends pas très bien ton explication.




$premierchamps = (isset($_POST['tonchamps'])) ? $_POST['tonchamps'] : $_GET['tonchamps']; 
$deuximechamps = (isset($_POST['tonchamps'])) ? $_POST['tonchamps'] : $_GET['tonchamps']; 



que signifient le "?" et les ":".
Rwail a écrit :
pixelb : tu a tout a fais raison par rapport à la pagination mais de que tu auras cliquez dans les liens pour aller dans les page suivantes le POST disparaitra et donc c'est pour ca qu'il est essentiel de récupérer ces données et les faire suivre en GET pour les autres "pages" sinon c'est mort et il faudrait tout retaper dans le formulaires.


Je n'ai pas tout compris mais je vais tenter de te répondre malgré tout.

Le principe que je préconise c'est d'utiliser le get à tout moment, donc JAMAIS de post (uniquement dans ce cas ci bien évidement).

Au passage, les mots clés ou quoi que ce soit d'autre peuvent être conservés d'une page à l'autre, que ce soit via des variables de session ou via des champs de formulaires de type "hidden".

@paintbox : les '?' et ':' sont utilisés pour les opérateurs ternaires
Modifié par pixelb (18 Jun 2010 - 16:16)
paintbox : ceci en PHP s'appelle les operateurs ternaires ceci est un équivalant d'un if et else enfait cela veux dire que si $_POST['tonchamps'] est definie donc isset() $premierchamps sera égal à $_POST['tonchamps'] autrement $premierchamps vas etre égale à $_GET['tonchamps']


$premierchamps = (isset($_POST['tonchamps'])) ? $_POST['tonchamps'] : $_GET['tonchamps'];


équivaux à :


if (isset($_POST['tonchamps'])){
   $premierchamps = $_POST['tonchamps'];
}

else{
   $premierchamps = $_GET['tonchamps'];
}


L'idée c'est que dans un premier temps les données qui sont envoyé en POST soit traité comme tel (en POST), à ce moment là tu peux t'en servir pour créer tes liens vers les pages suivantes MAIS à partir du moment que tu vas cliquer sur le liens pour aller vers la page 2 par exemple les données qui ont été envoyé par POST vont disparaitre donc l'idée est de faire les liens vers les autres pages comme ceci :
<a href="resultat.php?tonchamps='.$premierchamps.'">page 2</a>


pour que à partir de la deuxième page tes données reste dans le navigateur en GET et pour que tes requêtes SQL continue à fonctionner pour la même recherche.
Bonne continuation Smiley smile
Modifié par Rwail (18 Jun 2010 - 16:58)
Merci à tous les 2. Je ne connaissais pas les opérateurs ternaires.

J'avais déjà essayé la méthode if… else if mais sans succès. Je vais quand même réessayer.

Je vous dis si cela fonctionne.
J'ai en partie résolu mon problème. J'ai trouvé (bon à savoir)http://www.formation.jussieu.fr/~perrot/TOI04/Jour8pm/GET_POST.html

En fait, $_SERVER['REQUEST_METHOD'] identifie quel type de méthode est utilisé. Donc avec un if… else if cela fonction mais…

mon problème n'est toujours pas résolu puisque :

Ma première page de résultat de recherche a été traité en POST(puisque formulaire recherche). Elle affiche donc tous les résultats. Pour chacun des résultats on peut consulter la fiche produit. Sur cette fiche, j'ai mis un lien "retour vers page précédente" qui est
$previous_page=$_SERVER['HTTP_REFERER'];
. Donc puisque mon résultat de recherche était en POST il n'a pas retenu la requete et donc ne revient pas sur le résultat de recherche.

Par contre… si je clique sur page suivante (= lien en GET) cela fonctionne.

Mon problème est donc lié à l'utilisation de POST.
Tu sembles vouloir absolument utiliser la difficulté donc bon courage à toi pour la suite Smiley cligne
paintbox a écrit :
J'ai en partie résolu mon problème. J'ai trouvé (bon à savoir)http://www.formation.jussieu.fr/~perrot/TOI04/Jour8pm/GET_POST.html

En fait, $_SERVER['REQUEST_METHOD'] identifie quel type de méthode est utilisé. Donc avec un if… else if cela fonction mais…

mon problème n'est toujours pas résolu puisque :

Ma première page de résultat de recherche a été traité en POST(puisque formulaire recherche). Elle affiche donc tous les résultats. Pour chacun des résultats on peut consulter la fiche produit. Sur cette fiche, j'ai mis un lien "retour vers page précédente" qui est
$previous_page=$_SERVER['HTTP_REFERER'];
. Donc puisque mon résultat de recherche était en POST il n'a pas retenu la requete et donc ne revient pas sur le résultat de recherche.

Par contre… si je clique sur page suivante (= lien en GET) cela fonctionne.

Mon problème est donc lié à l'utilisation de POST.



En effet car $_SERVER['HTTP_REFERER'] vas t'emmener vers la racine du site comme si tu venez la premier fois.

Ce que tu pourrais essayer de faire c'est la même chose que pour les autres liens en tenant compte bien sure du nombre de la page courante. j'imagine que tu a une variable ou quelque chose qui identifie la page dans la quel tu est et donc tu pourrais faire une ti opération de math pour aller à la précédente Smiley cligne
Non, mais j'ai essayé de transmettre mon formulaire en GET, mais comme je te l'ai dit, mes checkbox ne sont pas prise en compte. J'ai consulté le lien que tu m'as envoyé mais ça ne change rien.
Pourrais tu m'envoyer un partie de ton code s'il te plaît je pense que depuis le début tu ne ma pas compris.

Je veux bien t'aider mais j'arrive pas à me faire comprendre Smiley decu
Voici une partie de mon code:

Mon formulaire de recherche



echo '<FORM action="liste_search.php" method="POST" name="formulaire">';
echo '<SELECT name="type" size="1">';
	while($donnees_types=mysql_fetch_array($request_types))
			{
			echo '<OPTION name="bien">'.$donnees_types['type_bien'].'</OPTION>';
			}
echo '</SELECT><br />';
		
echo '<SELECT name="statut" size="1">';
			echo '<OPTION name="vendre" value="vendre">A vendre</OPTION>';
			echo '<OPTION name="louer" value="louer">A louer</OPTION>';
echo '</SELECT<br />';
		
echo '<SELECT name="commune" size="1">';
echo '<OPTION> </OPTION>';
	while($donnees_commune=mysql_fetch_array($request_commune))
			{
			echo '<OPTION>'.$donnees_commune['commune'].'</OPTION>';
			}
	echo '</SELECT<br />';
	echo '<br />';		
	echo '<span>Prix : <Input type="text" name="prix_min"> et <input type="text" name="prix_max"> Euros</span>';
	echo '<span><br /><br />Options : </span><br />';
	
	echo '<input type="checkbox" name="option[]" value="garage" /><label for="garage">Garage</label><br />';
	echo '<input type="checkbox" name="option[]" value="jardin" /><label for="jardin">Jardin</label><br />';		
	echo '<input type="checkbox" name="option[]" value="cave" /> <label for="cave">Cave</label><br />';
	echo '<input type="checkbox" name="option[]" value="grenier" /><label for="grenier">Grenier</label><br />';
	echo '<input type="submit" /> <input type="reset"/>';	
echo '</FORM>';



Le code qui traite le résultat de recherche (qui fait appel à une fonction affichage)


if($_SERVER['REQUEST_METHOD'] == 'GET')
	{
	$nbcol=mysql_num_fields($result);/*Nombre de champs*/
	$nbart=mysql_num_rows($result); /*Nombre de lignes*/
	//-------Debut En-tete-------//
	//Récupération des critères de recherche//
	$choix_type=mysql_escape_string(strtolower($_GET['type']));
	$choix_statut=mysql_escape_string($_GET['statut']);
	$choix_commune=mysql_escape_string(Ucfirst($_GET['commune']));
	$prix_min=mysql_escape_string($_GET['prix_min']);
	$prix_max=mysql_escape_string($_GET['prix_max']);
	echo '<br />';

$tab=""; //Traitement des checkbox -> Dans $tab//

	echo '<h1 class="center">Liste des biens à '.$choix_statut.' : </h1>';
	//--------Fin en-tete-------//
	
	//-------Debut container-------//
	echo '<DIV class="container">';
	
	echo recherche($choix_type, $choix_statut, $choix_commune, $prix_min, $prix_max, $tab);//Appel de la fonction résultat de la recherche//
	}
	echo '</DIV>';//----Fin Container--//


if($_SERVER['REQUEST_METHOD'] == 'POST')
	{

if(isset($result) && (!$result))
	{
	echo 'Lecture impossible';
	}
else
	{
	$nbcol=mysql_num_fields($result);/*Nombre de champs*/
	$nbart=mysql_num_rows($result); /*Nombre de lignes*/
	//-------Debut En-tete-------//
	//Récupération des critères de recherche//
	$choix_type=mysql_escape_string(strtolower($_POST['type']));
	$choix_statut=mysql_escape_string($_POST['statut']);
	$choix_commune=mysql_escape_string(Ucfirst($_POST['commune']));
	$prix_min=mysql_escape_string($_POST['prix_min']);
	$prix_max=mysql_escape_string($_POST['prix_max']);
	
	echo '<br />';

$tab=""; //Traitement des checkbox -> Dans $tab//

	echo '<h1 class="center">Liste des biens à '.$choix_statut.' : </h1>';
	//--------Fin en-tete-------//
	
	//-------Debut container-------//
	echo '<DIV class="container">';
	
	echo recherche($choix_type, $choix_statut, $choix_commune, $prix_min, $prix_max, $tab);//Appel de la fonction résultat de la recherche//
	}
	echo '</DIV>';//----Fin Container--//
	}


et ma fonction fiche qui permet de consulter la fiche produit et qui pose problème pour le retour vers page précédente


function pagination($TotalBiens, $nombreDeBiensParPage)
{
	$choix_type=mysql_escape_string($_GET['titre']);
	$choix_statut=mysql_escape_string($_GET['id']);
/*
$choix_type=$titre;
$choix_statut=$id;
*/
	
	$nombreDePages=ceil($TotalBiens/$nombreDeBiensParPage);
	
	//Déclaration des variable précédent et suivant//
	$page=$_GET['page'];
	$pagePrec=$page-1; /*Définition page précédente*/
	$pageSuiv=$page+1; /*Définition page suivante*/
	$prec='<< Préc';
	$suiv='Suiv >>';
	
	echo 'Page : ';
	if ($page<>1) /*Affiche précédent tant qu'on est pas sur la page 1*/
		{	
		echo '<a href="liste.php?id='.$choix_statut.'&amp;titre='.$choix_type.'&amp;page=' .$pagePrec. '">'.$prec.'</a> / ';
		}
	for ($j=1; $j<=($nombreDePages); $j++)
		{
		/*On récupère les choix de l'utilisateur et on indique la page suivante*/
		echo '<a href="liste.php?id='.$choix_statut.'&amp;titre='.$choix_type.'&amp;page=' .$j. '">'.$j.'</a> / ';
		}
	if ($page<>$nombreDePages) /*Affiche suivant tant qu'on est pas sur la dernière page*/
		{	
		echo '<a href="liste.php?id='.$choix_statut.'&amp;titre='.$choix_type.'&amp;page=' .$pageSuiv. '">'.$suiv.'</a>';
		}
}




Voilà je crois que tu as là les principaux codes

Merci de ton aide
Je me suis permis d'apporter quelques modifications à ton code.

Le formulaire :


echo '<form action="liste_search.php" method="POST" name="formulaire">';

	echo '<select name="type" size="1">';

		while($donnees_types=mysql_fetch_assoc($request_types)){

			echo '<option value="'.$donnees_types['type_bien'].'">'.$donnees_types['type_bien'].'</option>';

		}

	echo '</select><br />';

	echo '<select name="statut" size="1">';
	echo '	<option value="vendre">A vendre</option>';
	echo '	<option value="louer">A louer</option>';
	echo '</select><br />';

			

	echo '<select name="commune" size="1">';
	echo '<option> </option>';

	while($donnees_commune=mysql_fetch_array($request_commune)){

		echo '<option value="'.$donnees_commune['commune'].'">'.$donnees_commune['commune'].'</option>';
	}

	echo '</select><br />';
	echo '<br />';		
	echo '<span>Prix : <Input type="text" name="prix_min"> et <input type="text" name="prix_max"> Euros</span>';
	echo '<span><br /><br />Options : </span><br />';

	echo '<input type="checkbox" name="option[]" value="garage" /><label for="garage">Garage</label><br />';
	echo '<input type="checkbox" name="option[]" value="jardin" /><label for="jardin">Jardin</label><br />';		
	echo '<input type="checkbox" name="option[]" value="cave" /> <label for="cave">Cave</label><br />';
	echo '<input type="checkbox" name="option[]" value="grenier" /><label for="grenier">Grenier</label><br />';
	echo '<input type="submit" /> <input type="reset"/>';	

echo '</form>';



Code qui traite le résultat :


if(isset($result) && (!$result)){

	echo 'Lecture impossible';
}

else{

	$nbcol = mysql_num_fields($result);/*Nombre de champs*/
	$nbart = mysql_num_rows($result); /*Nombre de lignes*/
	
	//-------Debut En-tete-------//
	//Récupération des critères de recherche//
	
	$choix_type = (isset($_POST['type'])) ? mysql_escape_string(strtolower($_POST['type'])): mysql_escape_string(strtolower($_GET['type']));
	$choix_statut = (isset($_POST['statut'])) ? mysql_escape_string($_POST['statut']) : mysql_escape_string($_GET['statut']);
	$choix_commune = (isset($_POST['commune'])) ? mysql_escape_string(Ucfirst($_POST['commune'])) : mysql_escape_string(Ucfirst($_GET['commune']));
	$prix_min = (isset($_POST['prix_min'])) ? mysql_escape_string($_POST['prix_min']) : mysql_escape_string($_GET['prix_min']) ;
	$prix_max = (isset($_POST['prix_max'])) ? mysql_escape_string($_POST['prix_max']) : mysql_escape_string($_GET['prix_max']);

	echo '<br />';
	
	$tab=""; //Traitement des checkbox -> Dans $tab//

	echo '<h1 class="center">Liste des biens à '.$choix_statut.' : </h1>';
	
	//--------Fin en-tete-------//
	
	//-------Debut container-------//
	echo '<DIV class="container">';
	echo recherche($choix_type, $choix_statut, $choix_commune, $prix_min, $prix_max, $tab);//Appel de la fonction résultat de la recherche//

}

echo '</DIV>';//----Fin Container--//


Puis la fonction pagination au-dessous dans la même page bien sure

function pagination($TotalBiens, $nombreDeBiensParPage)
{

	$nombreDePages=ceil($TotalBiens/$nombreDeBiensParPage);

	//Déclaration des variable précédent et suivant//

	$page = $_GET['page'];

	$pagePrec = $page - 1; /*Définition page précédente*/
	$pageSuiv = $page + 1; /*Définition page suivante*/

	$prec='<< Préc';

	$suiv='Suiv >>';

	echo 'Page : ';

	/*Affiche précédent tant qu'on est pas sur la page 1*/
	if ($page <> 1) {

		echo '<a href="liste_search.php?id='.$choix_statut.'&titre='.$choix_type.'&commune='.$choix_commune.'&page=' .$pagePrec. '">'.$prec.'</a> / ';
	}

	for ($j=1; $j <= ($nombreDePages); $j++){

		/*On récupère les choix de l'utilisateur et on indique la page suivante*/
		echo '<a href="liste_search.php?id='.$choix_statut.'&titre='.$choix_type.'&commune='.$choix_commune.'&page=' .$j. '">'.$j.'</a> / ';
	}
	
	/*Affiche suivant tant qu'on est pas sur la dernière page*/
	if ($page <> $nombreDePages) {

		echo '<a href="liste_search.php?id='.$choix_statut.'&titre='.$choix_type.'&commune='.$choix_commune.'&page=' .$pageSuiv. '">'.$suiv.'</a>';
	}
}


les liens laisse les dans la même page ou tu envoi ton form Smiley smile
Modifié par Rwail (18 Jun 2010 - 20:01)
Hello,

je pense avoir résolu mon problème. J'ai finalement passé tout mon formulaire en GET et j'ai fait les différentes modifications en rapport sur les différents codes qui intervenaient.

Merci en tout cas à tous les 2 pour votre aide.
Pages :