problème insertion valeur d'un tableau dans une table mysql

ulfhamir
Invité n'ayant pas de compte PHPfrance

03 mai 2010, 16:56

Bonjour,
J'ai une table nommé preview dans laquelle j'ai un champ url,lien image et nom!
la variable nom est un tableau.quand je fait un echo avec une boucle for each il m'affiche bien toute les valeur du tableau mais quand j'essaie de l'insérer dans mon champ il ne récupère que la dernière valeur du tableau:

Code : Tout sélectionner

if(!empty($_POST['url'])) {$url=$_POST['url']; } if(!empty($_POST['link'])) {$lienimage=$_POST['link'];} if(!empty($_POST['nom'])) {$nom = $_POST['nom']; $nomarray = preg_split('/,/', $nom, -1, PREG_SPLIT_NO_EMPTY); foreach($nomarray as $valuenom ) {echo $valuenom; } } $requeteinsert = 'INSERT INTO preview(url,lienimage,nom) VALUES(\''.$url.'\',\''.$lienimage.'\',\''.$valuenom.'\')'; $result = mysql_query($requeteinsert,$connect); echo '<p >Preview bien enregistrée!</p>'; mysql_close($connect);
Je ne sais pas comment faire pour que chaque nouvelle valeur du tableau créé un nouvelle id avec la meme url et le meme lien d'image et surtout que mes valeurs $valuenom soit récupéré?

Eléphanteau du PHP | 21 Messages

03 mai 2010, 17:27

salut :wink:
pour récupérer un tableau dans ta bdd je crois bien qu'il faut passer comme pour les objets par un "serialize() - unserialize()"

en gros tu change ce ki est dans ton tableau en chaine de caractere avec le serialize et tu le recharge en tant que tableau avec unserialize

Eléphanteau du PHP | 21 Messages

03 mai 2010, 17:37

oula je crois ke j'ai pas bien compris ce que tu demandais #-o autant pour moi

bah dapres ton code il semble normal que tu ne récupère que le dernier puisque la requete se fait apres le foreach, donc la valeur valuenom contient la derniere valeur de celui ci.

A la limite met carrément ta requete et son exécution dans le foreach comme ça tu aura une entrée dans ta bas de donnée pour chaque valeur de ton tableau nom avec toutes les valeurs de url et lien image identique

Mais est-ce bien ce ke tu veux faire ? 8-|
Modifié en dernier par Duke le 03 mai 2010, 17:39, modifié 1 fois.

ulfhamir
Invité n'ayant pas de compte PHPfrance

03 mai 2010, 17:38

Merci pour ta réponse mais cette fonction:

Code : Tout sélectionner

$nomarray = preg_split('/,/', $nom, -1, PREG_SPLIT_NO_EMPTY);
sépare déja chaque var dans le tableau et ce que je ne comprend pas c'est que le champ nom ne récupère que la première valeur alors que quand je fais un echo de $valuenom il me met bien toute les valeurs.
??

Eléphanteau du PHP | 21 Messages

03 mai 2010, 17:44

je pense que c'est parce que le sql n'interprete pas les variables comme php mais je ne connais pas la fonction
preg_split('/,/', $nom, -1, PREG_SPLIT_NO_EMPTY)
je vais regarder a quoi ça correspond avant de dire d'autres bétises 8-)

Eléphanteau du PHP | 21 Messages

03 mai 2010, 17:54

D'après ce que je vois cela change une chaine de caracteres qui contient plusieurs choses bien définis en un tableau contenant toute ces choses mais je ne pense pas comme je le disais tanto que sql puisse lire un tableau en php, mais tout d'abord je veux etre sur d'avoir compris ce que tu voulais faire :

donc tu fais passer des variables depuis un formulaire, une url, un lienimage et une variable qui contient plusieurs noms, et tu veux entrer dans ta base de données une ligne par nom avec pour chaque nom les memes infos url et lienimage, c'est bien ça ?
(oui je suis assez long à la détente, je sais :roll: )

parce que dans ce cas je serais toi je ferais ça :
if(!empty($_POST['url']))
{$url=$_POST['url'];
}
if(!empty($_POST['link']))
{$lienimage=$_POST['link'];}
if(!empty($_POST['nom']))
{$nom = $_POST['nom'];
$nomarray = preg_split('/,/', $nom, -1, PREG_SPLIT_NO_EMPTY);
foreach($nomarray as $valuenom )
   {echo $valuenom;
  $requeteinsert = "INSERT INTO preview(id,url,lienimage,nom) VALUES('','".$url."','".$lienimage."','".$valuenom."')";
$result = mysql_query($requeteinsert,$connect);
 }
}

      echo '<p >Preview bien enregistrée!</p>';
      mysql_close($connect);   

avec le champ id en auto_increment of course :wink:

ulfhamir
Invité n'ayant pas de compte PHPfrance

03 mai 2010, 18:03

