Form avec très grand nombre de variables : comment récupèrer ?
Posté : 15 août 2017, 04:11
Hello,
Voilà, je galère sévèrement sur une formulaire dans lequel je dois pouvoir passer un grand nombre de variables.
Pour se mettre dans le contexte, j'ai un fichier messages.html dans lequel sont ajoutés des dédicaces sur le site d'une webradio.
J'ai besoin de pouvoir manipuler ce fichier pour, par exemple, supprimer ou corriger une dédicace.
L'idée étant de ne pas passer par le ftp pour le faire mais via une interface admin.
Le contenu est de forme :
Date, Heure, Auteur, et Message. Puis une case à cocher pour supprimer une dédi.
Jusque là ça va.
Le souci étant qu’actuellement le fichier a environ 700 dédis, ce qui fait qu'à taux de 5 variables par dédi, le transfert des variables à la validation du form ne se fait pas entièrement.
Evidement, je ne peux pas modifier le max_input_vars sur le php du serveur.
A force de chercher une solution, je suis tombé sur un script, qui à priori passe tout d'un coup et redécompose à l'arrivée.
J'en mets ici les parties pertinentes :
En effet, les données sont toutes transmises (le format est un peu bizarre mais je pense qu'avec un urldecode je devrais résoudre ce souci.
Si je mets
à la place de
Les variables s'affichent d'une manière un peu plus ordonnées (me^me si les valeurs sont pas encore super lisibles, cf. ce dont je parlais juste au dessus) . Par exemple :
Le problème auquel je suis confronté, c'est comment utiliser les variables qu'il m'affiche ?
J'ai fais pour tester, une boucle for sur 100 dédis :
Il me dit 100 fois que la variable message_ n'existe pas.
Je change donc pour
Il y a du mieux dans le sens où il y a le numéro de message (message_0 jusqu'à message_99) mais il me dit que ca existe toujours pas (donc 100 erreurs).
Je teste en voulant afficher par exemple le message de la troisième dédi, sans boucle for.
Idem, la variable message_2 n'existe pas.
Je ne sais plus du tout où chercher, pourtant que je sens que je suis pas loin
C'est en vous remerciant par avance si vous avez une solution
Merci
Couin
Voilà, je galère sévèrement sur une formulaire dans lequel je dois pouvoir passer un grand nombre de variables.
Pour se mettre dans le contexte, j'ai un fichier messages.html dans lequel sont ajoutés des dédicaces sur le site d'une webradio.
J'ai besoin de pouvoir manipuler ce fichier pour, par exemple, supprimer ou corriger une dédicace.
L'idée étant de ne pas passer par le ftp pour le faire mais via une interface admin.
Le contenu est de forme :
JANIO JUAZEIRO CE a écrit le 08/08/2017 à 20:58:46 : BOA TARDE!!! RADIO NOTA 10 ---- JANIO JUAZEIRO CE a écrit le 02/08/2017 à 23:48:57 : OTIMA RADIO PARABENS AOS ORGANIZADORES ---- Atjeplog a écrit le 28/07/2017 à 20:51:51 : Yeah euro!! ----
etc etc etc
Pour travailler les dédis, j'ouvre et décompose le fichier pour en faire faire un form contenant un tableau avec plusieurs champs : Date, Heure, Auteur, et Message. Puis une case à cocher pour supprimer une dédi.
Jusque là ça va.
Le souci étant qu’actuellement le fichier a environ 700 dédis, ce qui fait qu'à taux de 5 variables par dédi, le transfert des variables à la validation du form ne se fait pas entièrement.
Evidement, je ne peux pas modifier le max_input_vars sur le php du serveur.
A force de chercher une solution, je suis tombé sur un script, qui à priori passe tout d'un coup et redécompose à l'arrivée.
J'en mets ici les parties pertinentes :
Code : Tout sélectionner
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</head>
<body>
<?php
if($_SERVER["REQUEST_METHOD"]==="POST" && !empty($_POST["data"])) {
$vars = explode("&", $_POST["data"]);
$data = array();
foreach($vars as $var) {
parse_str($var, $variable);
assign_var($_POST, $variable);
}
echo "<pre>";
var_dump($_POST);
echo "</pre>";
}
function assign_var(&$target, $var) {
$key = key($var);
if(is_array($var[$key]))
assign_var($target[$key], $var[$key]);
else {
if($key==0)
$target[] = $var[$key];
else
$target[$key] = $var[$key];
}
}
?>
<form id="myForm" method="POST">
//// Tableau pour afficher les champs de toutes les dédis depuis le fichier messages.html
</form>
<style>
input {
margin: 0px 0;
}
</style>
<script type="text/javascript">
(function(){
$(function(){
$("#myForm").submit(function(event) {
var $this = $(this);
var data = $this.serialize();
$this.find("input, textarea, select, button").remove();
$this.append("<input type='hidden' class='data' name='data'/>");
$this.find("input.data").val(data);
});
});
})(jQuery);
</script>
</body>
</html>
Si je mets
Code : Tout sélectionner
echo "<pre>";
echo $var;
echo "</pre>";Code : Tout sélectionner
echo "<pre>";
var_dump($_POST);
echo "</pre>";Code : Tout sélectionner
date_0=08%2F08%2F2017
heure_0=20%3A58%3A46
auteur_0=JANIO+JUAZEIRO+CE+
message_0=BOA+TARDE!!!+RADIO+NOTA+10
date_1=02%2F08%2F2017
heure_1=23%3A48%3A57
auteur_1=JANIO+JUAZEIRO+CE+
message_1=OTIMA+RADIO+PARABENS+AOS+ORGANIZADORES
date_2=28%2F07%2F2017
heure_2=20%3A51%3A51
auteur_2=Atjeplog
message_2=Yeah+euro!!J'ai fais pour tester, une boucle for sur 100 dédis :
Code : Tout sélectionner
for($i = 0; $i <= 99; ++$i) {
$message = $message_[$i];
echo $message;
}Je change donc pour
Code : Tout sélectionner
for($i = 0; $i <= 99; ++$i) {
$message = ${'message_'.$i}
echo $message;
}Je teste en voulant afficher par exemple le message de la troisième dédi, sans boucle for.
Code : Tout sélectionner
echo $message_2; Je ne sais plus du tout où chercher, pourtant que je sens que je suis pas loin
C'est en vous remerciant par avance si vous avez une solution
Merci
Couin