Page 1 sur 1

Probleme de foreach

Posté : 20 févr. 2009, 16:48
par levon
Bonjour les amis,

Je bloque sur une tache et j'arive pas à avancer depuis un bon moment.
J'ai dans une base de donnée une table de 50 champs.
J'ai un formulaire de plusieurs pages qui avec la variable $_SESSION accumule les 50 variables qu'il va à la fin remplir dans la table.
une fois que $_SESSION a les 50 variables, j'ai envie, sur chaque variable de faire
if(isset($_SESSION['variable'])): 
    $variable=$_SESSION['variable'];
else:
    $variable='NULL';
endif;
pour ne pas faire 50 fois ceci, je veux mettre toutes mes variables dans un tableau et utiliser un foreach dessus. Ce qui donnerait :
$arr = array('ID', 'nom', 'prenom' . . . . . . .. . . . . . );
et je bloque sur la suite.
Pouvez vous m'indiquer comment faire ?

Merci bcp

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 20 févr. 2009, 16:57
par Berzemus
Si toutes tes variables on le même nom que dans ta table, extraire les clefs avec un array_keys dans un tableau (au lieu de le taper à la main), puis une boucle foreach la dessus ou tu place chaque variable de $_session dans un ta chaine

Genre:
$clefs = array_keys($_SESSION['data']);
foreach ($clefs as $clef)
  {
  $req .= $_SESSION['data']['clef']
  }
J'ai mis les variables dans une autre variable session, pour les isoler et éviter de ramasser d'autres variables qui pourraient s'y retrouver.

En gros c'est comme ça, mais bien évidemment, ça ne marche pas. Le mieux c'est presque d'ajouter ces variables à un tableau, puis d'utiliser un implode.

Note que tu pourrais n'utiliser que des implodes:
$req = "INSERT INTO table_name ('". implode('\',\'', array_keys($_SESSION['data']))."') VALUES ('". implode('\',\'', $_SESSION['data'])."')";
C'est propre comme ça :wink:

Posté : 20 févr. 2009, 17:40
par levon
sachant que tout les champs de mon formulaire ne sont pas obligatoires, comment faire pour remplir que ces champs la ?

Posté : 20 févr. 2009, 19:22
par AB
Tu peux tester un truc dans le genre. Notes que les formulaires sont conçus pour créer directement un tableau. Il est bien entendu que tes noms dans les input doivent correspondent aux champs de ta table.
<?php
session_start();

// enregistrement de plusieurs formulaires	
if (isset($_POST['form'])) 
{
$_SESSION['form'] = isset($_SESSION['form'])? array_merge($_SESSION['form'],$_POST['form']) : $_POST['form'];

// supprime les éléments vides
$_SESSION['form'] = array_filter($_SESSION['form']);
}	

// création des champs nécessaires à la requête
if (isset($_SESSION['form'])) 
	{
	$champs = array();
	$valeurs = array();
	
	foreach ($_SESSION['form'] as $key => $value)
		{
		$champs[] = $key;
	 	$valeurs[] = "'".$value."'";
		}
		
		
	if (count($champs) > 0) 
		{
		$champs = '('.implode(',',$champs).')';
		$valeurs = '('.implode(',',$valeurs).')';		
		}
		else $champs = null;
	}

$req = null;

if (isset($champs)) $req = "INSERT INTO table_name ".$champs." VALUES".$valeurs;

if(isset($req)) echo $req;
?>
	   <form action="#" method="post">
	   <input type = "text" name = "form[nom]" value=""/>
	   <input type = "text" name = "form[prenom]" value="" />
	   <input type = "text" name = "form[adresse]" value="" />
	   <input type = "submit"  name = "formulaire1" value = "ok" />
	   </form>

	   <form action="#" method="post">
	   <input type = "text" name = "form[tel]" value=""/>
	   <input type = "text" name = "form[mail]" value="" />
	   <input type = "text" name = "form[ville]" value="" />
	   <input type = "submit"  name = "formulaire2" value = "ok" />
	   </form>

Posté : 25 févr. 2009, 17:18
par levon
mon probleme est resolu avec la ligne
$req = "INSERT INTO coordonnees (`". implode('`,`', array_keys($_SESSION))."`) VALUES ('". implode('\',\'', $_SESSION)."')";
merci