Probleme de liste multiple

Signaler
Messages postés
44
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
30 novembre 2005
-
Messages postés
44
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
30 novembre 2005
-
J'ai realisé le code suivant pour stocker les valeur multiple de ma mist ds la base de donner mais ça marche pas merci de me guider a savoir mon erreur

<?
if(isset($_POST['os']) && !empty($_POST['os']))
$Col1_Array = $_POST['os'];
foreach($Col1_Array as $os);

mysql_query ("INSERT INTO tech (os) VALUES ('$os'))
?>

mon probleme ce ke le variable $os contien tous les valeur selectionné mais seulement la dernière valeur qui es stocker dans la bd

17 réponses

Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Salut,



essaie ceci :



<?php

if(isset($_POST['os']))

{

$i=0;

$requete='INSERT INTO tech (os) VALUES ';

while(list($cle,$valeur)=each($_POST['os']))

{

if($i===0)

{

$requete.='("'.$valeur.'")';

$i=1;

}

else

{

$requete.=',("'.$valeur.'")';

}

}

mysql_connect('hote','user','passe');

mysql_select_db('base');

mysql_query ($requete);

mysql_close();

?>

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Hum c'est ta requête qui n'est pas bonne je pense et la syntaxe du foreach :



<?php

if(isset($_POST['os']) && !empty($_POST['os']))

{

foreach($_POST['os'] as $os)

{

mysql_query ("INSERT INTO tech SET os = $os");

}

}

?>

Voilà, ça devrait marcher là
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Tiens je ne connaissais pas cette syntaxe Antho =)



*apprend tous les jours des truc ^_^*
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
j'ai oublié une accolade :



<?php

if(isset($_POST['os']))

{

$i= 0;

$requete='INSERT INTO tech (os) VALUES ';

while(list($cle,$valeur)=each($_POST['os']))

{

if($i===0)

{

$requete.='("'.$valeur.'")';

$i=1;

}

else

{

$requete.=',("'.$valeur.'")';

}

}

mysql_connect('hote','user','passe');

mysql_select_db('base');

mysql_query ($requete);

mysql_close();

}

?>

<hr size ="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
44
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
30 novembre 2005

oui mais j'ai plusieur donnée que je doi integrer ds des champs avec os j'ai pas seulement os ds ma table alors comment doi je faire???
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
hum... je ne comprends pas désolé, montre-nous ton code html ça ira plus vite je pense (et dis-nous ce que tu veux intégrer)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
44
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
30 novembre 2005

mon code c'est le suivant:

$tech= $_SESSION['tech'];
$dat = $_POST['date'];
$heure = $_POST['heure'];
$duree = $_POST['duree'];
$nom = $_POST['name'];
$adress = $_POST['adresse'];
$ville = $_POST['ville'];
$autregion = $_POST['autregion'];
$tel = $_POST['tel'];
$gsm = $_POST['gsm'];
$email = $_POST['email'];
$marque = $_POST['marque'];
$process = $_POST['process'];
$os = $_POST['os'];
$ram = $_POST['ram'];
$cdrom = $_POST['cdrom'];
$graveur = $_POST['graveur'];
$dvd = $_POST['dvd'];
$gravdvd = $_POST['gravdvd'];
$hdd = $_POST['hdd'];
$integ = $_POST['integ'];
$sep = $_POST['sep'];
$confi = $_POST['confie'];
$ref = $_POST['ref'];
$prob = $_POST['prob'];
$resolu = $_POST['resolu'];
$coment = $_POST['coment'];
mysql_query("INSERT INTO $tech (nom,adresse,ville,Autregion,tel,gsm,marque,process,os,ram,cdrom,Graveur,dvd,gravdvd,hdd,integ,sep,refvga,probleme,resolu,coment,confie,date,heure,duree,email) VALUES ('$nom', '$adress','$ville','$autregion', '$tel','$gsm','$marque', '$process','$os','$ram', '$cdrom','$graveur','$dvd', '$gravdvd','$hdd','$integ', '$sep','$ref','$prob','$resolu','$coment','$confi','$dat','$heure','$duree','$email')");

et je veux integrer les valeur de $os dans la base de donnée on savant que le os est une liste avec choi multiple.
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Il faut changer la structure de ta base de donnée en rajoutant une
table avec la liste des OS de chacun des utilisateurs et en la liant à
$tech via une clé étrangère qui est tout bêtement un champ qui fera
référence à la clé primaire de la table ainsi créée. (relation de type
one-to-many)
Messages postés
44
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
30 novembre 2005

ok mais je sais pas comment faire les relation de type one to many avec phpmyadmin et aussi je sais pas faire le code qui va gèrer tous cela vous pouvez m'aider
ou bien me proposer une autre solution??
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Le principe est simple tu garde la table que t'as en enlevant le champ os

Tu crée une table os avec trois champs :


<li>id que sera ta clé primaire</li>
<li>id_tech qui fera référence à la clé primaire de la table $tech</li>
<li>os qui contiendra l'information désirée</li>




Ça donnera un truc comme ça

table $tech :


id : 1


nom : Dupont


etc......



table os

id : 1


id_tech : 1


os : winXP






id : 2



id_tech : 1



os : linux



etc...



Ainsi, il est facile de comprendre que l'utilisateur nommé Dupont
possède deux os via id_tech qui pointe vers l'id de cet utilisateur.



1/ Pour écrire les info dans la base, il suffit :


<li>
d'enregistrer l'utilisateur dans la table $tech</li>
<li>
de récupérer l'id généré (ta clé primaire est probablement en auto_increment), grace à mysql_insert_id()</li>
<li>
d'enregistrer la liste des os pour cet utilistaeur en prenant garde
d'inscrire l'id généré dans le champ id_tech pour que la relation
one-to-many fonctionne.</li>



2/ Pour récupérer les infos d'un utilisateur, il te suffit de faire un SELECT sur ta table $tech avec un WHERE id $id_user et sur ta table os avec un WHERE id_tech $id_user.



Voilà :)
Messages postés
44
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
30 novembre 2005

