Forum Clubic

Passer des Variables par POST à la place de GET

Bonjour,

Je cherche une solution pour passer un gros tableau par la methode POST car avec la methode GET cela ne marche pas (trop de données).

J’ai essayé avec du JavaScript et un formulaire en hiden mais ca ne fonctionne pas :(.

Actuellement je transmet mon tableau de cette façon :


<a href='display_list_file.php?id_report=".urlencode(serialize($table_id_report))."'>".$number_file."</a>

Merci de votre aide :jap:
Edité le 20/07/2009 à 14:48

Au pire AJAX. Au mieux : repense ce que tu fais. Crée une table, un truc en session, et mémorise les données du report en session, et accèdes y via un identifiant au besoin.

Merci des conseils mais je ne vois pas comment exploiter AJAX ici.

Créer une table je trouve celà trop lourd en manipulation, surtout pour des données temporaires et les sessions je préfère les utiliser pour des variables utilisées dans toutes les pages du site.

Sinon voici ce que j’ai fait en utilisant du JavaScript.


<script type="text/javascript">
	function url_post(val){
		var myForm = document.getElementById("formHidden");
		myForm.elements["fieldName"].value = val;
		myForm.submit();
	}
</script>

$table_serial = urlencode(serialize($table_id_report));
echo '<td align=left rowspan=1><a href="" onclick="url_post($table_serial);">'.$number_file.'</a></td>';

echo '<form id="formHidden" action="display_list_file.php" method="POST"> 
	<input type="hidden" name="fieldName">
          </form>';

Je pense que ça peut marcher mais pour le moment ce n’est pas le cas :confused: donc si vous pouviez m’aider à faire fonctionner cette solution je vous en remercie.^ ^)

Hé bien tu envoies ta requête en AJAX en méthode POST, ce que ne permettent pas aujourd’hui à ma connaissance les liens.

Et même si c’est temporaire, c’est mieux, ça évite de trainer des données comme ça…

Pourquoi pas utilisé les sessions. Je croi que c’est le plus sympa que de faire transité des informations via HTTP alors qu’il ne sont pas modifier par le client.

Le problème pour les sessions c’est que jai oublié de préciser que les liens qui contienent des paramètres sont créés dans une boucles donc celà signifie qu’il faudrait créer différentes varaibles de sessions.

Code complet:


<script type="text/javascript" src="script_hide_element.js"></script>
<script type="text/javascript">
	function url_post(val){
		var myForm = document.getElementById("formHidden");
		myForm.elements["fieldName"].value = val;
		myForm.submit();
	}
</script>
<?php
include 'connexion.php';

$vobs  = $_POST['Liste1'];
$year  = $_POST['Liste2'];
$month = $_POST['Liste3'];
$date_group = NULL;

if($year == "all_year"){
	$date_group = "YEAR";
}
else if($month == "all_month"){
	$date_group = "MONTH";
}
else{
	$date_group = "DAY";
}

if($vobs == "all_vobs"){
	$query="SELECT SUM(level_quality) AS sum_level_quality,date
			FROM jos_fbk_report ";
	
	$name="All Vobs";	
}else{
	$query="SELECT SUM(level_quality) AS sum_level_quality,date
			FROM jos_fbk_report
			WHERE vobs='$vobs' ";
	$name=$vobs;
}

if($year != "all_year" && $vobs == "all_vobs"){
	$query .= "WHERE YEAR(date)='$year' ";
}
else if($year != "all_year" && $vobs != "all_vobs"){
	$query .= "AND YEAR(date)='$year' ";
}

if($month != "all_month" && $month != ""){
	$query .= "AND MONTH(date)='$month' ";
}

$query .= "GROUP BY $date_group(date)
	ORDER BY date ASC;";

$back = mysql_query($query) or die(mysql_error());
$number = mysql_num_rows($back);
$hash_table = array(NULL);
?>
	<table width="100%" border=1 cellspacing='0' cellpadding='4'>
	    <tr>
	    	<td align=center colspan=3><H3><?php echo $name;?></H3></td>
	    </tr>
	    <tr>
	    	<td align=center><b>Number File</b></td>
			<td align=center><b>Level of Quality</b></td>
			<td align=center><b>Date</b></td>
	    </tr>
<?php
$table_id_report = array(NULL);
while ($data = mysql_fetch_array($back))
{	
	$level_quality = $data['level_quality'];
	$date = $data['date'];
	
	if($vobs=="all_vobs"){
		$query_nbFile="SELECT id_report,vobs,file_name,level_quality
				FROM jos_fbk_report
				WHERE $date_group(date)=$date_group('$date')";
	}else{	
		$query_nbFile="SELECT id_report,vobs,file_name,level_quality
				FROM jos_fbk_report
				WHERE vobs='$vobs'
				AND $date_group(date)=$date_group('$date')";
	}
	$back_nbFile = mysql_query($query_nbFile) or die(mysql_error());
	
	while($data_nbFile = mysql_fetch_array($back_nbFile)){
		array_push($table_id_report,$data_nbFile['id_report']);
	}
	
	unset($table_id_report[array_search(NULL, $table_id_report)]);
	$table_serial = urlencode(serialize($table_id_report));
	
	$number_file = mysql_num_rows($back_nbFile);
	
	$global_level_quality=round($data['sum_level_quality']/$number_file,2);
?>
	<tr name="tables" style="display:none;">
		 <?php echo '<td align=left><a href="" onclick="url_post($table_serial);">'.$number_file.'</a></td>';?>
		<td align=center><?php echo $global_level_quality; ?></td>
		<td align=center><?php echo $date; ?></td>
	</tr >
<?php
	$table_id_report = array(NULL);
	$hash_table[$date]=$global_level_quality;
}
?>
	</table>
<?php
unset($hash_table[array_search(NULL, $hash_table)]);
echo"<Form>
		<Input type='button' name='bouton' value='View detail' onClick=openClose('tables',this)>
	</Form>";
echo "<br />";
echo "<img src='graph_line_evolution_time.php?data=".urlencode(serialize($hash_table))."&name=Level of Quality' />";

mysql_close();
?>

<form id="formHidden" action="display_list_file.php" method="POST"> 
	<input type="hidden" name="fieldName">
</form>

Edité le 17/07/2009 à 11:18

Bah à la fin de ton script juste apres le unset() tu met $_SESSION[‘hash_table’] = $hash_table; je vois pas le probleme :slight_smile:

Merci de ton aide PyrO_70.

Tu te trompe de table j’ai 2 tables là tu parle de la table de hachage et elle à une valeur fixe comparer à table_id_report qui est réinitialisé à chaque tour de la première boucle.

Mon problème se situe dans cette partie:


while ($data = mysql_fetch_array($back))
{	
		
	while($data_nbFile = mysql_fetch_array($back_nbFile)){
		array_push($table_id_report,$data_nbFile['id_report']);
	}
	
	unset($table_id_report[array_search(NULL, $table_id_report)]);
	$table_serial = urlencode(serialize($table_id_report));
	
	?>
	<tr name="tables" style="display:none;">
		 <?php echo '<td align=left><a href="" onclick="url_post($table_serial);">'.$number_file.'</a></td>';?>
		<td align=center><?php echo $global_level_quality; ?></td>
		<td align=center><?php echo $date; ?></td>
	</tr >
<?php
	$table_id_report = array(NULL);
}

Edité le 17/07/2009 à 11:28

Tu peut géré tes variables de session comme tu veux. Tu peut faire un tableau indéxé de tout les tableau que tu crées etc. Bref ya pas de raison que tu puisses pas faire ce que tu veux.

Ha ouè j’ai pas pensé à passer un tableau avec d’autre tableaux dedans et après j’identifie le bon tableau en passant en paramètre (GET) l’index du tableau ;).

