php - 使用 "LIKE %columname%"为每个 PHP 参数链接获取的数据

标签 php mysql

我的电影数据库中有 Actor 字段,其中一个字段中有许多 Actor ,用逗号分隔,并使用下面的代码获取它们。我的要求是链接所有获取的 Actor 。单击每个 Actor 都会进入他们的电影列表。 由于我将所有参与者都放在一个字段中并用逗号分隔,因此很难将每个参与者与单独的 url 链接起来

<?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?filmActor=Emma_Thompson 等将取代他们所制作的每个 Actor 的电影。

最佳答案

这个脚本应该可以工作。它采用 $row['filmActor'] 并通过 ',' 将所有 Actor 分成一个数组,然后我们将它们逐一打印出来。

请记住,这可以通过更好的方式完成,但这应该可行。 此外,我还在 GET 输入“$_GET['filmActor']”中添加了“mysqli_real_escape_string”以防止 SQL 注入(inject)。

<?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);

让我知道效果如何。 正如 tadman 在上面的评论中所说的“永远不要将 $_POST 或 $_GET 数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。”

希望对您有所帮助!

关于php - 使用 "LIKE %columname%"为每个 PHP 参数链接获取的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39431181/

相关文章:

php - 查询中两个时间戳的比较

php - 如何解决这个模棱两可的问题?

javascript - 如何对另一个文件进行 POST 并将该文件加载到主文件中?

mysql - 按最新时间戳分组和过滤

java - 如何将本地 Google Cloud SQL stub 连接到 MySQL DB

PHP 脚本未返回预期的 JSON 响应

php - 强制某人让他的子类实现接口(interface)的方法

php - 我应该如何从 php 传递的 $id 的两个表中检索正确的信息

PHP 在本地抓取和存储输出

php - 等效于 PHP 格式 ('%R%a.%h' );在 MySQL 中