Page 1 sur 3

nouvelle question sur array()

Posté : 01 oct. 2005, 15:17
par azram
bonjour a tous

j ai éplucher les différent postes sur le sujet, mais la je calle complet et suis au bord de l apoplexie
donc votre aide sera la bienvenue :)

voila j essaye de faire passer des valeurs via un formulaire dans deux variables

mon form :

Code : Tout sélectionner

<form action="journal.php?mode=insert" method="post" enctype="multipart/form-data">(..) <input type="text" name="page[]" class="normal" size="40"> <textarea name="desc[]" class="textarea" style="width:270px;height:70px;"></textarea> <input type="text" name="page[]" class="normal" size="40"> <textarea name="desc[]" class="textarea" style="width:270px;height:70px;"></textarea> <input type="text" name="page[]" class="normal" size="40"> <textarea name="desc[]" class="textarea" style="width:270px;height:70px;"></textarea> (etc..)
vu que mes variables sont les memes je met les valeurs dans un tableau, puis souhaite les récupérer et surtout les associer par la suite pour une insertion bdd
j ai essayé sa :


$tableau_1 = $page;
$tableau_2 = $desc;

foreach($tableau_1 as $key => $val) {
 	echo "$val :";
	  foreach($tableau_2 as $var)
  			echo " $var <br />"; 
 }  
mais sa me donne en résultat :

Code : Tout sélectionner

page 1 : aaa bbb page 2 : aaa bbb
alors que moi je souhaiterai avoir plutot sa :

Code : Tout sélectionner

page 1 : aaa page 2 : bbb
j ai bien pensé prendre les deux tableaux et en recrée un troisiéme en mettant en clé index la valeur du 1er et en valeur , la veleur du 2 eme mais je n y suis pas arrivé ..

en faite je souhaite pouvoir les regroupé de cette manniére pour pouvoire les insérer dans ma bdd sous le meme id ..

voila j espere avoir été clair
et que vous allez pouvoir m aider
car moi je rage :)

Posté : 01 oct. 2005, 15:23
par jeff
tu peut essayer comme ca, mais verifie que tes tableaux sont identiques
for($i=0;$i<count($desc);$i++)
{
 echo $desc[$i].$page[$i];
}

Posté : 02 oct. 2005, 08:38
par azram
salut jeff

merci de ta réponse, sa marche bien :) ... pour un echo..
mais la finalité c est de faire un insert et la par contre sa marche pô :(
enfin sa marche que si je j insert que la variable définie dans le count
for($i=0;$i<count($page);$i++)
{
$var=$page[$i];
$var2=$desc[$i];
$insSom = mysql_query("INSERT INTO sommaire (page,desc) VALUES ('$var','$var2')");
}
marche pô
for($i=0;$i<count($page);$i++)
{
$var=$page[$i];
$var2=$desc[$i];
$insSom = mysql_query("INSERT INTO sommaire (page) VALUES ('$var')");
}
marche mais m insere que $page
faudrait que je puisse lui imbriquer une autre boucle for pour ma 2eme variable $desc , mais sa revient à mon probleme de depart avec le foreach ...

Posté : 02 oct. 2005, 09:55
par jeff
pour tester essaye ceci
for($i=0;$i<count($page);$i++)
{
$sql='INSERT INTO sommaire (page,desc) VALUES ("'.$page[$i].'","'.$desc[$i].'")';
echo $sql;
$insSom = mysql_query($sql) or die (mysql_error());
}

Posté : 02 oct. 2005, 10:07
par Cyrano
Tu devrais essayer autre chose:
$tableau_1 = $_POST['page'];
$tableau_2 = $_POST['desc']; 
Maintenant tu vas pouvoir faire des boucles sur $tableau_1 et $tableau_2

Posté : 02 oct. 2005, 10:29
par azram
nan c est pareil
for($i=0;$i<count($tableau_1);$i++)
{
$insSom = mysql_query("INSERT INTO sommaire (page,desc) VALUES ('".$tableau_1[$i]."','".$tableau_2[$i]."')");
}
sa m insere rien
:roll:

je me demande si j utilise bien la bonne methode ! en faite je souhaite faire une correspondance, pour générer un tableau en html pour éditer un sommaire de journal
en amont il y a une saisie de ce sommaire, mais bien entendu, le tableau a un nombre de ligne qui varie suivant l édition (nombre qui est defini par l utilisateur dans une 1ere etape avant saisi du formulaire..) et c est a partir de ce nombre que jevais generer mon formulaire d insertion de $page et $desc, si l utilisateur tape = 5 , il y aura 5 input type=text name=page[] et 5 input type=text name=desc[], ensuite chaque ligne va prendre un id différent et sera croisé avec une autre table qui sera la référence du journal
en théorie sa marche (cad quand je rentre mes données en dur dans la table)

...

Posté : 02 oct. 2005, 10:46
par Cyrano
Déjà, tu pourrais faire le tout en une seule requête, il faut la construire dynamiquement. Voici le shéma global:
<?php
/* D'abord on récupère les données du formulaire */
$tableau_1 = $_POST['page'];
$tableau_2 = $_POST['desc'];
/* On compte le nombre de lignes des tableaux */
$nb_lignes = count($tableau_1);
/* On initialise la requête SQL */
$sql = "INSERT INTO sommaire (page,desc) VALUES ";
/* On ajoute les valeurs */
for($i = 0; $i < count($nb_lignes); $i++)
{
    $sql .= "('".$tableau_1[$i]."','".$tableau_2[$i]."')";
    $sql .= ($i < ($nb_lignes - 1)) ? ", " : null;
}
$insSom = mysql_query($sql);
?>
Ça va te générer une requête qui va ressembler à ceci:

Code : Tout sélectionner

INSERT INTO sommaire (page,desc) VALUES ('valeur_1_1', 'valeur_1_2'), ('valeur_2_1', 'valeur_2_2'), ('valeur_3_1', 'valeur_3_2')
Et après la fin de la boucle tu fais l'insertion en une seule fois, c'est plus rapide.

Posté : 02 oct. 2005, 10:49
par azram
pour expliquer mieux :)
en gros j ai :

