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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] comment inserer les donnees d'un tableau utilisant une boucle dans une table?

par zeus » 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 !!! ;)

par Invité » 15 oct. 2007, 13:48

ca marche au poil maintenant!

merci!! :)

par d0m » 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.

par choubix » 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 :)

par d0m » 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.

par choubix » 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

par Berzemus » 15 oct. 2007, 10:41

suis-je bête, j'ai même pas vu l'array dans la requête.. vilain berzé, vilain..

par d0m » 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

par Berzemus » 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é ?

par choubix » 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

par d0m » 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.

par choubix » 13 oct. 2007, 13:47

petite precision:

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

'id' etant une clef qui s'autoincremente.

comment inserer les donnees d'un tableau utilisant une boucl

par choubix » 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