Alors si je comrend bien chaque foi que j'ai une champ comme celui ci:

<select name="os" size="2" multiple id="os">
<option>Windows 95</option>
<option>Windows 98</option>
<option>Windows XP</option>
<option>Windows 2000 Professionel</option>
<option>Windows 2000 Server</option>
<option>Windows NT 4.0</option>
<option>Linux</option>
<option>Unix</option>
<option>Os 2</option>
</select>

je doi obligatoirement creer une autre table pour stocker les choix multiple de Select??

ensuite j'ai pas compris comment je doi faire pour qu'il insert chaque element dans un champnormalement les multiple choix sont stocké dans un seul variable
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Bon il y a des petits oublis dans ton formulaire :

<select name="os[]" size="2" multiple="multiple" id="os">

<option value="win95">Windows 95</option>

<option value="win98">Windows 98</option>

<option value="winxp">Windows XP</option>


<option value="win2000p">Windows 2000 Professionel</option>


<option value="win200s">Windows 2000 Server</option>

<option value="winnt">Windows NT 4.0</option>

<option value="linux">Linux</option>

<option value="unix">Unix</option>

<option value="os2">Os 2</option>

</select>



Si tu ne met pas d'attribut value dans tes <option> ça ne renverra rien

L'attribut name doit être un tableau (os[])



Ainsi, en envoyant le formulaire via la méthode post, tu récupéreras par exemple :

$_POST["os"] = array(

1 => "winxp",

2 => "linux",

3 => "os2"

);

Donc lors de de l'envoi du formulaire ça donne :

$query "INSERT INTO $tech SET nom '$nom', ....."; // tout le bazard

mysql_query($query,$con_id);



Tu envois la requête, un normalement si tu as une clé primaire en
auto_increment celle-ci va s'incrémenter, et avec mysql_insert_id() tu
peux récupérer cette valeur

$last_id = mysql_insert_id();



Et tu n'as plus qu'à faire une boucle

foreach($_POST["os"] as $os)

{

$query "INSERT INTO os SET id_tech $last_id, os = '$os'";

mysql_query($query,$con_id);

}



Et le tour est joué =)
Messages postés
44
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
30 novembre 2005

j'ai testé cela mais ça marche pas il integrent le contenu dans la table $tech mais il n'integre rien dans os

en + j'ai un autre probleme c'est que la table $tach signifie la table corespand a l'utilisateur connecté parceque j'ai creer une table pour chaque utilisateur et le probleme ici qu'il faus creer aussi une table os pour chaque utilisateur alors il me fau un variable ki reli chaque table $tech avec os corespon
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Bon au moins le mystère de cette variable $tech est résolue. (Je me
suis posé la question de la raison de la mise d'une table sous variable
oui...)



C'est une GROSSE ERREUR DE CONCEPTION de mettre une table par utilisateurs!!!

Il est bien plus simple de chercher un utilisateur dans une liste d'utilisateurs qu'un utilisateur dans une liste de table!



Je te conseil vivement de revoir toute la structure de ta base!

Avec pour l'exemple que tu nous a présenté :

1/ la table utilisateurs avec les champs :

id (clé primaire en auto_increment),
nom, adresse, ville, Autregion, tel, gsm, marque, process, ram, cdrom,
Graveur, dvd, gravdvd, hdd, integ, sep, refvga, probleme, resolu,
coment, confie, date, heure, duree, email

2/ la table os avec les champs :

id (clé primaire en auto_increment), id_utilisateur, os



Tu n'a besoin ni plus ni moins que de deux tables et ce pour TOUS LES
UTILISATEURS! C'est d'ailleurs la dedans que réside toute la puissance
des bases de données relationnelles.

D'ailleurs, je vois que tu as un champ "probleme" dans la table utilisateurs. S'il est possible qu'un utilisateur ait plusieurs problèmes, tu devrais faire une table probleme à l'image de la table os (avec des champs id, id_utilisateur, probleme). Il se formera ainsi entre la table utilisateur et probleme une relation one-to-many (un (ONE) utilisateur pour (TO) plusieurs (MANY) problèmes).



Si tu as du mal a comprendre ces concepts, je te conseille de
télécharger des scripts qui utilise les base de données (les scripts de
galerie par exemple), de les installer et de décrypter leur
fonctionnement :)
Messages postés
44
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
30 novembre 2005

tu ma male compri mon amis et je croi que je t'ai derangé n'est ce pas??
mainteneant je vai vous dire toute la problimatique ke j'ai
je sui entrain de realiser une interface local pour un centre d'appel pour l'assistance technique par telefone.
cette interface va permettre a nos technicien d'inscrir toutes les information qui concerne les gens qui vont leur appeller et c'est très important pour nous de savoir la durée des appelles qui a reçu chaque technicien et aussi ce technicien doi entrer les information concernant les client qui ont appellée dont le nom prenom .... et aussi le probleme et tous

et pour les technicien je les ajout dans une table "accee" pour la verification des login et password après la session prend le nom de tech
et j'ai les table suivant technicien01, technicien02, .... alors par example pour le technicien01 il s'identifier avec technicien01 la session prend la valeur technicien01 et dans la requette $techn=technicien01
c'est ça alors ce que je cherche a faire et apparament ça fonctionne très bien sauf ce probleme des systeme d'exploitation
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Le problème c'est que visiblement le français n'est pas ta langue natale, et qu'effectivement on a du mal à se comprendre :p

Mais bon, tout ton problème réside je pense dans la structure de ta
base de données. Donc tu devrais tout simplement l'afficher pour qu'on
puisse parler la même langue =)

(dans phpmyadmin, il y a une fonction pour exporter la structure de la base de données).

Je t'invite aussi à te documenter sur la théorie qui entoure les base
de données relationnelles (relations, dépendances fonctionnelles,
etc...)
Messages postés
44
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
30 novembre 2005

voila ma base de donnée:


Base de données fr-iso-8859-1&server=1&db=callcenter callcenter sur le serveur localhost


# phpMyAdmin SQL Dump
# version 2.5.3
# http://www.phpmyadmin.net
#
# Serveur: localhost
# Généré le : Samedi 22 Octobre 2005 à 15:57
# Version du serveur: 4.0.15
# Version de PHP: 4.3.3
#
# Base de données: `callcenter`
#

# --------------------------------------------------------

#
# Structure de la table `acce`
#

CREATE TABLE `acce` (
`id` int(11) NOT NULL auto_increment,
`login` varchar(50) NOT NULL default '',
`pass` varchar(50) NOT NULL default '',
`description` varchar(100) NOT NULL default '',
KEY `id` (`id`)
) TYPE =MyISAM AUTO_INCREMENT=3 ;

#
# Contenu de la table `acce`
#

INSERT INTO `acce` VALUES (1, 'technicien01', 'pass', 'nom1');
INSERT INTO `acce` VALUES (2, 'technicien02', 'pass', 'nom2');

# --------------------------------------------------------

#
# Structure de la table `os1`
#

