2017-08-04 48 views
0

我有一個簡單的表單,我用它來提交一個新的列表項。表單不提交到數據庫PHP PDO

HTML表單

<form class="form-horizontal" action="" method="post"> 
     <fieldset> 
      <!-- List Desription--> 
      <div class="form-group"> 
       <label class="col-md-4 control-label" for="listDescription"></label> 
       <div class="col-md-4"> 
        <div class="input-group"> 
         <span class="input-group-addon">Title/Description</span> 
         <input id="titleDescription" name="titleDescription" class="form-control" placeholder="Title/Descriptiopn" type="text" required=""> 
        </div> 
       </div> 
      </div> 
      <!-- List Status --> 
      <div class="form-group"> 
       <label class="col-md-4 control-label" for="listStatus"></label> 
       <div class="col-md-4"> 
        <select id="listStatus" name="listStatus" class="form-control"> 
         <option value="1">In Progress</option> 
         <option value="2">On Hold</option> 
         <option value="3">Complete</option> 
        </select> 
       </div> 
      </div> 
      <!-- Submit Button --> 
      <div class="form-group"> 
       <label class="col-md-4 control-label" for="btnAddList"></label> 
       <div class="col-md-4"> 
        <input type="submit" id="submit" name="submit" class="btn btn-info" value="Create List"> 
       </div> 
      </div> 
     </fieldset> 
    </form> 

的形式提交到以下PHP在同一頁上:

形式提交PHP

if(isset($_POST['submit'])) { 
    $listDescription = (isset($_POST['listDescription'])) ? $_POST['listDescription'] : ''; 
    $listStatus = (isset($_POST['listStatus'])) ? $_POST['listStatus'] : ''; 
    $createdDate = date('Y-m-d'); 

    $query = $pdo->prepare("INSERT into lists ('createdDate', 'listDescription', 'listStatus') VALUES (:createdDate, :listDescription, :listStatus)"); 
    $query->bindParam(':listDescription', $listDescription, PDO::PARAM_STR); 
    $query->bindParam(':listStatus', $listStatus,PDO::PARAM_STR); 
    $query->bindParam(':createdDate', $createdDate, PDO::PARAM_STR); 
    $query->execute(); 
} 

的形式沒有實際得到的數據進入MySQL數據庫。我有它顯示爲$ _ POST的增值經銷商:從$ _POST輸出

陣列:從$ _ POST

var_dump($_POST)

傾銷陣列實際顯示我的表單數據

array(3) { ["titleDescription"]=> string(5) "Title" ["listStatus"]=> string(1) "1" ["submit"]=> string(11) "Create List" }

我不能爲我的生活看到爲什麼這不是提交給數據庫。我也想將其包裝在一個try和捕捉異常,如果有的話,但是當我這樣做,我得到其他錯誤,例如,expected statement right before the. This is how I had it written with the try`:

PHP代碼與「嘗試」包括

try { 
     if(isset($_POST['submit'])) { 
      $listDescription = (isset($_POST['listDescription'])) ? $_POST['listDescription'] : ''; 
      $listStatus = (isset($_POST['listStatus'])) ? $_POST['listStatus'] : ''; 
      $createdDate = date('Y-m-d'); 

      $query = $pdo->prepare("INSERT into lists ('createdDate', 'listDescription', 'listStatus') VALUES (:createdDate, :listDescription, :listStatus)"); 
      $query->bindParam(':listDescription', $listDescription, PDO::PARAM_STR); 
      $query->bindParam(':listStatus', $listStatus,PDO::PARAM_STR); 
      $query->bindParam(':createdDate', $createdDate, PDO::PARAM_STR); 
      $query->execute(); 
     } catch (PDOException $e) { 
     echo "Error"; 
    } 
} 

正如我所提到的,但是當我包含try時,我基本上得到了語法錯誤。我相信我錯過了一些愚蠢的事情。

UPDATE

我得到它的工作。敲我的頭靠在桌子和不理解爲什麼它不是工作之後,我幾乎開始與最基本的形式,我可以創造和擴大從那裏:

try{ 
    if(isset($_POST['newItem'])) { 

     $createdOn = date("Y-m-d H:i:s"); 
     $listTitle = $_POST['listTitle']; 
     $createdBy = $_SESSION['user_id']; 
     $listStatus = $_POST['listStatus']; 

     $insert = $pdo->prepare("INSERT INTO userlists (createdOn, listTitle, createdBy, listStatus) VALUES(:createdOn, :listTitle, :createdBy, :listStatus)"); 
     $insert->bindParam(':createdOn', $createdOn); 
     $insert->bindParam(':listTitle',$listTitle); 
     $insert->bindParam(':createdBy',$_SESSION['user_id']); 
     $insert->bindParam(':listStatus',$listStatus); 
     $insert->execute(); 
     echo "insert it"; 
    } 
} catch(PDOException $e) { 
    echo "error:".$e->getMessage(); 
} 

所以這個執行以下操作:

  • 提交一個新的列表項
  • 提交新的列表項的數據庫
  • 提交當前USER_ID即會話標識符數據庫

在我的頁面的下方,我的PHP顯示屬於具有匹配user_id的用戶的所有列表項。

利潤!

+1

您的catch塊在if語句的右括號之後。仔細看看括號屬於什麼。 – Qirel

+0

也請按照此https://stackoverflow.com/questions/11321491/when-to-use-single-quotes-double-quotes-and-backticks-in-mysql。不知道它是否是重複的,但非常接近 –

+0

看來你的參數值是不同的,1是titleDescription和另一個是listDescription:name =「titleDescription」和$ _POST ['listDescription'] –

回答

0

我明白了。敲我的頭靠在桌子和不理解爲什麼它不是工作之後,我幾乎開始與最基本的形式,我可以創造和擴大從那裏:

try{ 
    if(isset($_POST['newItem'])) { 

     $createdOn = date("Y-m-d H:i:s"); 
     $listTitle = $_POST['listTitle']; 
     $createdBy = $_SESSION['user_id']; 
     $listStatus = $_POST['listStatus']; 

     $insert = $pdo->prepare("INSERT INTO userlists (createdOn, listTitle, createdBy, listStatus) VALUES(:createdOn, :listTitle, :createdBy, :listStatus)"); 
     $insert->bindParam(':createdOn', $createdOn); 
     $insert->bindParam(':listTitle',$listTitle); 
     $insert->bindParam(':createdBy',$_SESSION['user_id']); 
     $insert->bindParam(':listStatus',$listStatus); 
     $insert->execute(); 
     echo "insert it"; 
    } 
} catch(PDOException $e) { 
    echo "error:".$e->getMessage(); 
} 

所以這個執行以下操作:

提交一個新的列表項 向數據庫提交新的列表項 向數據庫提交當前的user_id即SESSION標識符 在我的頁面的下方,我的PHP顯示屬於具有匹配user_id的用戶的所有列表項。

利潤!