2016-07-04 54 views
-2

在顯示數據庫數據的表格上,我有一個表單,其中有一個文本區域,用戶可以在其中鍵入收據編號並提交以保存在數據庫中指定行。下面的PHP代碼是在表單提交後更新數據庫的。 我想挑選特定行的其餘細節,因此我使用已提交收據的$_POST['id']。主要關鍵是id。然而我有一個挑戰,因爲我不能從數據庫中獲取數據,我使用$id = $_POST['id'];之前創建的函數update聲明完美,但SELECT STATEMENT沒有。我該如何解決它?任何人?從PHP中的POST [id]表格獲取數據

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

$rec = $_POST['receipt']; 
$id = $_POST['id']; 
//reate connection 

$sql = "UPDATE customer SET `receipt` = '".$_POST['receipt']."', `date_entered` = NOW(), `receipt_lock` = 1 WHERE `id` = '".$_POST['tid']."' AND receipt_lock = 0"; 
    if ($conn->query($sql) === TRUE) { 
    // echo "New record created successfully"; 
    } else { 
     echo "Error: " . $sql . "<br>" . $conn->error; 
     exit(); 
    $conn->close(); 
} 


function wall(){ 

global $recp; 
global $id; 

// Create con 

$sql = "SELECT * FROM customer WHERE id ='$id'"; 

$result1 = mysqli_query($conn, $sql); 
     $resultarr = mysqli_fetch_assoc($result1); // fetch data 


       $name = $resultarr['name']; 
       echo "$name"; //Does not display 

       $amount = $resultarr['amount']; 
       $transaction_id = $resultarr['trans_id']; 
       $date = $resultarr['time_paid']; 
    } 
else { 

echo "this is not right!; 
} 
wall(); 
+3

https://www.owasp.org/index.php/SQL_Injection –

+0

當您設置'$ rec = $ _POST ['receipt'];'時,您也有'global $ recp'。無論如何,'$ _POST'是一個超級全球性的,你可以在任何地方訪問它,包括你的功能。不需要討厭的'全球'。正如@MattS指出的那樣,您遇到的更大問題是您對SQL注入敞開大門。 –

+0

嘗試使用echo $ name而不是echo「$ name」 –

回答

0

忽略關於SQL安全性的所有(有效)問題並解決您的問題 - 如何將$ id變量作爲參數傳遞給您的牆函數。

wall($id); 

function wall($id){ 

    $sql = "SELECT * FROM customer WHERE id ='$id'"; 
    // ... use prepared statements for security... 
    ... 
} 
0

看起來你是在你的SQL查詢使用$_POST['tid']代替$_POST['id']$id

+0

更新聲明正常工作。 select語句用於從數據庫中爲更新的行提取數據。 –

-1

在安全性方面你正在做的是一個很大的nono。確保您在將查詢添加到您的查詢之前將其轉義。

$id = $_POST['id']; 
$id = mysqli_real_escape_string($conn, $id); 

http://php.net/manual/ro/mysqli.real-escape-string.php

想想發送數據的功能函數牆($ ID)的參數,而不是全局參數。

+1

'$ id = mysqli_real_escape_string;'?忘記一些括號和論點,我相信? ;-)但更好的方法是使用Prepared Statements,因爲這將消除SQL注入的風險。 –

+0

感謝您的支持,我在更新期間錯過了它。 –