nouvelle question sur array()

Eléphanteau du PHP | 18 Messages

01 oct. 2005, 15:17

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 :)

Mammouth du PHP | 1311 Messages

01 oct. 2005, 15:23

tu peut essayer comme ca, mais verifie que tes tableaux sont identiques
for($i=0;$i<count($desc);$i++)
{
 echo $desc[$i].$page[$i];
}

Eléphanteau du PHP | 18 Messages

02 oct. 2005, 08:38

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 ...

Mammouth du PHP | 1311 Messages

02 oct. 2005, 09:55

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());
}

Mammouth du PHP | 19672 Messages

02 oct. 2005, 10:07

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 18 Messages

02 oct. 2005, 10:29

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)

...

Mammouth du PHP | 19672 Messages

02 oct. 2005, 10:46

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 18 Messages

02 oct. 2005, 10:49

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...)

:)

Mammouth du PHP | 19672 Messages

02 oct. 2005, 10:50

Le code que je t'ai mis fera exactement ça.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 18 Messages

02 oct. 2005, 11:05

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 ...

Mammouth du PHP | 19672 Messages

02 oct. 2005, 11:17

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 18 Messages

02 oct. 2005, 11:31

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 .. :?

Mammouth du PHP | 983 Messages

02 oct. 2005, 11:33

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;
}
?>

Mammouth du PHP | 19672 Messages

02 oct. 2005, 11:41

C'est quoi ce "case" sans switch ???
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 18 Messages

02 oct. 2005, 14:03

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 ^^