2016-10-24 2 views
0

Ich arbeite mit einem ziemlich geradlinigen Formular noch aus irgendeinem Grund nicht NULL Ergebnisse übermittelt und stattdessen sie als leere Ergebnisse übermittelt.Button Formular Einreichung nicht NULL senden

<div class="span6"> 
    <form action="" method="POST">          
     <div class="block-fluid without-head">       
      <div class="toolbar clearfix"> 
       <div class="right"> 
        <div class="btn-group"> 
         <button type="submit" class="btn btn-small btn-warning tip" data-original-title="Submit Aritcle"> 
          <span class="icon-ok icon-white"></span> 
         </button> 
         <button type="button" class="btn btn-small btn-danger tip" data-original-title="Delete Article"> 
          <span class="icon-remove icon-white"></span> 
         </button> 
        </div> 
       </div> 
       <div class="left"> 
        <div style="font-size: 11pt; font-family: -webkit-body; font-weight: bolder;">Article Exchange Request</div> 
       </div> 
      </div>       

      <div class="row-form clearfix"> 
       <div class="span3">Title</div> 
       <div class="span9"><input type="text" name="title" value="" placeholder="main subject title"></div> 
      </div> 

      <div class="row-form clearfix"> 
       <div class="span3">First Sentence</div> 
       <div class="span9"><input type="text" name="s1" value="" placeholder="Sentence with max of 200 characters"></div> 
      </div> 

      <div class="row-form clearfix"> 
       <div class="span3">Second Sentence</div> 
       <div class="span9"><input type="text" name="s2" value="" placeholder="Optional sentence with max of 200 characters"></div> 
      </div>             

      <div class="row-form clearfix"> 
       <div class="span3">Third Sentence</div> 
       <div class="span9"><input type="text" name="s3" value="" placeholder="Optional Sentence with max of 200 characters"></div> 
      </div> 

      <div class="row-form clearfix"> 
       <div class="span3">Website Url</div> 
       <div class="span9"><input type="text" name="link" value="" placeholder="Url to be included in articles"></div> 
      </div> 

      <div class="row-form clearfix"> 
       <div class="span3">Website Url Title</div> 
       <div class="span9"><input type="text" name="link_text" value="" placeholder="Url text to be included in articles limit 150 characters"></div> 
      </div> 

      <div class="row-form clearfix"> 
       <div class="span3">Credit Offer</div> 
       <div class="span9"><input type="text" name="cost_value" value="" placeholder="Example: 100"></div> 
      </div> 
     </div>      
    </form> 
</div> 

Das Problem ist jemand nur entlang kommen kann und das Formular abschicken, ohne überhaupt irgendwelche Daten zu eingegeben hat, und es legt nach wie vor, und fügt leere Ergebnisse zu jeder Spalte in der Datenbank. Das bedeutet, dass in der Datenbank keine NULL-Werte gesetzt sind.

Meine Form Verarbeitung

<? 

if (isset($_POST[cost_value])) { 
    $stmt = $db->prepare("SELECT credits from member_credits WHERE username = :username"); 
    $stmt->bindParam(':username', $username); 
    $stmt->execute(); 
    $row = $stmt->fetch(); 
    $count = $row[credits]; 
    if ($count > $_POST[cost_value]) { 
     $stmt = $db->prepare('INSERT INTO article_requests (title, s1, s2, s3, link, link_text, offer, username) VALUES (:title, :s1, :s2, :s3, :link, :link_text, :offer, :username)'); 
     $stmt->bindValue(':title', $_POST[title]); 
     $stmt->bindValue(':s1', $_POST[s1]); 
     $stmt->bindValue(':s2', $_POST[s2]); 
     $stmt->bindValue(':s3', $_POST[s3]); 
     $stmt->bindValue(':link', $_POST[link]); 
     $stmt->bindValue(':link_text', $_POST[link_text]); 
     $stmt->bindValue(':offer', $_POST[cost_value]); 
     $stmt->bindValue(':username', $username); 
     $stmt->execute(); 
    } 
} 
?> 

