2016-04-04 5 views
0

私は、ip_employee_availabilityテーブルでmon_morn = 'yes'を持つすべての従業員を表示しようとしていますが、従業員は、 ip_employee_requestとそのrequestDateは、自分の入力時の日付と同じ値です。たとえば、2016-03-27をオフにしたが、可用性表にmon_morn = 'yes'が表示されていれば、表示する必要はありません。SQLクエリの入力の値を使用

これは、入力

<form action="mng_menu2.php" method="post"> 
    <input type='text' name='monday' id='date' value='2016-03-27'> 
</form> 

であり、これは、クエリ

$sql = "SELECT e.employeeName FROM ip_employee_availability a 
INNER JOIN ip_employee e ON a.employeeID = e.employeeID 
INNER JOIN ip_employee_request r ON a.employeeID = r.employeeID 
where mon_morn = 'yes' and requestDate <> $_POST['monday] "; 

$myData= mysqli_query($con,$sql); 
+1

あなたの問題は何ですか? –

+3

このコードはどのように期待どおりに機能しませんか?また、驚くべきSQLインジェクションの脆弱性があることに注意してください。 – David

+0

入力内の値を特定していない – BArthurs122

答えて

0

うーんです。私はこのケースでnot existsを考えています:

SELECT e.employeeName 
FROM ip_employee_availability a INNER JOIN 
    ip_employee e 
    ON a.employeeID = e.employeeID 
WHERE a.mon_morn = 'yes' AND 
     NOT EXISTS (SELECT 1 
        FROM ip_employee_request r 
        WHERE a.employeeID = r.employeeID AND 
         r.requestDate = $_POST['monday] 
       ); 

あなたはパラメータを使用しての代わりに、クエリ文字列で、ユーザーの入力値を埋め込むことにより、潜在的なSQLインジェクションの問題を解決することができます。

0

これはPHPのみの質問です。 移動する前に「未定義インデックス:月曜日」例外が発生する理由を理解する必要があります。 潜在的なSQLクエリーの問題を見しようとする前に、その部分の作業を行い、次の

<?php 
if (isset($_POST['monday'])) { 
    echo 'Hello ' . htmlspecialchars($_POST['monday']) . '!'; 
} else { 
    echo 'Something went wrong.'; 
} 
?> 

を試してみてください。 詳細情報はhereです。

一方、SQLクエリに関して:$_POST['monday']変数に問題があるため、'2016-03-27'のような静的な値で置き換えようとしましたか?それは動作しますか?

関連する問題