Je test mais c’est domage quand même que l’on ne peut pas choisir le type d’envoi (GET ou POST) pour les liens comme pour les formulaires ou enlever la limite pour la méthode GET.

Je comprend pas le besoin de passé à une page un tableau que tu remplis à la page précédant. Fait tout coté serveur ya pas besoin du client pour ca. Si le client à un choix à faire c’est un choix d’identifiant, mais jamais une choix autre 2 tableau de plus de 255caractères (Ou alors c’est un formulaire, dans ce cas la question a meme pas a etre posé vu que le form sont fait pour géré le POST)


<?php

// Fichier Formulaire / Liens

while( $data = mysql_fetch_array( $back ) ) {

	// init
	$table_id_report = array();

	// vars
	$level_quality = mysql_real_es$data['level_quality'];
	$date = $data['date'];

	// request
	$query_nbFile = 'SELECT count(*) COUNT '.
			'FROM jos_fbk_report '.
			'WHERE '.$date_group.'(date) = '.$date_group.'(\''.$date.'\')'.
		        ( $vobs != 'all_vobs' ) ? ' AND vobs=\''.$vobs.'\'' : '';

	// commit sql
	$back_nbFile = mysql_query($query_nbFile) or die(mysql_error());

	// getting data
	$number_file = $back_nbFile['COUNT'];
	
	$global_level_quality = round( $data['sum_level_quality'] / $number_file , 2 );

	?>
	<tr name="tables" style="display:none;">
		<td align=left><a href="display_list_file.php?date=<?php echo $date; ?>&date_group=<?php echo $date_group; ?>&vobs=<?php echo $vobs; ?>"><?php echo $number_file; ?></a></td>';?>
		<td align=center><?php echo $global_level_quality; ?></td>
		<td align=center><?php echo $date; ?></td>
	</tr >
	<?php
}

// Reception

$date_group = mysql_real_escape_string( $_GET['date_group' ] );
$date = mysql_real_escape_string( $_GET['date' ] );
$vobs = mysql_real_escape_string( $_GET['vobs' ] );

$query_nbFile = 'SELECT id_report,vobs,file_name,level_quality '.
				'FROM jos_fbk_report '.
				'WHERE '.$date_group.'(date) = '.$date_group.'(\''.$date.'\')'.
				( $vobs != 'all_vobs' ) ? ' AND vobs=\''.$vobs.'\'' : '';

// et la le traitement des données, le client à juste passé les infos nécéssaire pour retrouvé les données.
?>

Edité le 17/07/2009 à 14:29

Je souhaite utiliser un tableau contenant directement les identifiants des rapports ressortis par la requête SQL pour les traiter facilement après.

Voici à quoi ressemble la page :

http://img18.imageshack.us/img18/7261/pageevolutionquality.jpg

Je comprend pas ou est ton soucis là. Vraiment.

Merci de tes conseils PyrO_70 :slight_smile:

J’aimerais bien utiliser une variable de session comme tu me le préconisait au départ mais je me pose une question est-ce que je pourrais spécifier la déstruction de cette variable après car quand on utilise la methode session_destroy() cela détruit toutes les variables de sessions, non :confused: ?

Pour information j’ai besoin de cette technique (passer beacoup de paramètre à une autre page) pour d’autre pages PHP notament pour mes graphiques c’est pour cela que je veux éviter d’effectuer un requête SQL dans l’autre page car j’aurais trop d’accès à la BDD.
Edité le 20/07/2009 à 11:08

dans ce cas :


unset( $_SESSION['maVar'] );

Ok merci PyrO_70

Désolé de ne pas avoir été plus précis au début.

Maintenant je sais que je peux utiliser les sessions.
J’ai aussi trouvé comment utiliser un formulaire avec des champs cachés, qui est modifiant le CSS du boutons permet d’avoir l’apparence d’un lien.
Edité le 20/07/2009 à 14:46