2017-09-25 9 views
3

J'ai déjà essayé de vérifier la publication d'un article associé, mais cela ne semble pas m'aider à résoudre mon problème. J'essaie de créer une page pour les rendez-vous où les données sont enregistrées dans la base de données. cependant, ces deux messages d'erreur apparaissant sur mon gardé fenêtre:Erreur: SQLSTATE [23000]: Violation de la contrainte d'intégrité: 1048 La colonne 'comments' ne peut pas être nulle

Notice: Undefined index: comments in C:\xampp\htdocs\db\connect2.php on line 29 Error: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'comments' cannot be null

ici est le code php

<form name="appointments" action="" method="POST"> 
<label>Name (First/Last)</label> <br> 
<input type="text" name="name" id="name" required="required" placeholder="Please Enter Name"> <br> 
<label>Email Address</label> <br> 
<input type="email" name="email" id="email" required="required" placeholder="[email protected]"> <br> 
<label>Phone Number</label> <br> 
<input type="text" name="contactno" id="contactno" required="required" placeholder="9221234567"> <br> 
<label>Nature of Appointment</label> <br> 
<select name="service" id="service"> 
<option value="other">Other</option> 
<option value="consultation">Consultation</option> 
<option value="Surgery">Surgery</option> 
</select> <br> 
</div> 
<label>Preferred Appointment Date</label> <br> 
<input type="date" name="prefDate" id="prefDate"> <br> 
<label>Comments</label> <br> 
<textarea rows="12" cols="40" name="comments" form="usrform" placeholder="Your comments here..."></textarea> <br> 
</div> 
<input type="submit" class="btnRegister" name = "schedule" value="Send Your Request"> 
</form> 

Voici mon connect2.php

<?php 
    //Local Server Information 
    $server = "127.0.0.1"; 
    $username = "root"; 
    $password = ""; 
    $db = "myDB"; 

    $name = ""; 
    $email = ""; 
    $contactno = ""; 
    $service = ""; 
    $prefDate = ""; 
    if (isset($_POST['comments']) && !empty($_POST['comments'])) { 
     $comments = $_POST['comments']; 
    } else { 
     $comments = ""; 
    } 
    //Check if connection was successful 
    try { 
     $con = new PDO("mysql:host=$server;dbname=$db","$username","$password"); 
     $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     if(isset($_POST['schedule'])) 
     { 
      $name = $_POST['name']; 
      $email = $_POST['email']; 
      $contactno = $_POST['contactno']; 
      $service = $_POST['service']; 
      $prefDate = $_POST['prefDate']; 
      $comments = $_POST['comments']; 


      $insert = $con->prepare("INSERT INTO appointments(name, email,contactno, service, prefDate, comments) values(:name, :email, :contactno, :service, :prefDate, :comments)"); 

      $insert->bindParam(':name', $name); 
      $insert->bindParam(':email', $email); 
      $insert->bindParam(':contactno', $contactno); 
      $insert->bindParam(':service', $service); 
      $insert->bindParam(':prefDate', $prefDate); 
      $insert->bindParam(':comments', $comments); 

      $insert->execute(); 
     } 
    } catch(PDOException $e) { 
     //die("Oops! Something went wrong with your database."); 
     echo "Error: ". $e->getMessage(); 
    } 
?> 

Cette est la ligne où l'erreur indique que le problème était.

$comments = $_POST['comments'];

je l'ai déjà essayé de coder en dur comme il $ Commentaires = « Votre commentaire »; Il est passé sans erreur et les données apparaissent dans la base de données. Cependant, lorsque j'utilise le code ci-dessus, une erreur apparaît. Quelqu'un m'aider s'il vous plaît. Ai-je manqué quelque chose? NOt sûr de ce qui ne va pas puisque l'autre ligne semble fonctionner.

grâce

Répondre

0

donc essayé de le réparer l'application de vos suggestions. et il semble que le responsable de l'erreur dans cette partie du code que j'ai entré sous php.

<textarea rows="12" cols="40" name="comments" form="usrform" placeholder="Your comments here..."></textarea> 

est

form="usrform"

enlever tout simplement fait le code de travail. il semble que le formulaire s'arrête dans le prefDate parce que j'ai assigné un nom de formulaire différent par accident sur la balise textarea.

remercie le deux qui donnaient des conseils qui m'a fait voir ce qui se passait mal

1

Vous pouvez essayer cette:

$comments = !empty($_POST['comments']) ? $_POST['comments'] : 'Default Comment'; 
+0

Salut, j'ai essayé de le faire, l'erreur: SQLSTATE [23000]: Intégrité violation de contrainte: 1048 colonne « commentaires » ne peut pas être nulle erreur a disparu et il n'a procédé à aucune erreur du tout. cependant, le commentaire n'insère que le "commentaire par défaut" et non ce que j'ai tapé – UmaruHime

1

le message d'erreur se raconte - que vous essayez de ne pas attribuer une valeur dans la colonne qui ne peut pas être vide. solution est - dans votre table de base de données, définissez la valeur par défaut comme nulle à votre comments champ. si vous utilisez phpmyadmin printscreen

ou vous pouvez exécuter mysql requête (ou une autre base de données, que vous utilisez), quelque chose comme ça

ALTER TABLE <table name> MODIFY COLUMN comments <column type> DEFAULT NULL; 
+0

J'ai essayé de le faire, l'erreur a disparu. cependant, les données apparaissent désormais dans la base de données, à l'exception des commentaires qui apparaissent comme nuls. T^T – UmaruHime

+0

comment cela devrait fonctionner. Si vous n'avez pas de valeur par défaut (dans votre cas null) et que vous n'attribuez rien - filed aura une valeur nulle. si vous voulez une chaîne vide '''' vous pouvez exécuter 'ALTER TABLE MODIFIER COLUMN commentaires NOT NULL DEFAULT '';' –