Was erwarte ich auf Vorlage geschehen ist, wenn kein Wert in das Formular eingetragen wird auf NULL gesetzt werden sollte ... das war, wenn kein $ _POST [cost_value] bedeuten würde festgelegt, würde das Formular nicht übergeben. So wie es jetzt aussieht, sieht man IMMER $ _POST [cost_value] als gesetzt - manchmal auf einen Wert wie $ _POST [cost_value] = '100'; und andere Zeiten $ _POST [cost_value] = ''; In beiden Fällen wird das Formular jedoch gesendet. Gleichermaßen habe ich die Datenbank so eingestellt, dass nur die Werte von s2 und s3 null sein dürfen, aber wenn alles leer statt null liefert, ist das meistens nutzlos.

Was genau fehlt mir? Warum sagt es nicht $ _POST [cost_value] = NULL; wenn der Benutzer keinen Wert eingegeben hat? Warum reicht es '' ?? Ich habe das Gefühl, es ist etwas Grund zu gehen, ich bin mit Blick auf, ich sehe es einfach nicht ....

UPDATE FÜR CLARITY

Ich weiß, dass es eine Reihe von Möglichkeiten, dies zu beheben. Ich kann verwenden, wenn dann Tests, ich temporäre Variablen verwenden kann, kann ich für den Wert selbst prüfen ist etwas anderes als "". Ich weiß, was die Arbeitsumstände sind. Ich verstehe nicht, warum sie gebraucht werden. Warum mache ich jeden Tag der Woche Formulare mit issset und jeden Tag, der funktioniert. Wenn ein Formular keine Werte vom Benutzer eingegeben hat, wird das Formular nicht gesendet, weil ein if-Set false zurückgibt. Warum also ist es in dieser speziellen Form, die es einreicht "anstatt zu sagen! Hasse es nicht.

+0

Zugegeben, ich kann ternäre Operatoren verwenden, um dieses Problem zu lösen, ich nehme an, ich habe das noch nie zuvor erlebt. Ich mache Formulare die ganze Zeit und in der Regel, wenn jemand ein Formular ohne Daten einreicht, wird das Formular nicht verarbeitet. Das ist der Grund (ich dachte) es war ziemlich Standard zu verwenden, wenn (isset) auf POST Formularverarbeitung. – Bruce

+0

Ich würde nicht vorschlagen, NULL auf den POST zu setzen. Ich würde das in der Datenbank so eingestellt haben, dass, wenn keine Werte während der Erstellung der Zeilen eingegeben werden, diese automatisch auf NULL gesetzt wird, anstatt auf einen Zeichenkettetext von "NULL" – Kray

+0

@Levi, das ist es einfach. Die Datenbank hat Spalten, die auf NULL gesetzt sind, aber wenn ein leerer Wert übergeben wird, wird ein leerer Wert gesetzt, nicht NULL. Deshalb bin ich verwirrt. – Bruce

Antwort

-1

Versuchen

If(isset($_POST['cost_value']) && !empty($_POST['cost_value']){ 

// Code }

+0

sollte es nicht sein If (isset ($ _ POST ['cost_value']) &&! Leer ($ _POST ['cost_value']) {? –

+1

Prüfen, ob isset und leer? -1 –

1

// eine var auf den Posten zuordnen.

$DIRTY_Var = $_POST['varinputname']; 

// die var sicherzustellen, gereinigt (kein lustiges Geschäft bei der Einreichung)

$CLEAN_Var = filter_var($DIRTY_Var,` FILTER_SANITIZE_STRING); 

// überprüfen, ob die var leer ist oder Wert hat. Wenn es leer ist, wird die Variable auf null gesetzt;

if (!$CLEAN_Var) { return $CLEAN_Var = null; } 

    // validate input 
    $valid = true; 

    // insert data 
    if ($valid) { 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $sql = "INSERT INTO Table (" 
           ."ColumnNames" 
          .")" 
      ."VALUES(" 
      ."?" 
      .")"; 
     $q = $pdo->prepare($sql); 
     $q->execute(array($CLEAN_Var)); 
     // Once INSERT is completed, we will redirect. 
     header("Location:" 'link.php'); exit; 
    } 
+1

'if (! Empty ($ _ POST)) {' scheitert mit '

Verwandte Themen