2013-04-05 148 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

相關問題