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 :

Pourquoi mes champs doivent être obligatoires pour s'insérer [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é
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Par défaut Pourquoi mes champs doivent être obligatoires pour s'insérer
    Bonjour,
    J'ai un formulaire qui contient plusieurs champs, tous sont des clés étrangères. Le problèmes c'est que je ne peux pas faire d'insertion, à condition que tous les champs soient remplis, or je ne veux pas qu'ils soient obligatoires, je les ai mis en NULL dans phpMyAdmin, mais ça ne change rien.
    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
     
    if (isset($_POST['valider']))
    	{ 	
    $nom_contact=$_SESSION['nom_contact'];
    				echo $nom_contact;
     
        		$reponse = $bdd->query("SELECT * FROM structure WHERE nom_contact='$nom_contact'");
    			$donnees = $reponse->fetch(PDO::FETCH_ASSOC);	
    			$id_struct=$donnees['id_struct'];
    			while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC))
    				 if ($donnees["id_struct"]==$id_struct)	
    			$id_struct=$donnees['id_struct'];	
     
    				$nationalite=$_POST['nationalite'];
    				$statut_conflit=$_POST['statut_conflit'];
    				$etat=$_POST['etat'];
    				//$sepulture=$_POST['id_sepulture'];
    				$sexe=$_POST['sexe'];
    				$age=$_POST['age'];
    				$particularite=$_POST['particularite'];
    				$confession=$_POST['confession'];
    				$institution=$_POST['institution'];
    				$administrative=$_POST['administrative'];
    	                        $aide_sociale=$_POST['aide_sociale'];
    	                         $date_ajout = date('Y-m-d H:i:s'); 
     
    PRINT_r($_POST).'<br />';
    $bdd->exec("INSERT INTO categorisation VALUES (null,'$id_struct','$nationalite','$statut_conflit','$etat','4','$sexe','$age','$particularite','$confession','$institution','$administrative','$aide_sociale','$date_ajout',NULL)") or print_r($bdd->errorInfo());	
     
    }
    Si un seul champ n'est pas rempli, j'ai cette erreur (par exp pour le premier champ 'nationalité') :
    Incorrect integer value: '' for column 'id_nationalite' at row 1

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    1/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ......VALUES (null,'$id_struct','$nationalite','$statut_conflit','$etat','4','$sexe','$age','$particularite',...................
    en mettant des '...' (apostrophes), tu les déclares comme "chaine de caractère", pas comme "numérique" ).

    D'autre part, il ne faut pas confondre une chaine vide ('') avec NULL !
    Si les champs attendent un entier, tu ne peux pas leur fournir une chaine vide.

    2/ Tu n'as jamais entendu parler d'injection SQL ???

    Ni de requêtes préparées pour l'éviter ?? ...

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Par défaut
    Merci pour votre réponse et pour l'explication. Je ne savais jamais quand est-ce qu'il fallait mettre d'apostrophes ou pas, maintenant j'ai enfin compris.
    D'autre part, il ne faut pas confondre une chaine vide ('') avec NULL !
    Si les champs attendent un entier, tu ne peux pas leur fournir une chaine vide.
    Ah, je pensais que NULL permet de ne rien mettre, peu importe le type du champ !

    J'ai déjà entendu parler des requêtes préparées et des injections SQL, je ne les ai jamais utilisées, je ne vois pas trop comment ça marche, vu que ça ne se voit pas

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Allez, suis de bonne humeur, te donne le code d'une requête préparée la plus maigre possible et qui gère tout, la sécurité, la propreté etc.
    En gros, c'est prepare + execute (et pas exec) et passage en paramètres d'un tableau, avec autant de réponses que de "?" dans la requête préparée.

    Un truc qui rien à voir mais qui est VITAL : on n'a pas le droit de stocker la confession des gens dans une base de données, et encore heureux ! Voir l'actualité sur Robert Ménard !

    http://www.rtl.fr/actu/societe-faits...bie-7778301584

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* Exécute une requête préparée en passant un tableau de valeurs */
    $sth = $bdd->prepare('SELECT * FROM structure WHERE nom_contact=?');
    $sth->execute(array($nom_contact));
    while($data=$sth->fetch(PDO::FETCH_ASSOC)){
    	$insert=$bdd->prepare('INSERT INTO categorisation VALUES (null,?,?,?,?,"4",?,?,?,?,?,?,?,?,NULL)'); 
    	$insert->execute(array($data['id_struct'],$data['nationalite'],$data['statut_conflit'],$data['etat'],$data['sexe'],$data['age'],$data['particularite'],$data['confession'],$data['institution'],$data['administrative'],$data['aide_sociale'],$data['date_ajout']));
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    on n'a pas le droit de stocker la confession des gens dans une base de données, et encore heureux !
    Pas totalement vrai, c'est possible mais avec autorisation préalable de la CNIL : tu dois faire ta déclaration à la CNIL et attendre son autorisation (elle à le droit de la refuser naturellement) avant de sauvegarder quoi que ce soit comme information dans ta bdd. (Source : http://vosdroits.service-public.fr/p...0.xhtml#N100E7)

  6. #6
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Par défaut
    Merci bcp Dendrite

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/09/2013, 16h18
  2. meme nom de champs obligatoire pour le mapping
    Par SGASSAMA dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 13/07/2009, 17h21
  3. Réponses: 12
    Dernier message: 24/10/2007, 12h00
  4. pourquoi mes champs INPUT prennent plus de place que la normal ?
    Par Ekimasu dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 21/05/2007, 11h50
  5. [ACCESS] Requete obligatoire pour operations sur champs ?
    Par fredrider dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 18/07/2006, 10h27

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