Обновление значения MySQL через переменную Img Src, включая jQuery - PullRequest
1 голос
/ 22 августа 2010

Спасибо всем, кто помог мне за последние несколько дней .. К сожалению, я работал, поэтому я не мог вернуться к вам. Я включил некоторый код в то, что, как я думал, будет работать, но по какой-то причине приведенный ниже код не будет обновляться в моей базе данных SQL. Я предоставлю код и его вывод, если кто-то может скопировать код и посмотреть, почему он не работает ... Это действительно делает мою голову! Ха-ха!

(Соединение с таблицей MySQL db + работает нормально).

// admin.php
<a href="#" id="chngeHref" /><img src="<?php echo "image.php?url=" . $row[2]; ?>?tid=<?php echo $row[0]; ?>&opn=<?php echo $row[1]; ?>" id="chnge" /></a>
// image.php?url=image.jpg?tid=3&opn=1

Мне посоветовали сделать это таким образом, чтобы мне было легче проходить переменные (tid и opn) в процессе.

// update.php

$tid  = $_GET['tid'];
$opn  = $_GET['opn'];

if ($opn == "0") { $opn = "1"; } elseif ($opn == "1") { $opn = "0"; } 

mysql_query("UPDATE catalogue SET opn = $opn WHERE tid = $tid ; ");   

mysql_close(); 

// it's just a simple script to change a variable from 1 to 0 or 0 to 1 where tid = a specific number...

У меня все мои jQuery вещи спрятаны в прекрасный маленький файл, потому что его много ...

// navigate.js


$.extend({
 getUrlVars: function() {
  var vars = {};
  var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { vars[key] = value; });
 return vars;
 }
});


$("#chngeHref").click(function() {
 var tid = $.getUrlVars()['tid'];
 var opn = $.getUrlVars()['opn'];

 $.ajax({
  type: "POST",
  url: "update.php",
  data: "tid="+ tid +"& opn="+ opn,
  success: function(){ 
   $('#chnge').fadeTo('slow',0.4);
   }
  });
 });    

.extend код, который я нашел в сети, который находит параметр и значение всех тех в адресной строке. Я думаю, что это может быть моя проблема, потому что верхний код никогда не отправляет его в адресную строку, он отправляется через jQuery в файл update.php.

Я могу только заранее поблагодарить всех, кто может помочь в этом.

Phillip.

1 Ответ

0 голосов
/ 22 августа 2010

Здесь есть несколько проблем, связанных с уязвимостью SQL-инъекций, о которой упоминает Натан, а именно, POSTing, поэтому вам нужно использовать $_POST вместо $_GET для получения ваших переменных. Также у вас есть дополнительное место в блоке данных, это:

data: "tid="+ tid +"& opn="+ opn,

должно быть:

data: "tid="+ tid +"&opn="+ opn,

или немного чище, используя объектную нотацию (чтобы она также правильно кодировалась):

data { tid: tid, opn: opn },

Для вопроса SQL-инъекции вместо этого:

mysql_query("UPDATE catalogue SET opn = $opn WHERE tid = $tid ; "); 

По крайней мере, экранировать значения, как это:

$tid = mysql_real_escape_string($_POST['tid']);
$opn = mysql_real_escape_string($_POST['opn']);

Или перейти к параметризованному маршруту запроса , что я бы предпочел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...