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 :

Requête INSERT avec champs vides ou null


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Par défaut Requête INSERT avec champs vides ou null
    Bonjour à tous.
    Je me débrouille pas mal avec google, mais là je sèche.
    j'essaie d'insérer des valeurs dans un champ auto incrémenté et un champs null.
    Voici le détail de ma table/
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TABLE `orders` (
      `order_number` int NOT NULL AUTO_INCREMENT,
      `employeur` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
      `activite` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
      `salaire` double(12,2) NOT NULL,
      `debutActivite` date NOT NULL,
      `finActivite` date NOT NULL,
      `membre_idmembre` int DEFAULT NULL,
      PRIMARY KEY (`order_number`)
    ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

    mon code mysqli:
    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
    $from_date = htmlspecialchars( $_POST['debutActivite']) ;
        $to_date = htmlspecialchars( $_POST['finActivite']) ;
        $employeur = htmlspecialchars( $_POST['employeur']) ;
        $activite = htmlspecialchars( $_POST['activite']) ;
        $salaire = htmlspecialchars( $_POST['salaire']) ;
     
     $conn = mysqli_connect('127.0.0.1', 'root', 'toto');
     
    $req = "INSERT INTO orders VALUES (DEFAULT,$employeur,$activite,$salaire,$from_date,$to_date, DEFAULT)";
     
     
    try {$conn->query($req);} catch (Exception $e) {echo 'echec';}
    }
    else {
        echo 'Success';
    }
    pour l'instant je ne gère pas le champ membre_idmembre qui est mis à null.
    j'ai toujours échec.
    Merci pour vos attention.

  2. #2
    Membre éclairé Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Par défaut
    Avec phpAdmin il faut faire ça:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `orders`(`order_number`, `employeur`, `activite`, `salaire`, `debutActivite`, `finActivite`, `membre_idmembre`) VALUES ('','Philippe','Informatique',1200,'2021/01/01','2021/02/02',DEFAULT)

  3. #3
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 599
    Par défaut
    affichez le contenu des variables pour vérifier qu'elles contiennent bien ce que vous souhaitez.

  4. #4
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    Vous devriez afficher l'erreur SQL, ça serait plus simple pour tout le monde (à commencer par vous :p)

    Sinon, je vois que le format de la date n'est pas correct (2021/01/01) le format sql est yyyy-mm-dd

  5. #5
    Membre éclairé Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Par défaut
    Merci pour votre aide.

    Voici le code de test comme conseillé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $debutActivite = htmlspecialchars( '2021-01-20') ;
    $finActivite = htmlspecialchars( '2021-02-17') ;
    $employeur = htmlspecialchars('philippe') ;
    $activite = htmlspecialchars('super marion') ;
    $salaire = htmlspecialchars( 2000) ;
     
    $conn = mysqli_connect('127.0.0.1', 'root', '', 'philippe');
     
    $req = "INSERT INTO orders VALUES ('',$employeur,$activite,$salaire,$debutActivite,$finActivite,DEFAULT)";
     
     
    try {$conn->query($req);} catch (Exception $e) {$e->getMessage();}
     
    echo 'Success';
    le resultat affiche 'Success' mais l'enregistrement ne se fait pas sur Mysql.
    avec le code initial etant une response ajax:
    traitementActivite.php
    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
    <?php
    session_start();
     
    if(isset($_POST["debutActivite"], $_POST["finActivite"], $_POST["employeur"], $_POST["activite"], $_POST["salaire"] )) {
     
        $debutActivite = htmlspecialchars( $_POST['debutActivite']) ;
        $finActivite = htmlspecialchars( $_POST['finActivite']) ;
        $employeur = htmlspecialchars( $_POST['employeur']) ;
        $activite = htmlspecialchars( $_POST['activite']) ;
        $salaire = htmlspecialchars( $_POST['salaire']) ;
     
    //     $debutActivite = date('Y-m-d', strtotime($debutActivite));
    //     $finActivite = date('Y-m-d', strtotime($finActivite));
     
        $_SESSION['information'] = $debutActivite;
     
     
        $conn = mysqli_connect('127.0.0.1', 'root', '', 'philippe');
     
    $req = "INSERT INTO orders VALUES ('',$employeur,$activite,$salaire,$debutActivite,$finActivite,DEFAULT)";
     
    try {$conn->query($req);} catch (Exception $e) {echo $e->getMessage(), "\n";}
    }
    else {
        echo 'Success';
    }
    ?>
    Le retour n'est pas 'Success' pas de reponse positive.
    puis je utiliser la varible de session information $_SESSION['information'] dans la div résultat.

    Code HTML : 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
    <form id ="coffre2" action="#" method="post">
    <div class="container">
     
        </br>
        <div class="row">
          <div class="col-md-2">
            <input type="text" name="from_date" id="from_date" class="form-control dateFilter" placeholder="Depuis" required autofocus/>
          </div>
          <div class="col-md-2">
            <input type="text" name="to_date" id="to_date" class="form-control dateFilter" placeholder="Jusqu'&aacute;" required />
          </div>
    	  <div class="col-md-2">
          <input type="text"  id="employeur" class="form-control" placeholder="Entrer l employeur" required ></br>
    	  <input type="text"  id="activite" class="form-control" placeholder="Entrer votre activite" required ></br>
    	  <input type="text"  id="salaire" class="form-control" placeholder="Entrer le salaire propose" required ></br>
    	  <button type="submit" id="envoyer" title="Envoyer">Valider</button>
          <button type="reset" id="reset" title="reset">Reset</button>
          </div>
    	  <div class="col-md-2">
    	  <div id="resultat">
    	 </div>     
    	 </div>
       </div>
    </div>
    </br>
    </form>
     
    </body>
    </html>

    Code JavaScript : 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
    <script type="text/javascript">
    $(document).ready(function () {
     
        $('.dateFilter').datepicker({
          dateFormat: "dd-mm-yy"
        });
     
        	$('#from_date').datepicker( "option", "dateFormat", 'dd-mm-yy' );	
            $('#to_date').datepicker( "option", "dateFormat", 'dd-mm-yy' );	
     
     
     
    var from_date = $('#from_date').val();
    var to_date = $('#to_date').val();
     
    $("#coffre2").submit(function( event ) {
    	  event.preventDefault();
     
    	$('#from_date').datepicker( "option", "dateFormat", 'yy-mm-dd' );	
    	$('#to_date').datepicker( "option", "dateFormat", 'yy-mm-dd' );	
     
    	var  employeur = $('#employeur').val();
    	var  activite = $('#activite').val();
    	var  salaire = $('#salaire').val();
    	var debutActivite = $('#from_date').val();
    	var finActivite = $('#to_date').val();
     
    	alert(debutActivite);    commentaire: yy-mm-dd est le format recupere apres sousmision du fprmulaire.
    	alert(finActivite);
     
    $.post('traitementActivite.php', {            <=== APPEL de traitementActivite.php
    	employeur: $('#employeur').val(),
    	activite: $('#activite').val(),
    	salaire: $('#salaire').val(),
    	debutActivite: $('#from_date').val(),
    	finActivite: $('#to_date').val(),
     
      },  
      function(data){
     
          if(data == "Success"){
               // Le membre est connecté. Ajoutons lui un message dans la page HTML.
               $("#resultat").html("<p>Vous avez été connecté avec succès !</p>");
               document.location.href = 'bienvenue.php';
          }
     
     
    else  {
               $("#resultat").html("<p>Erreur lors de la connexion...</p>");
          }
     
      },
      'text'
    );
    });
    le message affiché dans résultat est "Erreur lors de la connexion..."

  6. #6
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    Il faut vraiment afficher les messages d'erreur.
    Vous écrasez tous les messages pas vos propres return qui disent simplement oui/non
    Ca va être compliqué de continuer à aider en marchant dans le noir


    Affichez les erreurs PHP et/ou regardez les logs du serveur. De plus, validez les réponses reçues en JS et pas les réponses de votre code car c'est lui qui pose problème.

    Important : Je déconseille l'utilisation de réponse en text ou html. L'utilisation de réponse JSON (dataType par défaut) est plus propre.
    Car actuellement, si ça se trouve, tout fonctionne bien sauf que vous avez peut-être un saut de ligne quelque part et votre réponse est PHP_EOL . "Success" ou Success . PHP_EOL et donc invisible à l'oeil nu (ou alors bêtement avec un espace devant ou derrière)

  7. #7
    Membre éclairé Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Par défaut
    Merci pour ces conseils.
    Le résultat par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO orders VALUES ('','$employeur','$activite','$salaire','$debutActivite','$finActivite',DEFAULT)" en sachant que les dates sont au format yyyy/mm/dd

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

Discussions similaires

  1. Requête avec champs non vides
    Par bibi28 dans le forum Langage SQL
    Réponses: 15
    Dernier message: 15/06/2012, 18h29
  2. Requête INSERT avec 2 requêtes sélection (2 tables)
    Par JiB@ dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/02/2007, 16h31
  3. Requête UNION avec champ Oui/non
    Par Mariboo dans le forum Access
    Réponses: 4
    Dernier message: 01/08/2006, 08h36
  4. Requête : Insert avec plusieurs tables
    Par bleu_ciel dans le forum Access
    Réponses: 4
    Dernier message: 01/06/2006, 21h42
  5. SQL insertion avec champ autoIncrement
    Par sg-40 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 09/11/2005, 11h28

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