2013-04-05 2 views
1

У меня есть кнопка на веб-странице, которая позволяет пользователям добавлять видео на эту страницу в свой список избранных. за этой кнопкой находится форма и некоторые php. PHP-код использует переменную сеанса для извлечения имени пользователя. Эта информация используется для получения соответствующего идентификатора пользователя из базы данных и сохранения его значения в переменной. Используя входное значение из формы, можно было получить кортеж из таблицы базы данных видео, относящейся к рассматриваемому видео, и сохранить значения заголовков видео и атрибутов URL в переменных. Затем код проверяет, добавил ли пользователь видео в качестве «избранного». Объект базы данных избранных проверяется на кортежи, содержащие идентификатор пользователя и идентификатор видео. Если оба они содержатся в одной строке таблицы базы данных, пользователь уже добавил видео и уведомляется об этом. В противном случае идентификатор пользователя, идентификатор видео, название видео и URL-адреса вставляются в объект базы данных избранного, и пользователю сообщается, что видео было добавлено . Все это прекрасно работает в хромированном или сафари, но ничего не делает в ie или firefox. База данных обновляется, и сообщение отображается только в Chrome и сафари. Я прикрепил код, обратите внимание, что сеанс уже запущен в более раннем коде на веб-странице. Будем очень благодарны любой помощи.php script не работает в 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 работает на стороне сервера. Неважно, какой у вас браузер, он будет работать. –

ответ

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

Хороший! который его отсортировал. Ура! Я бы проголосовал за вас, но у меня нет необходимой репутации! –

+0

Рад, если это вам помогло. – JoDev

0

PHP работает на стороне сервера. Это означает, что независимо от того, какой браузер вы используете, он работает так, как ожидалось. Проблема, безусловно, в HTML-кодах, которые вы написали, если IE и Firefox могут без проблем подключиться к вашему сайту. Я думаю, что проблема в вашем теге form, потому что я думаю, что это не стандарт, вы можете использовать метод GET, чтобы сообщить, что ваша форма отправлена, или используйте ввод hidden, указывающий его.

P.S. Я думаю, что ваш код имеет проблемы с безопасностью. (SQL Injection)

+0

Спасибо, используя скрытый вход сортировал его. –

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'])) никогда не вернется. Опция заключается в том, чтобы поместить значение идентификатора видео в какое-то скрытое поле и использовать его имя в этом случае. Вы можете легко проверить, что поведение, делая 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.

+0

спасибо, я знаю, что код открыт для SQL-инъекции, но просто хочу, чтобы он был функционален первым. Этот проект предназначен только для демонстрационных целей. –

Смежные вопросы