2013-04-05 57 views
1

我在网页上有一个按钮,允许用户将该页面上的视频添加到其收藏夹列表中。在这个按钮后面是一个表单和一些PHP。 PHP代码使用会话变量来检索用户名。该信息用于从数据库获取相关的用户标识并将其值存储在变量中。使用表单中的输入值,可以从视频数据库表中检索与所讨论视频相关的元组,并将视频标题和URL属性的值存储在变量中。代码然后检查用户是否已经将视频添加为“最喜爱的”。检查收藏夹数据库实体中是否包含用户标识和视频标识的元组。如果两者都包含在数据库表的单个行中,那么用户已经添加了视频并被通知这一点。否则,将用户标识,视频标识,视频标题和URL插入到收藏夹数据库实体中,并通知用户视频已添加 这一切在Chrome或Safari浏览器中均可正常工作,但在ie或Firefox中不做任何事情。数据库已更新,消息仅在Chrome和Safari浏览器中显示。我附上了代码,请注意会话已经在网页上的早期代码中开始了。任何援助将不胜感激。php脚本不能在Internet Explorer和Firefox中工作

<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> 
+3

PHP运行服务器端。不管你有什么浏览器,它都会运行。 – 2013-04-05 11:01:42

回答

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> 

请问现在的工作?

+0

不错!已经对它进行了排序。干杯!我会投你一票,但我没有所需的声望呢! – 2013-04-05 11:26:31

+0

很高兴,如果它帮助你。 – JoDev 2013-04-05 11:43:40

0

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

P.S.我认为你的代码有安全问题。 (SQL注入)

+0

谢谢,使用隐藏的输入对它进行排序。 – 2013-04-05 11:30:11

0

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

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

注意在PHP可以访问add.x/add.y值与$_POST["add_x"]/$_POST["add_y"](见点用下划线代替)

与此同时,IE将无法通过第三值。这就是为什么你的if (isset($_POST['add']))永远不会返回true。选项是将视频ID值放入某个隐藏字段并在该名称中使用if。 您可以轻松地在PHP做var_dump($_POST);检查行为

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扩展名。

+0

谢谢,我知道代码是开放的SQL注入,但只是想让它功能第一。该项目仅用于演示目的。 – 2013-04-05 11:29:28

相关问题