$page = array('page 1','page2','page3','...');
$desc = array('aaa','bbb','ccc','...');

qui provient de mon formulaire sous la forme, $_POST["page"] et $_POST["desc"]

et je voudrais faire correspondre les valeurs:
page 1 => aaa
page 2 => bbb
page 3 => ccc
... => ...

afin de les insérer dans ma bdd de cette maniere

table = sommaire

champs → id : 1
champs → page : page 1
champs → desc : aaa

champs → id : 2
champs → page : page 2
champs → desc : bbb

champs → id : 3
champs → page : page 3
champs → desc : ccc

voila en gros pour résumé ce que je souhaite faire (y a aussiune liaison avec une aut' table mais bon c est pas le problême...)

:)

Posté : 02 oct. 2005, 10:50
par Cyrano
Le code que je t'ai mis fera exactement ça.

Posté : 02 oct. 2005, 11:05
par azram
oui désolé j ai ecris en meme temps que tu me repondais :)

mais je suis navré sa fonctionne pas ... pourtant je comprend l idée !

la je cale !

/* On compte le nombre de lignes des tableaux */
$nb_lignes = count($tableau_1);
...
/* On ajoute les valeurs */
for($i = 0; $i < count($nb_lignes); $i++)

c est normal que tu compte deux fois la meme valeurs ?

de toute façon j ai essayé une fois sa marche pas non plus ...

Posté : 02 oct. 2005, 11:17
par Cyrano
Non, c'est un oubli, désolé, dans le for, remplace le count par la variable nb_lignes : je fais ça pour optimiser et éviter de faire exécuter le count() à chaque tour de boucle

Posté : 02 oct. 2005, 11:31
par azram
marche pas non plus :(

voila tous le code
<?
case "insert" :
	$fichier=$_POST["fichier"];
	$numero=$_POST["numero"];

$insJourn = mysql_query("INSERT INTO journal (numero) VALUES ('$numero')");
	$id_new = mysql_insert_id();

/* D'abord on récupère les données du formulaire */
$tableau_1 = $_POST['page'];
$tableau_2 = $_POST['desc'];
/* On compte le nombre de lignes des tableaux */
$nb_lignes = count($tableau_1);
/* On initialise la requête SQL */
$sql = "INSERT INTO sommaire (id_journ,page,desc) VALUES ";
/* On ajoute les valeurs */
for($i = 0; $i<$nb_lignes; $i++)
{
    $sql .= "($id_new,'".$tableau_1[$i]."','".$tableau_2[$i]."')";
    $sql .= ($i < ($nb_lignes - 1)) ? ", " : null;
}
$insSom = mysql_query($sql);

break;
}
?>
le 1er insert ce passe bien
mais rien pour le 2eme .. :?

Posté : 02 oct. 2005, 11:33
par rami
La méthode quand on a un problème de requetes est de l'afficher. Essaies ca, regarde le SQL formé par ton code et testes le dans un requeteur:
<?
case "insert" :
    $fichier=$_POST["fichier"];
    $numero=$_POST["numero"];

$insJourn = mysql_query("INSERT INTO journal (numero) VALUES ('$numero')");
    $id_new = mysql_insert_id();

/* D'abord on récupère les données du formulaire */
$tableau_1 = $_POST['page'];
$tableau_2 = $_POST['desc'];
/* On compte le nombre de lignes des tableaux */
$nb_lignes = count($tableau_1);
/* On initialise la requête SQL */
$sql = "INSERT INTO sommaire (id_journ,page,desc) VALUES ";
/* On ajoute les valeurs */
for($i = 0; $i<$nb_lignes; $i++)
{
    $sql .= "($id_new,'".$tableau_1[$i]."','".$tableau_2[$i]."')";
    $sql .= ($i < ($nb_lignes - 1)) ? ", " : null;
}
echo 'Requete generee:'.$sql;
$insSom = mysql_query($sql);

break;
}
?>

Posté : 02 oct. 2005, 11:41
par Cyrano
C'est quoi ce "case" sans switch ???

Posté : 02 oct. 2005, 14:03
par azram
lool c rien je t pas mis toute la page si sa peux te rassurer
je t juste mis la partie qui nous interesse :)

@rami :

oui je l avais fais ;)

resultat de ta requete :
Requete generee:INSERT INTO sommaire (id_journ,page,desc) VALUES (48,'page 1','aaa rtrt ryyy'), (48,'page 2','bbbt trtry yryr')

donc sa passe bien

mais tjrs rien dans la bdd ^^