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 à nul dans formulaire PHP, Mysql refuse l'enregistrement [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut Champs à nul dans formulaire PHP, Mysql refuse l'enregistrement
    Bonjour,

    J'ai un formulaire où j'enregistre des enregistrements dans une base de données MySQL. Certains champs sont optionnels. Dans ces champs, certain sont des champs texte, date, heure, des entiers...

    Sur mon serveur de production qui est en version 4, je n'ai aucuns problèmes pour faire des insert ou des update.

    Par contre sur mon serveur de dev, qui est en version 5.0.67-community-nt, a chaque fois que j'ai un champ de type date, heure, ou des entiers, MySQL me refuse l'insertion ou la mise à jour. Pourtant dans la définition de ma table, j'ai bien défini ces champs à NULL par défaut et autorise des champs à être nul, mais rien à faire.

    Comment résoudre ce problème ?

    merci d'avance,

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Bonjour,

    Pourrait-on voir une de tes requetes d'insertion qui ne fonctionne pas ?

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    la requete avec l'erreur :

    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
    requête SQL: Modifier
     
    INSERT INTO `sonoligh`.`prestation` (
    `prestation_ID_prestation` ,
    `prestation_numero_presta` ,
    `prestation_ID_client` ,
    `prestation_nom_lieu` ,
    `prestation_adresse` ,
    `prestation_cp` ,
    `prestation_ville` ,
    `prestation_ID_type_prestation` ,
    `prestation_date` ,
    `prestation_h_arrive` ,
    `prestation_h_fin` ,
    `prestation_nombre_personne` ,
    `prestation_moyenne_age` ,
    `prestation_lieu_rendez_vous` ,
    `prestation_adresse_rendez_vous` ,
    `prestation_cp_rendez_vous` ,
    `prestation_ville_rendez_vous` ,
    `prestation_date_rendez_vous` ,
    `prestation_realise_rendez_vous` ,
    `prestation_prix` ,
    `prestation_cheque_accompte` ,
    `prestation_ID_statut_prestation` ,
    `prestation_commentaire`
    )
    VALUES (
    NULL , 'PRE2008', '12', 'test', 'test', '00000', 'test', '3', '2009-02-18', NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , '450', NULL , '', NULL
    )
     
    MySQL a répondu:Documentation
    #1366 - Incorrect integer value: '' for column 'prestation_ID_statut_prestation' at row 1
    et la structure de la table correspondante :

    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
    --
    -- Structure de la table `prestation`
    --
     
    CREATE TABLE IF NOT EXISTS `prestation` (
      `prestation_ID_prestation` int(4) NOT NULL auto_increment,
      `prestation_numero_presta` varchar(9) collate latin1_general_cs NOT NULL,
      `prestation_ID_client` int(11) NOT NULL,
      `prestation_nom_lieu` varchar(30) collate latin1_general_cs NOT NULL,
      `prestation_adresse` varchar(50) collate latin1_general_cs NOT NULL,
      `prestation_cp` int(5) NOT NULL,
      `prestation_ville` varchar(30) collate latin1_general_cs NOT NULL,
      `prestation_ID_type_prestation` int(1) NOT NULL,
      `prestation_date` date NOT NULL,
      `prestation_h_arrive` time default NULL,
      `prestation_h_fin` time default NULL,
      `prestation_nombre_personne` varchar(3) collate latin1_general_cs default NULL,
      `prestation_moyenne_age` varchar(5) collate latin1_general_cs default NULL,
      `prestation_lieu_rendez_vous` varchar(30) collate latin1_general_cs default NULL,
      `prestation_adresse_rendez_vous` varchar(50) collate latin1_general_cs default NULL,
      `prestation_cp_rendez_vous` int(5) default NULL,
      `prestation_ville_rendez_vous` varchar(30) character set latin1 collate latin1_general_ci default NULL,
      `prestation_date_rendez_vous` date default NULL,
      `prestation_realise_rendez_vous` int(1) default NULL,
      `prestation_prix` varchar(4) collate latin1_general_cs NOT NULL,
      `prestation_cheque_accompte` int(1) default NULL,
      `prestation_ID_statut_prestation` int(4) NOT NULL,
      `prestation_commentaire` text collate latin1_general_cs,
      PRIMARY KEY  (`prestation_ID_prestation`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs AUTO_INCREMENT=41 ;

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu définis ton champ dans la requete, il ne prendra pas la valeur par défaut.
    Donc soit tu ne l'indiques pas dans la requete, soit tu lui donnes expliquement la valeur Null

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    ok, il faut que dans mon code j'indique NULL si la variable que je veux enregistré en NULL, maus comment l'écrire proprement ?

    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
    		$table = 'prestation';
    		$set = 'prestation_numero_presta="' .date("Ym") . 'PRE' . '",
    				prestation_ID_client="' . $prestation_ID_client . '",
    				prestation_nom_lieu="' . ucfirst($prestation_nom_lieu) . '",
    				prestation_adresse="' . ucfirst($prestation_adresse) . '",
    				prestation_cp="' . $prestation_cp . '",
    				prestation_ville="' . strtoupper($prestation_ville) . '",
    				prestation_ID_type_prestation="' . $prestation_ID_type_prestation . '",
    				prestation_date="' . $format->dateswitch($prestation_date, 'fr') . '",
    				prestation_h_arrive="' . $prestation_h_arrive . '",
    				prestation_h_fin="' . $prestation_h_fin . '",
    				prestation_nombre_personne="' . $prestation_nombre_personne . '",
    				prestation_moyenne_age="' . $prestation_moyenne_age . '",
    				prestation_lieu_rendez_vous="' . ucfirst($prestation_lieu_rendez_vous) . '",
    				prestation_adresse_rendez_vous="' . ucfirst($prestation_adresse_rendez_vous) . '",
    				prestation_cp_rendez_vous="' . $prestation_cp_rendez_vous . '",
    				prestation_ville_rendez_vous="' . strtoupper($prestation_ville_rendez_vous) . '",
    				prestation_date_rendez_vous="' . $format->dateswitch($prestation_date_rendez_vous, 'fr') . '",
    				prestation_realise_rendez_vous="' . $prestation_realise_rendez_vous . '",
    				prestation_prix="' . $prestation_prix . '",
    				prestation_cheque_accompte="' . $prestation_cheque_accompte . '",
    				prestation_ID_statut_prestation="' . $statut_prestation_ID_statut_prestation . '",
    				prestation_commentaire="' . ucfirst($prestation_commentaire) . '"';
    		mysql_query('INSERT ' . $table . ' SET ' . $set) or die('Erreur SQL !<br>INSERT ' . $table . ' SET ' . $set.'<br>'.mysql_error());

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ah oui mais si tu changes ton message pendant que je reponds, ma réponse tombe a côté aussi

    Dans ton INSERT tu donnes à prestation_ID_statut_prestation la valeur chaine vide alors qu'il s'agit d'un champ INT.
    Sois tu le définis comme NULL soit tu l'omets de l'INSERT et il prendra sa valeur par défaut.

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    désolé pour le changement ! j'avais compris ta réponse en la relisant plusieurs fois ;-)

    et pour écrire cela proprement dans mon code, tu me proposerais quoi ?

    car faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(empty($prestation_ID_statut_prestation))
    {
      echo NULL;
    }
    else
    {
      echo $prestation_ID_statut_prestation;
    }
    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
    		$table = 'prestation';
    		$set = 'prestation_numero_presta="' .date("Ym") . 'PRE' . '",
    				prestation_ID_client="' . $prestation_ID_client . '",
    				prestation_nom_lieu="' . ucfirst($prestation_nom_lieu) . '",
    				prestation_adresse="' . ucfirst($prestation_adresse) . '",
    				prestation_cp="' . $prestation_cp . '",
    				prestation_ville="' . strtoupper($prestation_ville) . '",
    				prestation_ID_type_prestation="' . $prestation_ID_type_prestation . '",
    				prestation_date="' . $format->dateswitch($prestation_date, 'fr') . '",
    				prestation_h_arrive="' . $prestation_h_arrive . '",
    				prestation_h_fin="' . $prestation_h_fin . '",
    				prestation_nombre_personne="' . $prestation_nombre_personne . '",
    				prestation_moyenne_age="' . $prestation_moyenne_age . '",
    				prestation_lieu_rendez_vous="' . ucfirst($prestation_lieu_rendez_vous) . '",
    				prestation_adresse_rendez_vous="' . ucfirst($prestation_adresse_rendez_vous) . '",
    				prestation_cp_rendez_vous="' . $prestation_cp_rendez_vous . '",
    				prestation_ville_rendez_vous="' . strtoupper($prestation_ville_rendez_vous) . '",
    				prestation_date_rendez_vous="' . $format->dateswitch($prestation_date_rendez_vous, 'fr') . '",
    				prestation_realise_rendez_vous="' . $prestation_realise_rendez_vous . '",
    				prestation_prix="' . $prestation_prix . '",
    				prestation_cheque_accompte="' . $prestation_cheque_accompte . '",
    				prestation_ID_statut_prestation="' . $statut_prestation_ID_statut_prestation . '",
    				prestation_commentaire="' . ucfirst($prestation_commentaire) . '"';
    		mysql_query('INSERT ' . $table . ' SET ' . $set) or die('Erreur SQL !<br>INSERT ' . $table . ' SET ' . $set.'<br>'.mysql_error());

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    pour faire un code propre, j'ai créer une méthode supplémentaire dans ma classe MySQL afin de faire le test si le champ est vide ou pas :

    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
    $table = 'prestation';
    		$set = 'prestation_numero_presta="' .date(Ym) . 'PRE' . '",
    				prestation_ID_client=' . $mysql->testFromEmpty($prestation_ID_client) . ',
    				prestation_nom_lieu=' . $mysql->testFromEmpty(ucfirst($prestation_nom_lieu)) . ',
    				prestation_adresse=' . $mysql->testFromEmpty(ucfirst($prestation_adresse)) . ',
    				prestation_cp=' . $mysql->testFromEmpty($prestation_cp) . ',
    				prestation_ville=' . $mysql->testFromEmpty(strtoupper($prestation_ville)) . ',
    				prestation_ID_type_prestation=' . $mysql->testFromEmpty($prestation_ID_type_prestation) . ',
    				prestation_date=' . $mysql->testFromEmpty($format->dateswitch($prestation_date, 'fr')) . ',
    				prestation_h_arrive=' . $mysql->testFromEmpty($prestation_h_arrive) . ',
    				prestation_h_fin=' . $mysql->testFromEmpty($prestation_h_fin) . ',
    				prestation_nombre_personne=' . $mysql->testFromEmpty($prestation_nombre_personne) . ',
    				prestation_moyenne_age=' . $mysql->testFromEmpty($prestation_moyenne_age) . ',
    				prestation_lieu_rendez_vous=' . $mysql->testFromEmpty(ucfirst($prestation_lieu_rendez_vous)) . ',
    				prestation_adresse_rendez_vous=' . $mysql->testFromEmpty(ucfirst($prestation_adresse_rendez_vous)) . ',
    				prestation_cp_rendez_vous=' . $mysql->testFromEmpty($prestation_cp_rendez_vous) . ',
    				prestation_ville_rendez_vous=' . $mysql->testFromEmpty(strtoupper($prestation_ville_rendez_vous)) . ',
    				prestation_date_rendez_vous=' . $mysql->testFromEmpty($format->dateswitch($prestation_date_rendez_vous, 'fr')) . ',
    				prestation_realise_rendez_vous=' . $mysql->testFromEmpty($prestation_realise_rendez_vous) . ',
    				prestation_prix=' . $mysql->testFromEmpty($prestation_prix) . ',
    				prestation_cheque_accompte=' . $mysql->testFromEmpty($prestation_cheque_accompte) . ',
    				prestation_ID_statut_prestation=' . $mysql->testFromEmpty($statut_prestation_ID_statut_prestation) . ',
    				prestation_commentaire=' . $mysql->testFromEmpty(ucfirst($prestation_commentaire));
    		mysql_query('INSERT ' . $table . ' SET ' . $set) or die('Erreur SQL !<br>INSERT ' . $table . ' SET ' . $set.'<br>'.mysql_error());
    et la classe :
    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
    <?php
    /**
     * Classe PHP pour se connecter sur une base de donnée MySQL
     * 
     * <p>Connexion sur une base de donnée MySQL</p>
     * 
     * @name mySql
     * @author Arnaud FOURQUEMIN <arnaud@sonolightdj.com> 
     * @link 
     * @copyright Arnaud FOURQUEMIN 2008
     * @version 1.0.0
     * @package mysql.class
     */ 
    class mySql
    {
    	/*~*~*~*~*~*~*~*~*~*~*~*~*/
    	/*      constructeur     */
    	/*~*~*~*~*~*~*~*~*~*~*~*~*/
     
    	/**
    	* Connexion à la base de données
    	* 
    	* <p>Connexion à la base de données</p>
    	* 
    	* @name mySql::connexionMySql()
    	* @param
    	* @return String
    	*/
    	public function __construct($host,$user,$password,$base)
    	{
    		$link = mysql_connect($host, $user, $password);
    		if (!$link)
    		{
    			die('Impossible de se connecter : ' . mysql_error());
    		}
    		$db_selected = mysql_select_db($base, $link);
    		if (!$db_selected)
    		{
    			die ('Impossible de sélectionner la base de données : ' . mysql_error());
    		}
    	}
     
    	/**
    	* Effectue un test si le champs est vide ou pas. si il est vide, le mettre à NULL
    	* 
    	* <p>Effectue un test si le champs est vide ou pas</p>
    	* 
    	* @name checkFrom::telTest()
    	* @param $var1, $name1, $var2, $name2
    	* @return
    	*/
    	public function testFromEmpty($var)
    	{
    		if(empty($var))
    		{
    			return 'NULL';
    		}
    		else
    		{
    			return '"'.$var.'"';
    		}
    	}
    }
    ?>

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

Discussions similaires

  1. Saisie automatique dans un formulaire PHP/MySQL
    Par marina_db dans le forum Langage
    Réponses: 6
    Dernier message: 01/07/2014, 13h04
  2. Problème de syntaxe dans un formulaire php-mysql
    Par alex45500 dans le forum Langage
    Réponses: 3
    Dernier message: 05/11/2012, 16h56
  3. Probleme textarea dans formulaire php/mysql
    Par moucaaa dans le forum Langage
    Réponses: 2
    Dernier message: 12/05/2011, 18h11
  4. [MySQL] Mon formulaire envoie des champs vide à ma BDD (PHP/MYSQL)
    Par neoweiter dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 06/07/2009, 09h22
  5. scan champs dans formulaire php
    Par khaled_dev dans le forum Langage
    Réponses: 3
    Dernier message: 05/04/2007, 17h47

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