2017-05-23 3 views
0

Ich habe versucht, Bild mit einigen Eingaben in die Datenbank zu speichern, aber ich erhielt diese Nachricht 'SQLSTATE [23000]: Integrität Einschränkung Verletzung : 1048 Die Spalte 'image_url' darf nicht null sein '.SQLSTATE [23000]: Verletzung Integritätsbedingung: 1048 Spalte 'image_url' kann nicht null sein

hier ist der Quellcode:

Php Code zur Verarbeitung der Eingänge:

<?php 
if($_POST){ 

     //$ef = $_POST["exp_file"]; 
     if($_POST["heading"] == '' && $_POST["myimage"] =='' && $_POST["text"] =='') 
     { 
      echo '<div style="padding:7px; margin-top:5px; margin-bottom:5px;" id="good" class="alert-warning">Check inputs for empty values.</div>'; 
     }else{ 

       try { 


     $head = $mysqli->real_escape_string($_POST["heading"]); 
     $txt = $mysqli->real_escape_string($_POST["text"]); 
     $time = time(); 
     $upload_image=$_FILES["myimage"]["name"]; 

     $folder="uploads/"; 

     move_uploaded_file($_FILES["myimage"]["tmp_name"], "$folder".$_FILES["myimage"]["name"]); 


      $stmt = $db->prepare("insert into posts(

      heading, 
      post_desc, 
      image_url, 
     user, 
     post_date 
     ) VALUES(:head,:pd,:iu,:user,:dat)"); 
     $stmt->execute(array(
     ':head'=>$head, 
     ':pd'=>$txt, 
     ':iu'=>$upload_image, 
     ':user'=>$user, 
     ':dat'=>$time 


     )); 
       //Saved 
       echo '<div style="padding:7px; margin-top:5px; margin-bottom:5px;" id="good" class="alert-success">Published Successfully.</div>'; 
       //$_POST = array(); 
      } catch(PDOException $e) { 
       echo $e->getMessage(); 
      } 

      } 
     } 
?> 

JQuery Teil davon:

<script> 
/* must apply only after HTML has loaded */ 
$(document).ready(function() { 
    $("#contact_form").on("submit", function(e) { 
     var postData = $(this).serializeArray(); 
     var formURL = $(this).attr("action"); 
     $.ajax({ 
      url: formURL, 
      type: "POST", 
      data: postData, 
      success: function(data, textStatus, jqXHR) { 
       $('#contact_dialog .modal-header .modal-title').html("Result"); 
       $('#contact_dialog .modal-body').html(data); 
       $("#submitForm").remove(); 
      }, 
      error: function(jqXHR, status, error) { 
       console.log(status + ": " + error); 
      } 
     }); 
     e.preventDefault(); 
    }); 

    $("#submitForm").on('click', function() { 
     $("#contact_form").submit(); 
    }); 
}); 
</script> 

schließlich die html

<div class="modal fade" id="contact_dialog" role="dialog"> 
    <div class="modal-dialog"> 
     <div class="modal-content"> 
      <div class="modal-header"> 
       <button type="button" class="close" data-dismiss="modal">&times;</button> 
       <h4 class="modal-title"><span class="glyphicon glyphicon-file"></span> Create an Article</h4> 
      </div> 
       <div class="modal-body"> 
       <form id="contact_form" class="form col-md-12 center-block form-signin" action="article/publish.php" method="post" autocomplete="off" enctype="multipart/form-data"> 

        <div class="row">  
         <div class="col-lg-12"> 
          <div class="form-group"> 
          <input type="text" class="form-control input-lg" placeholder="Heading" name="heading" id="heading" value="">        
          </div> 
         </div> 
        </div> 

              <div class="row">  
         <div class="col-lg-12"> 
          <div class="form-group"> 
          <input type="file" class="form-control file_image" placeholder="Upload a file" name="myimage" id="files" value="">        
          </div> 
         </div> 
        </div> 


         <div class="row">  
         <div class="col-lg-12"> 
          <div class="form-group"> 
          <textarea class="form-control input-lg textarea" name="text" id="text" cols="120" rows="9" wrap="virtual"></textarea> 
          </div> 
         </div> 
        </div> 


        </form> 

       </div> 
       <div class="modal-footer"> 
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
        <button type="button" id="submitForm" class="btn btn-default">Publish</button> 
       </div> 
      </div> 
     </div> 
    </div> 

