[RESOLU] comment inserer les donnees d'un tableau utilisant une boucle dans une table?

choubix
Invité n'ayant pas de compte PHPfrance

13 oct. 2007, 13:35

bonjour,

dans le code suivant je traite les données d'un formulaire.
<?php
include("../includes/config.php");


$fields = array_keys($_POST);

for ($i = 0; $i < count($fields); $i++)
	{
	$data[$i] = $_POST[$fields[$i]];
	print "$data[$i]";
	}
	
mysql_close();
	?>
Je recupere donc les donnees d'un formulaire (subscribe.php) dans un tableau et j'utilise une boucle (subscribe.tpl.php).

dans ce code j'affiche juste les donnees a l'ecran.

maintenant ce que je voudrais supprimer le print "$data[$i]" pour une insertion des donnees dans une table (le premier champs etant un autoincrement)

est ce que qq un pourrait me dire comment faire svp?

merci!
Alex

choubix
Invité n'ayant pas de compte PHPfrance

13 oct. 2007, 13:47

petite precision:

les champs sont "id, lname, fname, dob, email, password"

'id' etant une clef qui s'autoincremente.

d0m
Mammouth du PHP | 1141 Messages

15 oct. 2007, 08:42

Tu ne précises pas donc je pars du fait que tu as une base MySQL.

Il faut donc :
- écrire ta requête d'insertion SQL sous la forme d'une chaine de caractère.
- executer ta requête via les fonctions mysql de php

tout ca dans la boucle.

choubix
Invité n'ayant pas de compte PHPfrance

15 oct. 2007, 08:54

bonjour d0m, merci pour ton message.

j'ai essaye la requete:

$query = INSERT INTO matable (lname, fname, dob, email, password) VALUES ("$data[$i]");
mysql_query($query);

dans la boucle mais ca n'a rien fait.

je precise les champs de la table a remplir dans la requete INSERT car il y en a plus que ces 5 la mais le formulaire ne contient que ces 5 informations.

aurais tu une idee stp?
merci

ViPHP
ViPHP | 4039 Messages

15 oct. 2007, 09:05

Tout d'abord, c'est pas bien écris, ça doit être comme ceci:
$query = "INSERT INTO matable (lname, fname, dob, email, password) VALUES ('".$data[$i]."')"; 
Et puis, tu as un message d'erreur ? tu vois qu'il n'y a rien d'inséré dans la bdd ?

Et si tu fais
mysql_query($query) or die ("ça marche pas.."); 
y'a toujours rien de changé ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

d0m
Mammouth du PHP | 1141 Messages

15 oct. 2007, 09:11

Ta requête sql, pour fonctionner, doit être de cette forme :

Code : Tout sélectionner

INSERT INTO matable (lname, fname, dob, email, password) VALUES ('valeur_lname','valeur_fname','valeur_dob','valeur_email','valeur_password')
Ca c'est pas du php c'est du SQL.

Maintenant pour construire dynamiquement ta requête SQL avec les bonnes valeurs issues de ton formulaire, il faut passer par le php.
- d'abord identifier toutes tes variables à insérer :
$lname    = $_POST[$fields[?]];
$fname    = $_POST[$fields[?]];
$dob      = $_POST[$fields[?]];
$email    = $_POST[$fields[?]];
$password = $_POST[$fields[?]];
le ? représente le numéro suivant ton champ

- ensuite insérer des variables dans la requete en concaténant la chaine

ViPHP
ViPHP | 4039 Messages

15 oct. 2007, 10:41

suis-je bête, j'ai même pas vu l'array dans la requête.. vilain berzé, vilain..
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

choubix
Invité n'ayant pas de compte PHPfrance

15 oct. 2007, 10:48

hello,

donc il faut que je redecompose le tableau en i variables pour le faire rentrer dans ma table...

argh: j'esperais vraiment pouvoir eviter de rallonger mon code avec des variables de partout

est ce qu'il ne serait pas possible "d'exploser" le tableau plutot que de creer des variables par hasard? (desole pour ces questions mais mon php a bien rouille depuis 2 ans. c'est comme si je repartais de 0... :( )