Non t'inquiète c'est pas super clair au début.Mais c'est bien ça.
En fait ce sont des variables envoyées depuis un fichier flash.Je ne pouvais pas faire autrement que d'envoyer ces variables flash que sous forme de tableau.En conséquence la variable $nom= _POST['nom']est déjà un tableau à part entière.J'ai galéré pour trouvé cette fonction qui sépare toute les donnée de $nom pour pouvoir les lire avec un for each.
Pour le reste tu as bien compris car l'url est toujours unique ainsi que le liens d'image.Il n'y a que le nom qui varie ainsi que sa taille mais (je n'ai pas spécifié les variable de la taille de l'image puisque c'est exactement le meme problème).

J'aimerais donc que ma table récupère les choses de cette façon:
id url lien nom
1 www.site.com image.jpeg bannière popo
2 www.site.com image.jpeg bannière kk
2 www.site.com image.jpeg bannière pépé

En gros c'est ça :mrgreen:

Eléphanteau du PHP | 21 Messages

03 mai 2010, 18:05

désolé j'ai édité mon précédent message pendant que tu rédigeait le tiens.
Essaye le code que j'ai mis plus haut et dis moi si ça t'aide

ulfhamir
Invité n'ayant pas de compte PHPfrance

03 mai 2010, 18:06

Ah oups j'avais pas vu ton exemple.J'essaie et je reviens!

ulfhamir
Invité n'ayant pas de compte PHPfrance

03 mai 2010, 18:10

Ah yes ça a l'air de marché!Le problème maintenant c'est que c'était une betise de ne pas spécifier qu'il y avait d'autre var car je ne sais plus quoi faire des autres for each du coup. 8-|

ulfhamir
Invité n'ayant pas de compte PHPfrance

03 mai 2010, 18:15

Est-ce possible de faire foreach($nomarray as $valuenom && $widtharray as $valuewidth)et ainsi de suite pour les autres tableaux

ViPHP
ViPHP | 5462 Messages

03 mai 2010, 22:48

Est-ce possible de faire foreach($nomarray as $valuenom && $widtharray as $valuewidth)et ainsi de suite pour les autres tableaux
essaye :wink:

ulfhamir
Invité n'ayant pas de compte PHPfrance

05 mai 2010, 13:53

marche pas!
Je pense qu'il faudrait plutôt que je procède comme ça:

Code : Tout sélectionner

if(!empty($_POST['nom']) ) { $nom = $_POST['nom']; $nomarray = preg_split('/,/', $nom, -1, PREG_SPLIT_NO_EMPTY); $nomarray = preg_split('/undefined/', $nom, -1, PREG_SPLIT_NO_EMPTY); } if(!empty($_POST['large'])) {$width = $_POST['large']; $widtharray = preg_split('/,/', $width, -1, PREG_SPLIT_NO_EMPTY); $widtharray = preg_split('/undefined/', $width, -1, PREG_SPLIT_NO_EMPTY); } if(!empty($_POST['haut'])) { $height = $_POST['haut']; $heightarray = preg_split('/,/', $height, -1, PREG_SPLIT_NO_EMPTY); $heightarray = preg_split('/undefined/', $height, -1, PREG_SPLIT_NO_EMPTY); } if(!empty($_POST['positionX'])) {$posx = $_POST['positionX']; $posxarray = preg_split('/,/', $posx, -1, PREG_SPLIT_NO_EMPTY); $posxarray = preg_split('/undefined/', $posx, -1, PREG_SPLIT_NO_EMPTY); } if(!empty($_POST['positionY'])) { $posy = $_POST['positionY']; $posyarray = preg_split('/,/', $posy, -1, PREG_SPLIT_NO_EMPTY); $posyarray = preg_split('/undefined/', $posy, -1, PREG_SPLIT_NO_EMPTY); } $connect=mysql_connect(DB_HOST,DB_LOGIN,DB_PASS) or die ('erreur de connexion'); mysql_select_db(DB_BDD) or die ('erreur de connexion à la base'); for ($i=0;$i<count($nomarray);$i++) { $requeteinsert = 'INSERT INTO preview(url,lienimage,nom,width,height,posX,posY) VALUES(\''.$url.'\',\''.$lienimage.'\',\''.$?jesaispas.'\',\''.$?jesaispas.'\',\''.$?jesaispas.'\',\''.$?jesaispas.'\',\''.$?jesaispas.'\')'; $result = mysql_query($requeteinsert,$connect); }
$?jesais pas car comme je voudrais mettre une variable de chaque tableau par ligne,si je fais $nomarray[$i],il me met tout le contenu du tableaux(normal).Comment faire pour qu'il y ai autant de ligne que de valeur dans le tableau tout en n'insérant qu'une variable par ligne?

ulfhamir
Invité n'ayant pas de compte PHPfrance

05 mai 2010, 19:46

Pas d'idée?