我的电影数据库中有actors字段,在一个字段中有多个actor,用逗号隔开,并使用下面的代码提取它们。我的要求是链接所有获取的演员。单击每个演员将进入他们的电影列表。
由于我将所有演员都集中在一个字段中,并用逗号分隔,因此很难用单独的网址链接每个演员
<?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);
?>
输出我越来越像:
预期:
要传递此参数:
/actor.php?filmActor=Tom_Hanks,/actor.php?filmActor=Emma_Thompson等将取代他们制作的每部演员电影。
最佳答案
该脚本应该可以工作。它使用$ row ['filmActor']并将所有演员按','分成一个数组,然后我们将它们一个接一个地打印出来。
请记住,这可以做得更好,但这应该可行。
另外,我在GET输入“ $ _GET ['filmActor']”中添加了“ mysqli_real_escape_string”以防止SQL注入。
<?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数据直接放入查询中,如果有人试图利用您的错误,这将非常有害。”
希望能帮助到你!