1

很抱歉连续两天回来。昨天我花了一整天的时间在这个网站和其他网站上阅读,我只是卡住了。我发现唯一接近的是 C++。我正在为我的 DVD 和电影建立一个数据库,以便我和我的朋友可以按标题、演员等进行搜索。昨天在此处的帮助下,我能够使数据输入表单正常工作。其中一个字段是指向 IMDB 的超链接,以获取有关电影的信息。我希望能够将 URL 粘贴到表单中,但将其存储为 MySQL 中的完整超链接。当它出现在结果页面中时,它只是显示为一个链接,我可以单击并转到 IMDB 页面。

到目前为止,这是我想出的。如果我包含“target="_blank">,我会收到语法错误,但如果我把它拿出来,没有语法错误,但我会收到“错误 X”,没有错误代码,也没有进入数据库。有什么办法我能让这个工作吗?提前谢谢。

    //  Make link info into hyperlink for database

        $url = ('$_POST[link]');
    $f_link = "<a href= " . $url . "target="_blank">IMDB Movie Page</a>";

    //  Write data to table.    

    $sql="INSERT INTO movies (Movies, Rating, Genre, Year, Actors, Time, Notes, Viewed, BitRate, link)
        VALUES      ('$_POST[Movies]','$_POST[Rating]','$_POST[Genre]','$_POST[Year]','$_POST[Actors]','$_POST[    Time]','$_POST[Notes]','$_POST[Viewed]','$_POST[BitRate]', $f_link)";

    if (!mysqli_query($con,$sql))
   {
   die('Error: X ' . mysql_error($con));
    }
4

4 回答 4

0

当您想将引号包含在带引号的字符串中时,您需要转义引号。

$f_link = "<a href= " . $url . " target=\"_blank\">IMDB Movie Page</a>";

但你也应该在 URL 周围加上引号

$f_link = "<a href=\"" . $url . "\" target=\"_blank\">IMDB Movie Page</a>";

使用单引号括起来更容易,

$f_link = '<a href="' . $url . '" target="_blank">IMDB Movie Page</a>';

但请记住,PHP 不会解析此实例中的内容,这在该行中不是问题,因为您已经连接了 $url,这是更简洁的方式。

另请注意,您让自己对 SQL 注入持开放态度,允许将这些 $_POST 直接插入到 SQL 命令中。

于 2013-11-01T11:36:38.237 回答
0

我建议您将纯文本存储在$url没有 HTML 的数据库中。如果您以后想更改链接,则必须弄清楚如何更新所有记录...如果您将代码切换为仅存储 URL 而不在其周围添加 HTML,它将修复错误(未转义引用) .

当您从数据库中检索 URL 时,您可以用 HTML 包装它并避免这种痛苦。

您在短短几天内就开始做得很好 - 但您可能需要考虑 SQL 注入,因为即使您不认为有人会故意攻击您的页面,如果您不这样做,您可能会意外导致问题不要参数化您的 SQL - 例如,如果有人不小心'在表单中键入了 a。

于 2013-11-01T11:37:37.257 回答
0

通过以下方式替换您的代码:

$url = ($_POST['link']);
$f_link = "<a href= \" {$url}\" target=\"_blank\">IMDB Movie Page</a>";

//  Write data to table.    

$sql="INSERT INTO movies (Movies, Rating, Genre, Year, Actors, Time, Notes, Viewed, BitRate, link)
    VALUES
    ('"  . $_POST['Movies'] ."', '" . $_POST['Rating'] . "', '" . $_POST['Genre'] . "', '" . $_POST['Year']" . ', '" . $_POST['Actors'] ."', '" . $_POST['Time'] . "', '" . $_POST['Notes'] . "','" . $_POST['Viewed'] . "','" . $_POST['BitRate'] . "', '{$f_link}' )";

if (!mysqli_query($con,$sql))
{
     die('Error: X ' . mysql_error($con));
}
于 2013-11-01T11:47:08.227 回答
0

关于引号的问题:考虑以下 sql:

$sql = "SELECT * from table1 where id = god";

mysql 将 got 解释为字符串以外的东西('god' 与 got 不同)。

因此你应该输入

$sql = "SELECT * from table1 where id = 'god'";

或者

$value = 'god';
$sql = "SELECT * from table1 where id = '{$value}'";

或者

$value = 'god';
$sql = "SELECT * from table1 where id = '" .  $value . "'";

注意:如果值是数字(浮点数、整数、...),则不需要引号

$value = 12334;
$sql = "SELECT * from table1 where id = {$god}";
于 2013-11-01T13:46:48.930 回答