2017-04-10 5 views
1

少し助けが必要です。どうすればPHP値 "$ filtr_zamestnanci_ID"をsql_queryに取得できますか。コードはここにあります:mysqlクエリでループによって生成されたphp変数の使い方

<?php 
if (isset($_POST["filtr_zamestnanci_ID"])) { 
    for ($a = 0; $a < count($_POST["filtr_zamestnanci_ID"]); $a++) { 
     $filtr_zamestnanci_ID .="AND companies_text_records_user_ID = '".$_POST["filtr_zamestnanci_ID"][$a]."'&nbsp;"; 
    } 
}else { 
    $filtr_zamestnanci_ID = ""; 
} 

echo "filtr_zamestnanci_ID :".$filtr_zamestnanci_ID; 

mysql_query("SET CHARACTER SET utf8"); 
$sql_1 = 
    mysql_query("SELECT * FROM companies_text_records 
     LEFT JOIN companies ON companies_text_records_company_ID = company_ID 
     LEFT JOIN login_users ON user_id = companies_text_records_user_ID 
     WHERE companies_text_records_relative_to = '0' 
     '".$filtr_zamestnanci_ID."' 
     ORDER BY companies_text_records_ID DESC"); 
?> 

私はループなしですべてを渡しても問題ありません。しかし、ループからの出力はまったく動作しません。 "$ filtr_zamestnanci_ID"という形式のものがありますか?

+3

のために囲まれた単一引用符を除く)AND

$filtr_zamestnanci_ID .=" AND companies_text_records_user_ID = '".$_POST["filtr_zamestnanci_ID"][$a]."'"; 

2の前にスペースを与えます新しいコードで](http://stackoverflow.com/questions/12859942/)。それらはもはや維持されておらず(正式に推奨されていません)(https://wiki.php.net/rfc/mysql_deprecation)。 [red box](http://php.net/manual/en/function.mysql-connect.php)を参照してください。代わりに[* prepared statements *](https://en.wikipedia.org/wiki/Prepared_statement)について学び、[PDO](http://php.net/pdo)または[MySQLi](http:// php.net/mysqli) - [この記事](http://php.net/manual/en/mysqlinfo.api.choosing.php)は、あなたに最適なものを決定するのに役立ちます。 –

+3

あなたのスクリプトは[SQLインジェクション攻撃](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)の危険にさらされています。[Little Bobby Tables](http://bobby-tables.com/)[あなたが入力を逃れている場合でも、その安全ではありません!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around -mysql-real-escape-string)[prepared parameterized statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)を使用します。 –

+0

mysql_queryをforループに入れます.... –

答えて

1

以下を試してください。また、お使いのSQLインジェクションの問題を整理します:

<?php 
    $conn = new PDO("mysql:host=$hostname;dbname=$db_name;charset=utf8mb4", $db_username, $db_password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

if (isset($_POST["filtr_zamestnanci_ID"])) { 
    for ($a = 0; $a < count($_POST["filtr_zamestnanci_ID"]); $a++) { 
     $filtr_zamestnanci_ID = $_POST["filtr_zamestnanci_ID"][$a]; 

     $stmt = $conn->prepare("SELECT * FROM companies_text_records 
          LEFT JOIN companies ON companies_text_records_company_ID = company_ID 
          LEFT JOIN login_users ON user_id = companies_text_records_user_ID 
         WHERE companies_text_records_relative_to = '0' 
         AND companies_text_records_user_ID = :company_text_records_user_id 
         ORDER BY companies_text_records_ID DESC"); 

     if ($stmt->execute(array(':company_text_records_user_id' => $filtr_zamestnanci_ID))) { 
      while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
       $someField = $row['columnFromDatabase']; 
      } 
      echo 'success'; 
     } 
    } 
}else { 
    $filtr_zamestnanci_ID = ""; 
} 
?> 
0

警告するmysql_query、は、mysql_fetch_array、にmysql_connectなど。拡張子はPHP 5.5.0で非推奨された、そしてそれは、PHP 7.0.0で削除されました。 代わりに、MySQLiまたはPDO_MySQL拡張を使用する必要があります。

1)[あなたは `mysql_ *`関数を使うべきではありません、FYIさらに追加where句'".$filtr_zamestnanci_ID."'

"SELEC‌​T * FROM companies_text_records LEFT JOIN companies ON companies_text_records_company_ID = company_ID LEFT JOIN login_users ON user_id = companies_text_records_user_ID WHERE companies_text_records_relative_to = '0' ".$filtr_zamestnanci_ID." ORDER BY companies_text_records_ID DESC" 
関連する問題