merci

d0m
Mammouth du PHP | 1141 Messages

15 oct. 2007, 10:57

bien sur, après il faut juste garder certaines règles.
Par exemple tu peux insérer, même si ce n'est pas recommendé niveau sécurité, les variables de ton post directement dans ta requête.

Par exemple si tu veux faire cela :
$requete = "INSERT INTO matable (lname, fname, dob, email, password)
           VALUES ('".implode("','",$_POST[$fields)."')";
il faut alors :
- que tes données dans le tableau $_POST[fields] soient dans le même ordre que tes champs dans la requête (0:lname,1fname,...)
- que tous tes champs sont de types chaines de caractères (pour les '' autour de la valeur dans la requête)

Mais franchement je te conseille de vérifier les champs entrés avant de les passer dans la requête SQL et donc de ne pas passer par un implode.

choubix
Invité n'ayant pas de compte PHPfrance

15 oct. 2007, 12:32

ok, je crois saisir le probleme de vouloir faire passer le tableau directement, surtout qu'il faut que je retravaille la date de naissance car il 'sagit de 3 boites de selection: jour, mois, annee. donc ca pass pas directement...

par contre je me retrouve bloque dans mon INSERT maintenant.

la structure de la base c'est ca:
  • Field Type
  • id_clients int(11)
  • gender tinyint(1)
  • fname char(80)
  • lname char(80)
  • dob date
  • email varchar(80)
  • password text
  • zip int(11)
  • country varchar(40)
  • newsletter_1 int(11)
  • newsletter_2 int(11)
  • referral int(11)
  • confirmation_code int(35)
  • confirmation int(11)
et le code php c'est ca:
<?php
include("../includes/config.php");


$fields = array_keys($_POST);

for ($i = 0; $i < count($fields); $i++)
	{
	$data[$i] = $_POST[$fields[$i]];
	$gender = $_POST[$fields[0]];	
	$fname = $_POST[$fields[1]];	
	$lname = $_POST[$fields[2]];
		
	//join the date fields together to insert into database: ok
	$array = array($_POST[$fields[5]], $_POST[$fields[4]], $_POST[$fields[3]]);
	$dob = implode("-", $array);
	
	$email = $_POST[$fields[6]];
	$password = $_POST[$fields[7]];
	$zip = $_POST[$fields[8]];
	$country = $_POST[$fields[9]];
	
	}

//insert into the CLIENTS all form's values
$query= ("INSERT INTO clients (gender, fname, lname, dob, email, password, zip, country) VALUES ($gender, $fname, $lname, $dob, $email, $password, $zip, $country)");
mysql_query($query) or die('Invalid query: ' . mysql_error()); 

mysql_close();
	?>
le probleme vient du fait que tous les champs que je veux inserer et qui sont du texte dans le formulaire me donnent un message d'erreur. par contre ca marche bien quand je change pour des chiffres.

par ailleurs: impossible de faire rentrer la DATE et l'EMAIL dans la table (pourtant il me semble que le format est bon...)


qq un pourrait me dire quel est l'erreur dans ma table/requete svp? (j'ai regarde sur le site de mysql pour les champs mais VARCHAR semble pouvoir recuperer des chiffres ET des lettres il me semble)

merci :)

d0m
Mammouth du PHP | 1141 Messages

15 oct. 2007, 13:09

le probleme vient du fait que tous les champs que je veux inserer et qui sont du texte dans le formulaire me donnent un message d'erreur. par contre ca marche bien quand je change pour des chiffres.
pour insérer des valeurs de type chaine de caractères il faut les mettre entre quotes:

Code : Tout sélectionner

INSERT INTO personne (id,nom) VALUES (1,'john')
par ailleurs: impossible de faire rentrer la DATE et l'EMAIL dans la table (pourtant il me semble que le format est bon...)
email est une chaine de caractère donc aussi entre quotes.

Invité
Invité n'ayant pas de compte PHPfrance

15 oct. 2007, 13:48

ca marche au poil maintenant!

merci!! :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 oct. 2007, 16:41

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer