Page 1 sur 1

boucle pour variable préparée

Posté : 27 juin 2011, 20:07
par kilabcom
bonjour,

la probleme doit etre simple pour vous désolé :oops: mais j'ai un code du style :


$reqimport = $bdd->prepare(' INSERT INTO communes(indexfrais, societe, datefrais, nature, projet, typeTVA, montantHT, montantTVA, montantTTC)
VALUES(:Nchamps1, :Nchamps2, :Nchamps3, :Nchamps4, :Nchamps5, :Nchamps6, :Nchamps7, :Nchamps8, :Nchamps9)');
$reqimport->execute (array (
'Nchamps1' => $liste[0],
'Nchamps2' => $liste[1],
'Nchamps3' => $liste[2],
'Nchamps4' => $liste[3],
'Nchamps5' => $liste[4],
'Nchamps6' => $liste[5],
'Nchamps7' => $liste[6],
'Nchamps8' => $liste[7],
'Nchamps9' => $liste[8]
)
);

la question est comment pourrais faire une boucle pour les Nchamps et les $liste qui varient en quantité ??

merci beaucoup pour vos réponses et pour votre aide.
ki.

Re: boucle pour variable préparée

Posté : 27 juin 2011, 21:15
par Ryle
Je vois pas bien ce que tu veux faire (si c'est la chaine sql que tu veux générer ou le tableau de valeur ou autre chose), mais tu peux par exemple construire ton tableau de valeurs comme ceci :
$tab = array();
for ($i=0 ; $i < 10 ; $i++) {
   $tab['Nchamps' . ($i+1)] => $liste[$i]; // on construit la chaine de l'index en concaténant le libellé et le numéro
}

print_r($tab); // voir le tableau généré
Par contre, d'un point de vue maintenance c'est pas ce qu'il y a de mieux... en effet, il est difficile de savoir si ton montant HT se trouve bien dans le champ numéro 7 ou 8 ..

Re: boucle pour variable préparée

Posté : 28 juin 2011, 07:10
par epommate2
Tu peux aussi regarder du coté des paramètres anonymes :
$bdd->prepare(' INSERT INTO communes(indexfrais, societe, datefrais, nature, projet, typeTVA, montantHT, montantTVA, montantTTC)
VALUES(?,?,?)');
$reqimport->execute ($liste)


Re: boucle pour variable préparée

Posté : 29 juin 2011, 14:09
par kilabcom
parametres anonymes pas mal mais ça marche comment ..?

en attendant j'ai tenté ça mais je n'ai même pas de message d'erreur ça marche pas ...:
	$req = 'INSERT INTO communes(indexfrais, societe, datefrais, nature, projet, typeTVA, montantHT, montantTVA, montantTTC)
		VALUES(';

	$myFields = array 	(
		'Nchamps1' => $liste[0],
		'Nchamps2' => $liste[1],
		'Nchamps3' => $liste[2],
		'Nchamps4' => $liste[3],
		'Nchamps5' => $liste[4],
		'Nchamps6' => $liste[5],
		'Nchamps7' => $liste[6],
		'Nchamps8' => $liste[7],
		'Nchamps9' => $liste[8]
						); 

	foreach($myFields as $k => $v) { $req .= ':'.$k.', '; } // reprend le array et vire pour creer les values de la requete.

	$req=substr($req, 0, strlen($req)-2); // on dégage la dernière virgule 
	$req .= ')'; // on ferme la requête
	
	$reqimport = $bdd->prepare('$req');
	$reqimport->execute($myFields);

Re: boucle pour variable préparée

Posté : 29 juin 2011, 14:28
par Mazarini
Les méthodes errorcode et errorinfo peuvent t'indiquer de quoi il retourne

Re: boucle pour variable préparée

Posté : 30 juin 2011, 18:17
par kilab
error mode tres bonne suggestion ... merci mais ça me creer un autre probleme j'ai fait :
$req = 'INSERT INTO communes(indexfrais, societe, datefrais, nature, projet, typeTVA, montantHT, montantTVA, montantTTC)
		VALUES(';

	$myFields = array 	(
		'Nchamps1' => $liste[0],
		'Nchamps2' => $liste[1],
		'Nchamps3' => $liste[2],
		'Nchamps4' => $liste[3],
		'Nchamps5' => $liste[4],
		'Nchamps6' => $liste[5],
		'Nchamps7' => $liste[6],
		'Nchamps8' => $liste[7],
		'Nchamps9' => $liste[8]
						); 

	foreach($myFields as $k => $v) { $req .= ':'.$k.', '; } // reprend le array et vire pour creer les values de la requete.

	$req=substr($req, 0, strlen($req)-2); // on dégage la dernière virgule 
	$req .= ')'; // on ferme la requête
	
	$reqimport = $bdd->prepare('$req');
	$reqimport->execute($myFields);
	$reqimport-->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
mais j'ai un message du genre :
Fatal error: Call to undefined function setAttribute() in C:\wamp\www\xxxx\xxxx\xxx.php on line 157

pourtant je suis en wampserver 2.0 avec php 5.3.5
comprends pas 8-|

Re: boucle pour variable préparée

Posté : 30 juin 2011, 18:50
par Skw33d
Yop !

Alors je comprend tout à fait ce que tu souhaites faire.
En fait déjà au niveau de ta requête tu t'embête pour rien avec ton substr. Autant tout faire dans la boucle, en incrémentant par exemple une variable $i ca donnerait genre ca :
$i = 0;
foreach($myFields as $k => $v)
{
    if($i > 0)
        $req .= ",:$k";
    else
        $req .= ":$k";
    $i++;
}
Ensuite, faire ca : $reqimport = $bdd->prepare('$req'); :shock: ne sert à rien à part dire que tu veux préparer la requête $req littéralement ^^ Bonne chance :) Enlève donc ces guillemets autour de $req.
$reqimport--> devient plutôt $reqimport->


Mais pourquoi pas une solution qui conviendrait aussi très bien à ton problème ^^ : vos-contributions/bindvalue-sur-tableau-t259264.html

Voilà, ça devrait allé mieux là ?

Re: boucle pour variable préparée

Posté : 30 juin 2011, 19:10
par kilab
t'es au top !!! merci ... :D ça marche d'enfer ton histoire ... =D>
pour info tu sais comment je peux brancher la dedans un errormode ?
j'arrive pas a trouver une syntaxe qui fonctionne ?

Re: boucle pour variable préparée

Posté : 30 juin 2011, 20:49
par Skw33d
Tu veux dire dans mon bindArrayValue ou la méthode que je t'ai corrigé avec la boucle ?

Re: boucle pour variable préparée

Posté : 01 juil. 2011, 02:43
par kilab
dans la version corrigée ... :mrgreen: