2016-09-10 4 views
0

私はムービーデータベースに1つのフィールドに複数のアクターがあり、カンマで区切られ、以下のコードを使用してフェッチしています。私の要求は、フェッチされたすべてのアクターをリンクすることです。それぞれの俳優をクリックすると、その映画のリストが表示されます。 私は1つのフィールドにすべての俳優を有し、かつ、カンマで区切られた、別のURLでそれらのそれぞれをリンクするために苦労し各パラメータの "LIKE%columname%"を使用してフェッチされたデータをリンクするPHP

<?php 
require('connect'); 

$filmActor=$_GET['filmActor']; 
$sql ="SELECT * FROM films WHERE filmActor LIKE '%$filmActor%' LIMIT 0 , 5;"; 

$result = mysqli_query($conn, $sql); 
while($row = mysqli_fetch_array($result)) 
{ 
$filmActor=$row['filmActor']; 
$filmName=$row['filmName']; 
$url=$row['url']; 
echo " 
    <a href='$url.html'>$filmName</a>: $filmActor<br> 
    "; 
} 
mysqli_free_result($result); 
mysqli_close($conn); 
?> 

私は好きで取得しています出力しておりますので:期待 enter image description here

enter image description here

/actor.php?filmActor=Tom_Hanks、/actor.php?filmActこのパラメータを渡したいですか?または= Emma_Thompsonなどは、彼らが取り組んでいる各アクターの映画を置き換えます。

+0

あなたは '$ filmActor'にリンクを張りませんでした。' $ filmName'に対して何をしましたか?また、SQLインジェクションも可能です。 – chris85

+0

さて、あなたの更新ごとにyouer DBを正規化する必要があります。 http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that-bad/3653574あなたは '、'で爆発するか、 CSVも同様に機能します。 http://php.net/manual/en/function.str-getcsv.php – chris85

+0

@ chris85私はこのようにすることができますが、俳優は1つのフィールドにあるので、各アクターへの別個のリンクを与えません。$filmActor RRPANDEY

答えて

2

このスクリプトは機能するはずです。 $ row ['filmActor']をとり、すべてのアクターを '、'で配列に分割し、1つずつ出力します。

これはもっと良い方法ですが、これはうまくいくはずです。 また、SQLインジェクションを防ぐために、 "mysqli_real_escape_string"をGET入力 "$ _GET ['filmActor']"に追加しました。

<?php 

require('connect'); 

// Escape the input from the user, preventing SQL injections 
$filmActor = mysqli_real_escape_string($conn,$_GET['filmActor']); 
$sql ="SELECT * FROM films WHERE filmActor LIKE '%$filmActor%' LIMIT 0 , 5;"; 

$result = mysqli_query($conn, $sql); 
while($row = mysqli_fetch_array($result)) 
{ 
    $filmActor=$row['filmActor']; 
    $filmName=$row['filmName']; 
    $url=$row['url']; 
    echo "<a href='$url.html'>$filmName</a>:"; 

    // Make an array of the actors by splitting them by ',' 
    $actorsArray = explode(',',$filmActor); 

    // Loop the array 
    foreach ($actorsArray as $key => $actor) 
    { 

     // Just trim the space in front of name in case there is any 
     $actor = trim($actor); 

     // Check if the current key is == to the last key in the array 
     // so it wont make an ',' in the end of the actors. 
     if ($key == (count($actorsArray)-1)) 
      echo "<a href='/actor.php?filmActor=$actor'>$actor</a>"; 
     else 
      echo "<a href='/actor.php?filmActor=$actor'>$actor</a>, "; 
    } 
} 
mysqli_free_result($result); 
mysqli_close($conn); 

どのように機能するか教えてください。 そして、タドマンが上記のコメントで述べたように、「$ _POSTや$ _GETのデータを直接クエリに入れないでください。誰かがあなたのミスを悪用しようとすると、非常に危険です。

希望すると助かります!

+0

シメオン、これは魅力のように働きます。ありがとうございます。質問に「$ _POSTや$ _GETデータを直接入れないでください。誰かがあなたのミスを悪用しようとすると、非常に危険です。どのように私はPHPのエキスパートではないので、これを取り除くことができます – RRPANDEY

+1

それは、ユーザー名、パスワード、電子メール(この場合はfilmActor)のような生のユーザー入力を取得すると、入力が安全。あなたはmysqli_real_escape_stringまたはprepared statement(http://www.w3schools.com/php/php_mysql_prepared_statements.asp)を使用してそれを行います –

+0

ありがとう、私は場所のほとんどでこれを気にしました、また私が逃したかどうかをチェックしますプロジェクトのどこかで準備されたステートメント。 – RRPANDEY

関連する問題