1

我在网页上有一个按钮,允许用户将该页面上的视频添加到他们的收藏夹列表中。这个按钮后面是一个表单和一些 php.ini 文件。PHP 代码使用会话变量来检索用户名。此信息用于从数据库中获取相关的用户 ID 并将其值存储在变量中。使用表单中的输入值,可以从视频数据库表中检索与相关视频相关的元组,并将视频标题和 URL 属性的值存储在变量中。然后代码检查用户是否已经将视频添加为“收藏夹”。检查收藏夹数据库实体中是否包含用户 ID 和视频 ID 的元组。如果两者都包含在数据库表的单行中,则用户已经添加了视频并收到了通知。否则,用户 id,视频 ID、视频标题和 URL 被插入到收藏夹数据库实体中,并通知用户该视频已添加,这一切在 chrome 或 safari 中都可以正常工作,但在 ie 或 firefox 中没有任何作用。数据库已更新,消息仅在 Chrome 和 safari 中显示。我已附上代码,请注意会话已在网页上的早期代码中启动。任何帮助将不胜感激。

    <div id="addfav">
    <form action="python.php" method="post">
        <input name="add" src="images/add.png" type="image"
        value="3">
    </form>
    <?php 
        $user=$_SESSION['user'];

        if ( isset( $_POST['add'] ) )
        {
            $vid = $_POST["add"];
            $sql = "SELECT * FROM `users` WHERE username = '$user'";
            $result = mysql_query($sql) or die(mysql_error());
            $row = mysql_fetch_array($result);
            $uid= $row['user_id'];

            $sql = "SELECT * FROM `Video` WHERE Video_id = '$vid'";
            $result = mysql_query($sql) or die(mysql_error());
            $row = mysql_fetch_array($result);
            $url=$row['URL'];
            $title=$row['Title'];

            $check = mysql_query("SELECT * FROM `favourites` WHERE Uid = '$uid' AND vid_id = '$vid'") or die (mysql_error());
            $r = mysql_num_rows($check);

            if ($r>=1)
            {
                echo "already added to favourites";

                echo '<script type="text/javascript">window.alert("Already added to favourites")</script>';
                //'<span style="color: red;" />Already added to favourites </span>' ;   
            }

            else 
            {  
                mysql_query("INSERT INTO `favourites` (`Uid`,
                `vid_id`,`url`,`title`) VALUES ('$uid',
                '$vid','$url','$title')")or die(mysql_error());
                echo "Added to favourites"; 
            }
        }
    ?>
</div>
4

3 回答 3

4

(只是一个调试想法)尝试将您的输入图像更改为这样的隐藏元素:

<form action="python.php" method="post">
     <!-- I don't remove this, to keep the image shown-->
     <input name="addimg" src="images/add.png" type="image"  value="3">

     <input type='hidden' name='add' value='3' />
 </form>

它现在有效吗?

于 2013-04-05T11:04:08.900 回答
0

PHP 在服务器端运行。这意味着无论您使用什么浏览器,它都能按预期工作。如果 IE 和 Firefox 可以毫无问题地连接到您的网站,那么问题肯定来自您编写的 HTML 代码。我认为问题出在您的form标签内,因为我认为这不是标准的,您可以使用GET通知您的表单已提交的方法,或使用hidden指示它的输入。

PS我认为您的代码存在安全问题。(SQL 注入)

于 2013-04-05T11:07:50.670 回答
0

当用户点击<input type="image" />浏览器时,将传递点击的坐标。Chrome 将发送三个值:

add.x = x_coord
add.y = y_coord
add = input_value (3 in your case)

请注意,在 php 中,您可以使用 / 访问/add.xadd.y(请参阅用下划线替换的点)$_POST["add_x"]$_POST["add_y"]

同时,IE 不会传递第三个值。这就是为什么你if ( isset( $_POST['add'] ) )永远不会返回真实的原因。选项是将视频 id 值放入某个隐藏字段并在其中使用其名称。您可以通过var_dump($_POST);在 php中轻松检查该行为

PS:

如果没有在 sql 查询中对它们进行清理,则永远不应使用在请求中收到的值。现在下面的代码对 sql 注入开放:

$sql = "SELECT * FROM `Video` WHERE Video_id = '$vid'";

mysql_real_escape_string在将值插入查询之前,您至少应该使用用户函数:

$sql = "SELECT * FROM `Video` WHERE Video_id = '".mysql_real_escape_string($vid)."'";

并查看上面链接的 php 手册页顶部的警告消息:不推荐使用 mysql_* 函数,您最好使用 PDO 或 mysqli 扩展。

于 2013-04-05T11:08:24.393 回答