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 :

INSERT TO une valeur NULL [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 164
    Par défaut INSERT TO une valeur NULL
    Bonjour,

    J'ai un petit soucis avec mon code INSERT TO, j'ai un formulaire qui est renseigné tout ce qui a de plus classique, seulement j'ai un champs qui me permet de renseigner plusieurs lignes, j'effectue un explode ce qui me permet d'obtenir autant de lignes dans ma table que j'ai renseigné dans le champs précédant.
    Exemple :

    Prep : Bernard
    Zone : Haut
    Order : 123
    234

    456


    Cette enregistrement donne dans ma table:

    Bernard Haut 123
    Bernard Haut 234
    Bernard Haut
    Bernard Haut 456

    Ma question est comment faire pour que le INSERT TO ne prenne que les lignes NOT NULL dans le champs Order pour donner ça, 3 enregistrements au lieu de 4 :

    Bernard Haut 123
    Bernard Haut 234
    Bernard Haut 456

    voici mon code INSERT TO:
    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
     
     
     
    <?php //Connexion au serveur
    $connexion=mysql_connect("localhost","root","");
     
    //Selcetion dela base de donnee
    $base=mysql_select_db("dispatch");
    $commande=explode("\n",$_POST['requiredcommande']);
    $date = date("Y-m-d");
    $heure = date("H:i:s");
    $today = date('j-m-y-H-i-s');
    $codebare = '*'.$today.'*';
    $dispatcheur = $_POST['requireddispatcheur'];
    $preparateur = $_POST['requiredpreparateur'];
     
    foreach($commande as $index=>$value){
     
     //Ecriture de la requete
    $sql = "INSERT INTO commande VALUES (NULL, '".
    $value."', CURRENT_TIMESTAMP, '".
    $_POST['requireddispatcheur']."',' ".
    $_POST['requiredpreparateur']."', '".
    $_POST['requiredservice']."', '".
    $date."', '".
    $today."', '".
    $_POST['requiredzone']."')";														 
    //Execution de la requete
    $resultat=mysql_query($sql);
    }

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    Et en conditionnant l'insert à une valeur non-vide de $value, comme ceci ?

    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
     
    <?php //Connexion au serveur
    $connexion=mysql_connect("localhost","root","");
     
    //Selcetion dela base de donnee
    $base=mysql_select_db("dispatch");
    $commande=explode("\n",$_POST['requiredcommande']);
    $date = date("Y-m-d");
    $heure = date("H:i:s");
    $today = date('j-m-y-H-i-s');
    $codebare = '*'.$today.'*';
    $dispatcheur = $_POST['requireddispatcheur'];
    $preparateur = $_POST['requiredpreparateur'];
     
    foreach($commande as $index=>$value){
     
        if (!empty($value))
        {				
            //Ecriture de la requete
            $sql = "INSERT INTO commande VALUES (NULL, '".
            $value."', CURRENT_TIMESTAMP, '".
            $_POST['requireddispatcheur']."',' ".
            $_POST['requiredpreparateur']."', '".
            $_POST['requiredservice']."', '".
            $date."', '".$today."','".$_POST['requiredzone']."')";														 
            //Execution de la requete
            $resultat=mysql_query($sql);
        }
    }

  3. #3
    Membre confirmé Avatar de speedy_g
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 213
    Par défaut
    En gros, il faudrait enlever des éléments à $_POST['requiredcommande'].

    Dans ce cas, je ferais quelque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function test($data)
    {
    return(!is_null($data) && $data!="");
    }
    array_filter($_POST['requiredcommande'],'test');
    Ou depuis php 5.3.0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    array_filter($_POST['requiredcommande'],function($data){return(!is_null($data) && $data!="");});

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 164
    Par défaut
    Merci pour vos réponses, Pierre-Charles, ton codes n'a pas d'effet il enregistre quand meme les lignes vides.
    speedy_g, je vois pas comment intégrer ton code dans ma requete, de plus faut-il coder chaque POST ou juste le POST $value issue de l'explode?

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    Les champs "blancs" sont-ils des chaînes vides ou y a-t-il des espaces cachés ?

    Sachant que la valeur NULL n'est pas assimilable à une chaîne vide...

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par Budy123
    je vois pas comment intégrer ton code dans ma requete, de plus faut-il coder chaque POST ou juste le POST $value issue de l'explode?
    Le plus simple serait de traiter le $value avant insertion.
    Si un empty() ne suffit pas, alors fait un var_dump($value), tu auras une idée plus précise de se quelle contient.
    C'est après tu pourras savoir comment traiter ça. Un simple trim($value) pourrait suffire par exemple.
    Faut faire attention quand même aux différents cas qu'il pourrait avoir, donc peut être ne pas se contenter de le faire sur 1 seule commande.

    Aussi, comme se sont des données que tu renvoies par formulaire, peut être faudrait il vérifier/filtrer/formater ces données avant de les renvoyer.
    En gros, faire en sorte de ne renvoyer que des lignes correctes, on limite ici les risques d'insertion non désirées/partielle/non conforme.

  7. #7
    Membre confirmé Avatar de speedy_g
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 213
    Par défaut
    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
     
    <?php //Connexion au serveur
    $connexion=mysql_connect("localhost","root","");
     
    //Selcetion dela base de donnee
    $base=mysql_select_db("dispatch");
     
    function test($data)
    {
    return(!is_null($data) && $data!="");
    }
    array_filter($_POST['requiredcommande'],'test');
     
    $commande=explode("\n",$_POST['requiredcommande']);
    $date = date("Y-m-d");
    $heure = date("H:i:s");
    ....
    Donc si $_POST['requiredcommande'] = 'a',,'b','c' ou $_POST['requiredcommande'] = 'a','','b','c'
    cela devrait donner $_POST['requiredcommande'] = 'a','b','c'

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 164
    Par défaut
    Bonjour à tous,

    Décidement je progresse de jour en jour grace à votre aide, j'ai testé la methode de speedy_g qui génère une erreur :

    "Warning: array_filter() [function.array-filter]: The first argument should be an array in C:\wamp\www\dispatch\valider.php on line 27"

    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
     
     
    <?php //Connexion au serveur
    $connexion=mysql_connect("localhost","root","");
     
    //Selcetion dela base de donnee
    $base=mysql_select_db("dispatch");
     
    function test($data)
    {
    return(!is_null($data) && $data!="");
    }
    array_filter($_POST['requiredcommande'],'test');
     
    $commande=explode("\n",$_POST['requiredcommande']);
    $date = date("Y-m-d");
    $heure = date("H:i:s");
    $today = date('j-m-y-H-i-s');
    $codebare = '*'.$today.'*';
    $dispatcheur = $_POST['requireddispatcheur'];
    $preparateur = $_POST['requiredpreparateur'];
     
    foreach($commande as $index=>$value){
     
     //Ecriture de la requete
            $sql = "INSERT INTO commande VALUES (NULL, '".
            $value."', CURRENT_TIMESTAMP, '".
            $_POST['requireddispatcheur']."',' ".
            $_POST['requiredpreparateur']."', '".
            $_POST['requiredservice']."', '".
            $date."', '".$today."','".$_POST['requiredzone']."')";														 
            //Execution de la requete
            $resultat=mysql_query($sql);
     
    }
    pour ce qui est de la proposition de RunCodePhp, j'ai essayé d'intégrer le var_dump($value), et le trim($value), mais j'ai du mal codé puisque j'ai un message d'erreur..

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/05/2011, 12h40
  2. Insertion d'une valeur NULL
    Par Marc_27 dans le forum Accès aux données
    Réponses: 3
    Dernier message: 05/08/2010, 09h10
  3. [MySQL] Insertion d'une valeur nulle, PHP->MySQL
    Par mattyeux dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/04/2010, 14h43
  4. Insertion d'une valeur null pour une colonne
    Par bigggalll dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 24/03/2010, 15h01
  5. pb d'insertion d'une valeur null
    Par new_wave dans le forum SQL
    Réponses: 7
    Dernier message: 16/10/2007, 18h51

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