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 :

Champs facultatifs [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Par défaut Problème SQL ou cookies?
    Bonjour,
    je code une page de sondage en PHP, et les résultats sont enregistrés dans une BDD MySQL que je gère avec PHPMyAdmin. Ce problème étant encore plus gênant maintenant que lors de mes autres "projets" (si on peut appelé ca comme ça, vu le niveau, hyper bas ) je me suis mit en tête de trouver une solution, mais là, je sèche : Comment peut on insérer dans la table des informations sans compléter tout les champs? Je veux dire par là que, prenons mon sondage en exemple ^^, disons que je demande l'âge, le nom, et... le sport favori, dans un formulaire, et que je prends ces 3 informations pour les mettre dans une table 'sondage' dans 3 champs 'sport', 'âge' et 'nom'. Si l'utilisateur ne donne que son nom et son âge dans le formulaire, avec mon script (dîtes moi si ca vient de là), la BDD ne rentrent pas les informations car il n'y a pas le sport. Par contre, si ils donnent les 3 renseignement ca marche parfaitement...
    Si vous plait! Aidez moi! ^^ Et merci d'avance.
    PS : désolé s'il fallait mettre ce message dans la catégorie MySQL et pas PHP et MySQL, je suis pas sur là...

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour,

    si les informations ne sont pas importantes, alors dans la créations de la tables il faut indiquer NULL et éventuellement un default.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE `sondage` (
    `age` INT NULL DEFAULT NULL ,
    `nom` VARCHAR( 50 ) NULL DEFAULT NULL ,
    `sport` VARCHAR( 100 ) NULL DEFAULT `Hockey`
    ) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci

    Ensuite tu vérifie les données de tes champs, comme par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    ($_POST['nom']=='')?$nom=null:$nom=$_POST['nom'];
    ($_POST['age']=='')?$age=null:$age=$_POST['age'];
    ($_POST['sport']=='')?$sport=null:$sport=$_POST['sport'];
     
    $qsl = 'INSERT INTO sondage (age,nom,sport) VALUES ($age,$nom,$sport)';
    mysql_query($sql);
    .....

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Par défaut
    Bonjour.
    En lisant ta réponse, la seul différence avec ce que j'avais déjà essayer est le "type" des tables (je sais pas si ca un nom particulier, mais il me semble que c'est ca )... Personellement les tables étaient en "text" et donc quand j'essayais de mettre une valeur par défaut PhpMyAdmin m'affichait un message d'erreur, et quand je le mettait juste 'NULL', ca marchait plus du tout -_-
    J'ai donc testait en varchar, et là, ca marche impec' ! Merci!!!
    Sinon dans ton message, j'ai pas bien compris le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ($_POST['nom']=='')?$nom=null:$nom=$_POST['nom'];
    ($_POST['age']=='')?$age=null:$age=$_POST['age'];
    ($_POST['sport']=='')?$sport=null:$sport=$_POST['sport'];
    (C'est toute la concaténation et tout que je comprends pas encore super bien).
    Et aussi le :
    Je pense que ca devrait plutôt être un
    pour aller avec ton code...
    Enfin merci, maitenant ca marche ^^

  4. #4
    Membre éclairé
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Par défaut
    Petite précision:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ($_POST['nom']=='')?$nom=null:$nom=$_POST['nom'];
    ($_POST['age']=='')?$age=null:$age=$_POST['age'];
    ($_POST['sport']=='')?$sport=null:$sport=$_POST['sport'];
    a éviter, préfère plutot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (!isset($_POST['nom']))?$nom=null:$nom=$_POST['nom'];
    (!isset($_POST['age']))?$age=null:$age=$_POST['age'];
    (!isset($_POST['sport']==''))?$sport=null:$sport=$_POST['sport'];
    Cela t'évitera d'avoir des notices parce que ta valeur n'est pas déclarée.

    Et pour un prochain développement, je te conseille d'utiliser un format de tyble de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE `reponse` (
    `unique_md5` VARCHAR( 25 ) NOT NULL,
    `id_question` VARCHAR( 50 ) NOT NULL ,
    `reponse` VARCHAR( 100 ) NOT NULL
    )
    Lorsque tu enregistre une série de question, si le questionnaire fait 12 questions, et que la personne donne 7 réponses, tu auras 7 entrées dans ta table, avec comme correspondance pour chacun d'eeux le champ 'unique_md5' qui te permettra de faire le lien entre les réponse.

    Cette méthode de travail t'évite de devoir modifier la structure de ta table si tu rajoute une question (tu as a coté une table qui s'appel questions, contenant un id_question et un question_txt par exemple), il te suffit de l'ajouter dans ta table question, sans que ca aie la moindre incidence sur ta table de réponse.

    Cela t'évite d'avoir des surprises, et des tables contenant 37 champs, au cas ou tu aurais 37 questions... En plus, de cette manière tu peux utiliser exactement les memes tables (questions/reponses) pour générer autant de sondage que tu veux, meme si les questions n'ont aucuns rapport les unes avec les autres.

    Dans ton cas, tu serais obliger de recréer une nouvelle table pour chaque nouveau sondage...

    Onet

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Par défaut
    Re-bonjour!
    Merci onet pour les renseignements.
    Je relance ce sujet car j'ai encore des problèmes sur le même sondage. Et là, j'ai aucune idée d'où ca peut venir. En fait, chez moi, que je réponde au sondage avec IE ou Firefox, tot marche très bien. Pour les autres internautes, certains n'ont pas de problèmes non plus, et l'enregistrement ce passe normalement, seulement, pour les autres, les réponses ne sont pas prises en compte... Certains utilisent la même version de Firefox que moi donc le problème ne doit pas venir de là. Dites moi s'il faut que je mettent mon code...
    Merci d'avance!

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Par défaut
    Bonjour.
    Deux nouvelles données :
    - Une des personnes ne pouvant votés a essayé avec Firefox 3 (testé chez moi et ca marche) ET IE (pareil) sans résultats.
    -Le principe de la page est : on arrive, première visite, le questionnaire est affiché. On vote, si tous les champs nécéssaires sont remplis, on enregistre dans la BDD, puis on créer un cookie pour se souvenir qu'il y a déjà eu vote, et on affiche "Vos réponses ont bien était prises en compte, merci d'avoir voté". Lorsque l'on retourne sur la page, si le cookie est détecté, ca affiche " Merci d'avoir voté". Il semblerait que chez la même personne chez qui ca ne fonctionnait pas (ce n'est pas la seule à rencontrer ce problème, cela arrive quasiment chez une personne / deux) accepte bien les cookies, et que le problème ne vienne pas de là.
    Merci.

    PS : Chez d'autres personnes, quand on revient sur la page, le questionnaire s'affiche de nouveau. Ca veut donc dire que le problème viendrait du cookie.

    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
    <?php
    	if (isset($_POST['1']) AND $_POST['1'] != NULL AND isset($_POST['2']) AND $_POST['2'] != NULL AND isset($_POST['3']) AND $_POST['3'] != NULL AND isset($_POST['4']) AND $_POST['4'] != NULL AND isset($_POST['5']) AND $_POST['5'] != NULL AND isset($_POST['6']) AND $_POST['6'] != NULL AND isset($_POST['7']) AND $_POST['7'] != NULL AND isset($_POST['8']) AND $_POST['8'] != NULL AND isset($_POST['9']) AND $_POST['9'] != NULL AND isset($_POST['10']) AND $_POST['10'] != NULL)
    {
    		mysql_connect("localhost", "***", "***"); // Connexion à MySQL
    		mysql_select_db("***"); // Sélection de la base ***
    		function ScriptPreparationBDD($var)
    	{
    		$prevar = mysql_real_escape_string(htmlspecialchars($var));
    		$finvar = stripslashes($var);
    		return $finvar;
    	}
     
     
    		$finplus = ScriptPreparationBDD($_POST['plus']);
    		$fin0 = ScriptPreparationBDD($_POST['0']);
    		$fin1 = ScriptPreparationBDD($_POST['1']);
    		$fin2 = ScriptPreparationBDD($_POST['2']);
    		$fin3 = ScriptPreparationBDD($_POST['3']);
    		$fin4 = ScriptPreparationBDD($_POST['4']);
    		$fin5 = ScriptPreparationBDD($_POST['5']);
    		$fin6 = ScriptPreparationBDD($_POST['6']);
    		$fin7 = ScriptPreparationBDD($_POST['7']);
    		$fin8 = ScriptPreparationBDD($_POST['8']);
    		$fin9 = ScriptPreparationBDD($_POST['9']);
    		$fin10 = ScriptPreparationBDD($_POST['10']);
    		$fin11 = ScriptPreparationBDD($_POST['11']);
     
     
     
    		$timestamp_expire = time() + 7*24*3600; // Le cookie expirera dans une semaine
    		setcookie('vote', 'oui', $timestamp_expire); // L'utilisateur a voté
    		echo 'Vos informations ont bien étaient retenues! Merci d\'avoir voté!';
    		mysql_query("INSERT INTO sondage VALUES(NULL, '$fin0', '$finplus', '$fin1', '$fin2', '$fin3', '$fin4', '$fin5', '$fin6', '$fin7', '$fin8', '$fin9', '$fin10', '$fin11', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x')");
    		mysql_close(); // Déconnexion de MySQL
     
    }
    elseif (isset($_COOKIE['vote']) AND $_COOKIE['vote']= 'oui')
    {
    echo 'Merci d\'avoir voté!';
    }
    else
    {
    ?>
    //Le code du sondage
    <?php
    }
    ?>
    PS2 : Le bug des cookies arrive même quand sous Firefox dans les Options, à Vie Privée / Cookies, il y a "Accepter les cookies" , et "Accepter les cookies tiers" de cochés...

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

Discussions similaires

  1. [MySQL] Champ facultatif class Objet
    Par hagounet dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 19/05/2013, 22h46
  2. [CR XI] Ajout facultatif d'un champ par un prompt
    Par remi.c dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 30/08/2011, 15h25
  3. [PDO] Requête aux champs facultatifs
    Par popy67 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 17/02/2010, 20h32
  4. Réponses: 2
    Dernier message: 18/03/2008, 17h09

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