CREATE TABLE `os1` (
`id` int(10) NOT NULL auto_increment,
`id_client` int(11) NOT NULL default '0',
`os` varchar(20) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

#
# Contenu de la table `os1`
#


# --------------------------------------------------------

#
# Structure de la table `technicien01`
#

CREATE TABLE `technicien01` (
`id_client` int(11) NOT NULL auto_increment,
`nom` varchar(40) NOT NULL default '',
`adresse` varchar(150) NOT NULL default '',
`ville` varchar(15) NOT NULL default '',
`Autregion` varchar(20) NOT NULL default '',
`tel` varchar(10) NOT NULL default '',
`gsm` varchar(10) NOT NULL default '',
`marque` varchar(150) NOT NULL default '',
`process` varchar(10) NOT NULL default '',
`ram` varchar(5) NOT NULL default '',
`cdrom` varchar(5) NOT NULL default 'Non',
`Graveur` varchar(5) NOT NULL default 'Non',
`dvd` varchar(5) NOT NULL default 'Non',
`gravdvd` varchar(5) NOT NULL default 'Non',
`hdd` varchar(10) NOT NULL default '',
`integ` varchar(5) NOT NULL default 'Non',
`sep` varchar(5) NOT NULL default 'Non',
`refvga` varchar(50) NOT NULL default '',
`probleme` longtext NOT NULL,
`resolu` varchar(5) NOT NULL default '',
`coment` longtext NOT NULL,
`confie` varchar(20) NOT NULL default '',
`date` varchar(10) NOT NULL default '',
`heure` varchar(10) NOT NULL default '',
`duree` varchar(10) NOT NULL default '',
`email` varchar(50) NOT NULL default '',
PRIMARY KEY (`id_client`)
) TYPE=MyISAM AUTO_INCREMENT=19 ;

#
# Contenu de la table `technicien01`
#

INSERT INTO `technicien01` VALUES (7, 'zak', 'adressefjffk', 'Casablanca', 'ghf', 'fvjyg', 'gffgg', 'hhbb', 'P II', '256', 'Non', 'Oui', 'Non', 'Oui', 'De 40 a 60', 'Intég', 'Non', 'sghdsfg', 'dfggdfg', 'oui', 'sdfgdfg', 'dfg', '22/10/05', '01:41:07', ' 43', 'fggg');
INSERT INTO `technicien01` VALUES (18, 'zak', 'sdffg', 'Casablanca', 'dfsg', 'dfg', 'dg', 'dsfg', 'P IV', '128', 'Oui', 'Non', 'Oui', 'Oui', 'De 60 a 80', 'Intég', 'Sépar', 'qdf', 'qsdf', 'oui', 'qzf', 'qzf', '22/10/05', '02:01:01', ' 23', 'sdfg');

# --------------------------------------------------------

#
# Structure de la table `technicien02`
#

CREATE TABLE `technicien02` (
`id_client` int(11) NOT NULL auto_increment,
`nom` varchar(40) NOT NULL default '',
`adresse` varchar(150) NOT NULL default '',
`ville` varchar(15) NOT NULL default '',
`Autregion` varchar(20) NOT NULL default '',
`tel` varchar(10) NOT NULL default '',
`gsm` varchar(10) NOT NULL default '',
`marque` varchar(150) NOT NULL default '',
`process` varchar(10) NOT NULL default '',
`os` varchar(20) NOT NULL default '',
`ram` varchar(5) NOT NULL default '',
`cdrom` varchar(5) NOT NULL default 'Non',
`Graveur` varchar(5) NOT NULL default 'Non',
`dvd` varchar(5) NOT NULL default 'Non',
`gravdvd` varchar(5) NOT NULL default 'Non',
`hdd` varchar(10) NOT NULL default '',
`integ` varchar(5) NOT NULL default 'Non',
`sep` varchar(5) NOT NULL default 'Non',
`refvga` varchar(50) NOT NULL default '',
`probleme` longtext NOT NULL,
`resolu` varchar(5) NOT NULL default '',
`coment` longtext NOT NULL,
`confie` varchar(20) NOT NULL default '',
`date` varchar(10) NOT NULL default '',
`heure` varchar(10) NOT NULL default '',
`duree` varchar(10) NOT NULL default '',
`email` varchar(50) NOT NULL default '',
KEY `id_client` (`id_client`)
) TYPE=MyISAM AUTO_INCREMENT=7 ;

#
# Contenu de la table `technicien02`
#


# --------------------------------------------------------

#
# Structure de la table `technicien03`
#

CREATE TABLE `technicien03` (
`id_client` int(11) NOT NULL auto_increment,
`nom` varchar(40) NOT NULL default '',
`adresse` varchar(150) NOT NULL default '',
`ville` varchar(15) NOT NULL default '',
`Autregion` varchar(20) NOT NULL default '',
`tel` varchar(10) NOT NULL default '',
`gsm` varchar(10) NOT NULL default '',
`marque` varchar(150) NOT NULL default '',
`process` varchar(10) NOT NULL default '',
`os` varchar(20) NOT NULL default '',
`ram` varchar(5) NOT NULL default '',
`cdrom` varchar(5) NOT NULL default 'Non',
`Graveur` varchar(5) NOT NULL default 'Non',
`dvd` varchar(5) NOT NULL default 'Non',
`gravdvd` varchar(5) NOT NULL default 'Non',
`hdd` varchar(10) NOT NULL default '',
`integ` varchar(5) NOT NULL default 'Non',
`sep` varchar(5) NOT NULL default 'Non',
`refvga` varchar(50) NOT NULL default '',
`probleme` longtext NOT NULL,
`resolu` varchar(5) NOT NULL default '',
`coment` longtext NOT NULL,
`confie` varchar(20) NOT NULL default '',
`date` varchar(10) NOT NULL default '',
`heure` varchar(10) NOT NULL default '',
`duree` varchar(10) NOT NULL default '',
`email` varchar(50) NOT NULL default '',
KEY `id_client` (`id_client`)
) TYPE=MyISAM AUTO_INCREMENT=7 ;

#
# Contenu de la table `technicien03`
#