2016-07-04 11 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['id']または$id$_POST['tid']を使用しているように見えます。

+0

updateステートメントは正常に動作します。 select文は、更新された行のデータベースからデータをフェッチするためのものです。 –

-1

あなたがしていることは、セキュリティ面で大きなノーオがあります。クエリの中にPOSTパラメータを追加する前に、POSTパラメータをエスケープしてください。

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

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

代わりにグローバルパラメータの関数function壁($番号)のパラメータとしてデータを送信して考えてみてください。

+1

'$ id = mysqli_real_escape_string;'?カッコと議論を忘れてしまったと思いますか? ;-)よりよい方法はPrepared Statementsを使用することですが、それはSQLインジェクションのリスクを除去するためです。 –

+0

削除してくれてありがとう、私は更新中にそれを逃した。 –

関連する問題