无法将URL转换为超链接以存储在MySQL中

时间:2013-11-01 11:33:26

标签: php mysql hyperlink

抱歉连续两天回来。我昨天花了整整一天在这个网站和其他人上阅读,我只是被卡住了。我发现最接近的是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 个答案:

答案 0 :(得分:0)

如果要将它们包含在带引号的字符串中,则需要转义引号。

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

但你也应该引用网址

$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命令中。

答案 1 :(得分:0)

我建议您在没有HTML的情况下将普通$url存储在数据库中。如果您以后想要更改链接,则必须确定如何更新所有记录...如果您将代码切换为仅存储URL而不在其周围添加HTML,则会修复错误(未转义的引用)

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

你在这几天开始做起来很棒 - 但你可能需要考虑SQL注入,即使你不认为有人会故意攻击你的页面,你可能会意外地导致问题如果你没有参数化你的SQL - 例如,如果有人不小心在表单中输入'

答案 2 :(得分: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));
}

答案 3 :(得分:0)

关于报价的问题: 考虑以下sql:

$sql = "SELECT * from table1 where id = god";
除了字符串之外,mysql的解释还有其他一些东西(&#39;上帝&#39;与获得的不同)。

因此你应该输入

$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 . "'";

注意:如果值是数字(flaot,整数,...),那么你不需要报价

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