2016-11-24 90 views
4

我有這種形式,我想用來捕獲數據,並插入到數據庫:PHP沒有插入到數據庫SQL SERVER 2008

<form actoin="request-new-price.php" method="post" id="demo-form2" data-parsley-validate> 
<div> 
    <label for="salesRep">Sales Rep:</label> 
    <div> 
     <input type="text" name="salesRep" id="salesRep" required="required" value="<?php echo $user['userName']; ?>"> 
    </div> 
</div> 
<div> 
    <label for="CardName">Customer Name</label> 
    <div> 
     <input type="text" id="CardName" name="CardName" required="required" value="<?php echo $selectedCustomerName ?>"> 
    </div> 
</div> 
<div> 
    <label for="CardCode">Customer Code</label> 
    <div> 
     <input type="text" id="CardCode" name="CardCode" required="required" value="<?php echo $selectedCustomerID ?>"> 
    </div> 
</div> 
<div> 
    <label for="ItemName">Product Name</label> 
    <div> 
     <input type="text" id="ItemName" name="ItemName" required="required" value="<?php echo $selectedProductName ?>"> 
    </div> 
</div> 
<div> 
    <label for="ItemCode">Product Code</label> 
    <div> 
     <input type="text" id="ItemCode" name="ItemCode" required="required" value="<?php echo $selectedProductCode ?>"> 
    </div> 
</div> 
<div> 
    <label for="Price">Current Price</label> 
    <div> 
     <input type="text" id="Price" name="Price" required="required" value="£<?php echo $selectedProductPrice ?>"> 
    </div> 
</div> 
<div> 
    <label for="requestedPrice">Requested Price</label> 
    <div> 
     <input type="text" id="requestedPrice" name="requestedPrice" required="required" value="£"> 
    </div> 
</div> 
<div> 
    <div> 
     <a href="specialprice.php?custCode=<?php echo $customer['CardCode'];?>&custName=<?php echo $customer['CardName'];?>">Cancel</a> 
     <button type="submit" id="submit" name="submit" value="1">Submit</button> 
    </div> 
</div> 
</form> 

這裏是我的SQL/PHP:

<?php 