Was macht der Fehler? oder gemein? Und was genau mache ich falsch?

Antwort

0

Das ist ein wenig schwer, genau zu sagen, wo das Problem liegt, ohne die gesamten Code zu testen ... Aber es scheint, dass Sie permanent versucht, einen NULL als Wert für image_url (und nicht nur) einzufügen.

Zunächst sollten Sie im Voraus entscheiden, ob Sie die Werte NULL in der Datenbank akzeptieren möchten. Definieren Sie die Felder entsprechend in der Datenbank (Feld NOT NULL).

Zweitens sollten Sie auf NULL Werte bestätigen - nicht nur auf leere Werte (... == '') - verwenden, OR Operator - statt AND - auf empfangenen $_POST ‚s, wie:

if ($_POST) { 
    if (
      $_POST["heading"] == '' || !isset($_POST["heading"]) || 
      $_POST["myimage"] == '' || !isset($_POST["myimage"]) || 
      $_POST["text"] == '' || !isset($_POST["text"]) 
    ) { 
     echo '...'; 
    } else { 
     //... 
    } 
} 

Drittens Stellen Sie sicher, dass Sie wirklich gültige Formularwerte senden, z nicht leer und ungleich NULL.

Ich würde Ihnen auch empfehlen, bindValue() oder bindParam() zu verwenden, wenn Sie die SQL-Anweisung vorbereiten. Auf diese Weise können Sie jeden Bindungsparameter auf den Datentyp überprüfen. Dies ist ein wichtiger Schritt, da der Datentyp der einzufügenden Werte dem Datentyp entsprechen muss, der für das entsprechende Feld in der Datenbank definiert ist. Wie:

Und auch die PDOStatement :: prepare() wirft nicht immer eine Ausnahme. Sie sollten also auch den Fall behandeln, wenn prepare() gleich FALSE ist. Die Funktion execute() löst auch keine Ausnahme aus. Also behandeln Sie es wie prepare() auch. Hier ist ein Beispiel, vielleicht hilft es:

+0

vielen Dank ... Ich werde meine Codes jetzt ändern. Nochmals vielen Dank für Ihre wertvolle Zeit. –

+0

@ FagbemiAyodele Sie sind herzlich willkommen! –

+0

@FagbemiAyodele Ich habe vor einiger Zeit eine Antwort über den Ablauf der Ausnahmebehandlung in einer (php) App geschrieben (Ausnahmen definieren, neu einwerfen, Ausnahmen kodieren, Ausnahmen bestellen, usw.). Es ist groß :-)) aber einfach zu folgen. Ich habe vor allem die PDO-Ausnahmebehandlung gezeigt. Also, wenn Sie interessiert sind: [Ausnahmebehandlung für PDO :: prepare() und PDOStatement :: execute() + Ein generalisiertes Ausnahmebehandlungsschema] (https://stackoverflow.com/questions/43691356/cant-update-or- Löschen-dynamisch-mit-Zweig-und-php-oop/43704962 # 43704962) –

0

Sie reichen multipart/form-data mit AJAX ein. Deshalb ist $_FILES veritable in Ihrem Skript nicht verfügbar und null Daten in $upload_image festgelegt. Es besteht auch die Möglichkeit, dass Ihre move_uploaded_file() Datei nicht auf Ihren Server hochlädt. Obwohl ich habe nicht getestet, aber Sie können die unten stehende Änderung Ihres Ajax-Code testen:

$.ajax({ 
      url: formURL, 
      type: "POST", 
      data: new FormData(this), 
      processData: false, 
      contentType: false, 
      success: function(data, textStatus, jqXHR) { 
       $('#contact_dialog .modal-header .modal-title').html("Result"); 
       $('#contact_dialog .modal-body').html(data); 
       $("#submitForm").remove(); 
      }, 
      error: function(jqXHR, status, error) { 
       console.log(status + ": " + error); 
      } 
     }); 
+0

Danke, es funktioniert, Könnten Sie bitte einen Grund, warum Bildpfad in db gespeichert wird, aber nicht in Stammordner verschieben? –

+0

wie d mache ich das? Ich meine die Antwort zu akzeptieren? –

Verwandte Themen