2013-06-17 3 views
2

forme d'entrée comme

<form action="<?php echo (htmlspecialchars($_SERVER["PHP_SELF"] .'?page=1')) ?>" method="post"> 

<input type='text' name='date_month' value='<?php echo $_POST['date_month'].$_GET['date_month']?>'> 

</form> 

reçoivent ensuite l'entrée

$post_date_month = $_POST['date_month'].$_GET['date_month']; 

Sur la base de l'entrée de sélection/obtenir des données filtrées de MySQL

Comme il peut y avoir plusieurs lignes de données, la pagination créé. Comme ceci

for ($page_i = 1; $page_i <= $total_pages; $page_i++) { 
echo "<a href='__filter_mysql_data.php?page=$page_i&date_month=$post_date_month&date_year=$post_date_year'>| $page_i |</a> "; 
} 

Remarque! Si dans l'URL je n'utilise pas &date_month=$post_date_month puis lorsque l'utilisateur clique sur le numéro de page $page_i, le script affichera toutes les données de mysql (non basé sur $post_date_month, non seulement mois sélectionné par l'utilisateur, mais tous les mois, car après la page recharger $_POST['date_month'] "disparaît") .

Maintenant, c'est la seule solution de travail pour moi (j'ai trouvé plusieurs exemples avec la classe de pagination, mais ces exemples sont très compliqués pour moi, donc je ne peux pas dans un délai raisonnable pour mes besoins). Alors décidé de créer quelque chose de simple.

Le script fonctionne si nécessaire, seul ce $post_date_month = $_POST['date_month'].$_GET['date_month']; semble un peu fou. Donc la question: est le code acceptable (peut être utilisé dans les scripts)? Avec la même requête (clic), l'utilisateur peut définir/passer soit $ _POST ou $ _GET et jamais les deux.

Mise à jour

Basé sur Ø Hanky ​​Panky Ø des conseils (qui est unfortunatelly supprimé) a changé

$post_date_month = $_POST['date_month'].$_GET['date_month'];

à

$post_date_month = $_REQUEST['date_month'];

+1

S'il vous plaît utiliser 'htmlspecialchars' pour éviter XSS lors de la sortie des données utilisateur. –

+1

Lisez les documents pour '$ _REQUEST'. http://php.net/manual/fr/reserved.variables.request.php – Crontab

+0

@ Marcel Korpel 'htmlspecialchars' est utilisé dans ' user2466952

Répondre

1

Vous pouvez créer le formulaire comme cela, mais lorsque vous l'envoyez en utilisant POST, cette variable spécifique sera entièrement stockée dans $_POST['date_month'].

Dans votre cas, lorsque vous soumettez le formulaire, vous trouverez uniquement la variable page dans GET (en supposant qu'il n'existe aucune chaîne de requête dans $_SERVER["PHP_SELF"]).

il vous suffit d'utiliser:

$post_date_month = $_POST['date_month']; 

Cependant, si vous voulez que l'utilisateur de fournir seulement le mois d'une manière (ou postget), vous feriez mieux d'utiliser quelque chose comme (écrit pour clarté):

if (isset($_POST['date_month'])) 
{ 
    $post_date_month = $_POST['date_month']; 
} 
elseif (isset($_GET['date_month'])) 
{ 
    $post_date_month = $_GET['date_month']; 
} 
else 
{ 
    // no month given, so for example: 
    $post_date_month = ''; 
} 
+0

regarder le code de la boucle for – amigura

+0

Dans le cas improbable de

', * les deux *' $ _POST ['date_month'] 'et' $ _GET ['date_month'] 'contiendra des valeurs (différentes?). –

+0

@MarcelKorpel Était en train de modifier ... – jeroen

1

Le code est un peu étrange, mais Je pense que c'est acceptable. Attention à ne pas passer les variables $ _POST ang $ _GET à la requête, car il peut s'agir d'un vecteur pour une injection Sql.