if(isset($_POST['submit'])){ 
    print_r($_POST); 

    $query = prepare("INSERT INTO PriceRequests (salesRep, CardName, CardCode, ItemName, ItemCode, Price, requestedPrice) 
       VALUES (:salesRep, :cardName, :cardCode, :itemName, itemCode, :itemPrice, :newPrice) 
      "); 
      $insertSql = sqlsrv_query($sapconn, $query); 

    $insertSql->bindParam(":salesRep",$salesRep); 
    $insertSql->bindParam(":cardName",$cardName); 
    $insertSql->bindParam(":cardCode",$cardCode); 
    $insertSql->bindParam(":itemName",$itemName); 
    $insertSql->bindParam(":itemCode",$itemCode); 
    $insertSql->bindParam(":itemPrice",$itemPrice); 
    $insertSql->bindParam(":newPrice",$newPrice); 

    $salesRep = trim($_POST['salesRep']); 
    $cardName = trim($_POST['CardName']); 
    $cardCode = trim($_POST['CardCode']); 
    $itemName = trim($_POST['ItemName']); 
    $itemCode = trim($_POST['ItemCode']); 
    $itemPrice = trim($_POST['Price']); 
    $newPrice = trim($_POST['requestedPrice']); 


    $insertSql->execute(); 
    return $insertSql; 
} 

?> 

但是數據沒有插入數據庫我對PHP相當陌生,這是我第一次嘗試寫回數據庫,所以我可能會錯過簡單的東西,或者它可能完全錯誤。

無論哪種方式,所有的幫助表示讚賞。

編輯:

我的PHP現在是這樣的:

if(isset($_POST['submit'])){ 
    //print_r($_POST); 

    $query = "INSERT INTO PriceRequests (salesRep, CardName, CardCode, ItemName, ItemCode, Price, requestedPrice) 
             VALUES (:salesRep, :cardName, :cardCode, :itemName, :itemCode, :itemPrice, :newPrice) 
        "; 
    $stmt = $sapconn->prepare($query); 

    $salesRep = (isset($_POST['salesRep']) && !empty($_POST['salesRep']))?$_POST['salesRep'] : NULL; 
    $cardName = (isset($_POST['CardName']) && !empty($_POST['CardName']))?$_POST['CardName'] : NULL; 
    $cardCode = (isset($_POST['CardCode']) && !empty($_POST['CardCode']))?$_POST['CardCode'] : NULL; 
    $itemName = (isset($_POST['ItemName']) && !empty($_POST['ItemName']))?$_POST['ItemName'] : NULL; 
    $itemCode = (isset($_POST['ItemCode']) && !empty($_POST['ItemCode']))?$_POST['ItemCode'] : NULL; 
    $itemPrice = (isset($_POST['Price']) && !empty($_POST['Price']))?$_POST['Price'] : NULL; 
    $newPrice = (isset($_POST['requestedPrice']) && !empty($_POST['requestedPrice']))?$_POST['requestedPrice'] : NULL; 

    $stmt->bindValue(':salesRep', $salesRep, PDO::PARAM_STR); 
    $stmt->bindValue(':cardName', $cardName, PDO::PARAM_STR); 
    $stmt->bindValue(':cardCode', $cardCode, PDO::PARAM_STR); 
    $stmt->bindValue(':itemName', $itemName, PDO::PARAM_STR); 
    $stmt->bindValue(':itemCode', $itemCode, PDO::PARAM_STR); 
    $stmt->bindValue(':itemPrice', $itemPrice, PDO::PARAM_STR); 
    $stmt->bindValue(':newPrice', $newPrice, PDO::PARAM_STR); 

    $stmt->execute(); 
    return $stmt; 
    } 

,但我仍然沒有投入到我的數據庫,我收到以下錯誤: PHP致命錯誤:未捕獲的錯誤:調用成員函數準備()上資源

DB連接:

<?php 
$serverName = "serverName"; 
$connectionInfo = array("Database"=>"database_name", "UID"=>"user_Id", "PWD"=>"Password", "ReturnDatesAsStrings"=>true); 
$sapconn = sqlsrv_connect($serverName, $connectionInfo); 
?> 
+2

您正在''sqlsrv_'與'PDO ::'混合使用。 – Phiter

+0

我可以問你在使用哪個建議嗎? – PHPNewbie

回答

1

還有一個錯字:

$query = prepare("INSERT INTO PriceRequests (salesRep, CardName, CardCode, ItemName, ItemCode, Price, requestedPrice) 
       VALUES (:salesRep, :cardName, :cardCode, :itemName, itemCode, :itemPrice, :newPrice) 
      "); 

佔位符itemCode沒有後綴「:」。 檢查並嘗試。 謝謝。

更新:

我試了一些你在問題中寫的東西。您已嘗試在參數分配前將參數綁定到佔位符。

當我試圖這樣做時,我得到了異常。我認爲這可能是數據未被插入的原因。

我建議你寫在下面的方式代碼:

PHP代碼:

<?php 

if(isset($_POST['submit'])){ 
    print_r($_POST); //Unnecessary, you can remove it 

    $query = prepare("INSERT INTO PriceRequests (salesRep, CardName, CardCode, ItemName, ItemCode, Price, requestedPrice) 
       VALUES (:salesRep, :cardName, :cardCode, :itemName, :itemCode, :itemPrice, :newPrice) 
      "); 
      $insertSql = sqlsrv_query($sapconn, $query); 

    $salesRep = trim($_POST['salesRep']); 
    $cardName = trim($_POST['CardName']); 
    $cardCode = trim($_POST['CardCode']); 
    $itemName = trim($_POST['ItemName']); 
    $itemCode = trim($_POST['ItemCode']); 
    $itemPrice = trim($_POST['Price']); 
    $newPrice = trim($_POST['requestedPrice']); 


    $insertSql->bindParam(":salesRep",$salesRep); 
    $insertSql->bindParam(":cardName",$cardName); 
    $insertSql->bindParam(":cardCode",$cardCode); 
    $insertSql->bindParam(":itemName",$itemName); 
    $insertSql->bindParam(":itemCode",$itemCode); 
    $insertSql->bindParam(":itemPrice",$itemPrice); 
    $insertSql->bindParam(":newPrice",$newPrice); 

    $insertSql->execute(); 
    return $insertSql; 
} 

?> 

我建議幾個變化:

1. PDO在這裏使用,使用一個變量來獲取數據庫連接(讓我們假設它的$ db_conn)。

代替

$insertSql = sqlsrv_query($sapconn, $query);

使用

$db_conn = new PDO(<connection-string>, <user-name>, <password>);

$stmt = $db_conn->prepare($query)

然後由值綁定:

$stmt->bindValue(<placeholder>, <variable_vlaue>, <value_type>);

如:$stmt->bindValue(:itemName, $itemName, PDO::PARAM_STR);

然後進行執行:

$stmt->execute();

2.如果你把一些數據驗證這將是有益的:

賦值通過驗證將POST發送到變量

如:

$itemName = (isset($_POST['ItemName']) && !empty($_POST['ItemName']))?$_POST['ItemName'] : NULL;

這裏,當插入查詢與 'NULL' 執行時會拋出異常。

N.B. :應該使用try-catch塊。

我認爲它應該現在工作。

請隨時告訴如果它不起作用,我會再次檢查。

+0

感謝您的反饋,我發現並更新了,無濟於事。 – PHPNewbie

+0

我檢查並更新了我的答案。請檢查並查看,如果您有任何疑問,請將其評論出來。謝謝。 –

+0

非常感謝您花時間幫忙,我已更新我的代碼,但我收到此錯誤: PHP致命錯誤:未捕獲錯誤:調用成員函數prepare() 我將更新我的原始問題以向您顯示我的碼。 – PHPNewbie

1

你知道第一行有錯字嗎?將不會提交。

<form actoin="request-new-price.php" method="post" id="demo-form2" data-  parsley-validate> 

轉變,形成行動開始在PHP代碼

+0

謝謝,我沒有注意到!但我的表單仍然沒有提交。 – PHPNewbie