2016-10-24 3 views
0

Я работаю с довольно простой формой, но по какой-то причине он не отправляет результаты NULL и вместо этого отправляет их в виде пустых результатов.Форма отправки формы не отправляется NULL

<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> 

Проблема в том, кто-то может просто прийти и отправить форму без ввода каких-либо данных на всех, и она по-прежнему представляет, и добавляет пустые результаты каждого столбца в базе данных. Значение NULL не задано в базе данных.

Моя обработка формы

<? 

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(); 
    } 
} 
?> 

Что я ожидаю случаться на представления, если значение не вводится в форме он должен быть установлен в NULL ... Это означало бы, если не $ _POST [cost_value] было set, форма не представила бы. Поскольку он стоит сейчас, он ВСЕГДА видит $ _POST [cost_value] как установленный - иногда это значение, такое как $ _POST [cost_value] = '100'; и другие времена $ _POST [cost_value] = ''; но в обоих случаях форма будет представлена. Точно так же у меня есть база данных, так что только значения s2 и s3 должны быть равны нулю, однако когда все отправляет пустой, а не null, это в основном бесполезно.

Что именно мне не хватает? Почему он не говорит $ _POST [cost_value] = NULL; если пользователь не вводит значение? Почему он отправляет? У меня есть ощущение, что его будет что-то основное я с видом, я просто не вижу ....

ОБНОВЛЕНИЯ ДЛЯ CLARITY

Я знаю, что есть несколько способов, чтобы исправить это. Я могу использовать, если тогда тесты, я могу использовать временные переменные, я могу проверить, что само значение - это нечто иное, чем «». Я знаю, КАКИЕ РАБОТАЮТСЯ. Я не понимаю, ПОЧЕМУ они нужны. Почему я делаю формы каждый день недели, используя ifseet, и каждый день, что работает. Если форма не имеет значений, введенных пользователем, форма не будет отправляться, потому что if isset возвращает false. Итак, почему именно в этой конкретной форме он отправляет '' вместо того, чтобы говорить! Isset не обрабатывается.

+0

Предоставлено, что я могу использовать тройные операторы, чтобы решить это, я полагаю, я никогда не сталкивался с этим раньше. Я делаю формы все время, и обычно, если кто-то подает форму без данных, форма не обрабатывается. Вот почему (я думал) было довольно стандартно использовать if (isset) в обработке POST-формы. – Bruce

+0

Я бы не предложил установить NULL на POST. Я бы установил это в базе данных так, чтобы, если во время создания строк не было введенных значений, тогда он будет автоматически установлен в NULL вместо строкового текста «NULL» – Kray

+0

@Levi. база данных имеет столбцы, которые должны быть NULL, но при отправке пустого значения будет установлено пустое значение, а не NULL. Вот почему я смущен. – Bruce

ответ

-1

Попробуйте

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

// код }

+0

, если он не будет If (isset ($ _ POST ['cost_value']) &&! Empty ($ _POST ['cost_value']) {? –

+1

проверка if iset и empty? -1 –

1

// Назначьте вар к столбу.

$DIRTY_Var = $_POST['varinputname']; 

// обеспечить вар убирается (не смешно бизнес при подаче)

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

// проверить, если переменная пуста или имеет значение. Если пустой, он установит значение var равным null;

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)) {' будет терпеть неудачу с '

Смежные вопросы