IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Mysql : Insertion de plusieurs types dans un seul champ [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 506
    Par défaut Mysql : Insertion de plusieurs types dans un seul champ
    Bonjour,

    je souhaite insérer dans ma base de données Mysql plusieurs cases, issues d'un formulaire mais il ne met pas à jour ma base (aucune insertion ne se fait, pas de message d'erreur et pourtan j'ai les infos à priori correctes ? )

    Merci.

    Voici l'affichage une fois le formulaire traité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Bravo Fazpedro  vous êtes maintenant inscrit à la newsletter de Monsite
    Mail : monmail@yahoo.fr
    Types : Concert,Danse 
    et le code du traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    <?php
    session_start(); //On demarre une session
    require("configuration.php"); //On insert le fichier qui contient les informations
     
    // si l'utilisateur est connecté, c'est le bandeau membre sinon c'est le bandeau classique...
    if (!isset($_SESSION['pseudo']) || $_SESSION['pseudo']=='')
    {	// bandeau classique si pas connecté
    	$bandeau = 'bandeau.php';	}
    else		// bandeau membre si connecté
    	{
    		$bandeau = 'bandeau_membres.php';
    	}
     
    $pseudo_affiche = $_SESSION['pseudo']; // on récupère le pseudo
    //On se connecte à MySQL
    $sql = connect_sql();
    $mail = mysql_real_escape_string(htmlentities($_POST['mail']));
    if (preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!", $mail)) //Verifie que l'email entrée n'est pas une fausse.
    	{
    		$chaine = "abcdefghijklmnopqrstuvwxyz0123456789"; 
    		$verification = mysql_query("SELECT COUNT(*) FROM pdf_membre WHERE mail='$mail'") or die (mysql_error());
    		$donnees = mysql_fetch_array($verification)or die (mysql_error());
    	if($donnees['COUNT(*)'] = 0) //On verifie que le mail existe
    		{ 
    			$reponse = '<b>'.'Le mail '.$mail.' n\'est pas connu dans la base !'.'</b>'.'<a href="javascript:history.back(1)">Retour au formulaire</a>';
    		}
    	else	// si le mail est bien connu
    		{	
    			if( empty($mail)) //On verifie que le mail est bien là
    				{
    					$reponse = 'le mail n\'est pas renseign&eacute;'.'<a href="javascript:history.back(1)">Retour au formulaire</a>';
    				}
    			else //Si tout est bon on met a jour la base des newsletter
    				{
    					//On recupère les informations saisies
    					if (is_array($_POST['evenement1']) && count($_POST['evenement1'])>0)
    						{
    							$Events = implode(",",$_POST['evenement1']);
    							mysql_query("SET NAMES 'utf8'");
    							mysql_query("INSERT INTO lettre_membres ('pseudo', 'mail', 'type') VALUES ('$pseudo_affiche', '$mail', '$Events')");
     
    							$reponse = 'Bravo '.'<strong>'.$pseudo_affiche.'</strong>'.', vous &ecirc;tes maintenant inscrit &agrave; la newsletter de'.'&nbsp;'.'<b>'.$nom_site.'</b>'.'<br />'.'<a href="' .$url_site. '">Retour &agrave; l\'Accueil</a>';
    							$reponse .=  '<br />';
    							$reponse .=  ' Mail : '.$mail.' ';
    							$reponse .=  '<br />';
    							$reponse .=  ' Types : ' .$Events.' ';
    							$reponse .=  '<br />';
    						}	 // fin de si tout est bon
    						else
    							{
    								$select2 =  "";
    								$reponse = 'le type n\'est pas renseign&eacute; !'.'<a href="javascript:history.back(1)">Retour au formulaire</a>';
    							}
     
    				} // fin de si le mail est bien connu
     
    			mysql_close($sql); //On se deconnecte
    		} // fin si email OK
     
    	} // fin si email KO
     
    else //Reponse si l'adresse e-mail est une fausse
    	{
    		$reponse = 'Votre adresse e-mail "' . $mail . '" n\'est pas correcte. <a href="javascript:history.back(1)">Retour au formulaire</a>';
    	}
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title>MON SITE</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
    </head>
    <body>
    <?php include($bandeau); ?> <!-- insère le bandeau principal en haut en fonction de la connexion -->
    <div id="mainContent">
    <br />
    <br />
    <? echo $reponse; ?> <!-- On affiche la reponse de tout le code du dessus -->
    </div>
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <?php include('bas_de_page.php'); ?> <!-- insère le bandeau principal en haut -->
    </body>
    </html>

  2. #2
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 11
    Par défaut mysql_connect
    A mon avis le connect_sql() ne va pas !!!

    Il faut que tu ouvres une connexion et ensuite choisir la base de données où faire les requêtes, pour ce faire utilise mysql_connect() et mysql_select_db().

    Voir les syntaxes ici et la

  3. #3
    Membre éclairé Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 506
    Par défaut
    @ Begany :

    ce n'est pas le connect_sql() qui pose problème...
    la connexion se fait bien par le biais d'un fichier externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    require("configuration.php"); //On insert le fichier qui contient les informations
    le problème doit être ci-dessous mais je ne vois pas quoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //On recupère les informations saisies
    					if (is_array($_POST['evenement1']) && count($_POST['evenement1'])>0)
    						{
    							$Events = implode(",",$_POST['evenement1']);
    							mysql_query("SET NAMES 'utf8'");
    							mysql_query("INSERT INTO lettre_membres ('pseudo', 'mail', 'type') VALUES ('$pseudo_affiche', '$mail', '$Events')");

  4. #4
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    Si tu es sur de ta connexion ( ) essaye de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($_POST['evenement1')
    pour savoir ce qu'il y a réellement dedant ( tableau, valeur etc)

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Stocker plusieurs valeurs dans une seule colonne est une faute de modélisation de la BDD !
    Si un membre peut être associé à plusieurs événements et qu'un événement peut être associé à plusieurs membres, il faut une table associative membre_evenement dont la clé primaire sera composée des identifiants du membre et de l'événement.

    Quand vous cherchez une erreur pouvant être due à une requête SQL, commencez par afficher la requête, avec echo ou var_dump, avant de l'envoyer au serveur et essayez-là directement sur le serveur pour voir si elle fonctionne.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Le problème vient peut-être du séparateur. Essaye d'utiliser autre chose (#, |...)
    Utiliser une fonction comme mysql_real_escape_string (ou encore mieux des requêtes préparées avec PDO) serait aussi une bonne idée.
    Et sinon pour compléter le propos de Cinephil, on peut découper le code pour afficher une éventuelle erreur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $requete = "INSERT INTO lettre_membres ('pseudo', 'mail', 'type') VALUES ('$pseudo_affiche', '$mail', '$Events')";
    $res = mysql_query($requete);
    if ($res !== false) {
    	$reponse = 'Bravo '.'<strong>'.$pseudo_affiche.'</strong>'.', vous &ecirc;tes maintenant inscrit &agrave; la newsletter de'.'&nbsp;'.'<b>'.$nom_site.'</b>'.'<br />'.'<a href="' .$url_site. '">Retour &agrave; l\'Accueil</a>';
    	$reponse .=  '<br />';
    	$reponse .=  ' Mail : '.$mail.' ';
    	$reponse .=  '<br />';
    	$reponse .=  ' Types : ' .$Events.' ';
    	$reponse .=  '<br />';
    } else {
    	$reponse = 'Erreur ! '.$requete.'<br/>'.mysql_error();
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Stocker plusieurs valeurs dans une seule colonne est une faute de modélisation de la BDD !
    Si un membre peut être associé à plusieurs événements et qu'un événement peut être associé à plusieurs membres, il faut une table associative membre_evenement dont la clé primaire sera composée des identifiants du membre et de l'événement.
    c'est peut-être fait exprès ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Création d'etat avec plusieurs valeurs dans un seul champ
    Par k.p-j dans le forum IHM
    Réponses: 3
    Dernier message: 02/05/2012, 16h07
  2. Mettre plusieurs valeurs dans un seul champ hidden asp
    Par gabdeschenes dans le forum ASP.NET
    Réponses: 3
    Dernier message: 28/10/2009, 18h52
  3. [MySQL] Insertion de plusieurs valeurs dans un même champ de MySQL
    Par Monsieur K dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 20/09/2009, 15h50
  4. inserer plusieurs resultat dans un seul champ
    Par nicerico dans le forum Requêtes
    Réponses: 3
    Dernier message: 30/03/2009, 10h39
  5. "concaténer" plusieurs lignes dans un seul champ
    Par djobert dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/12/2008, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo