|
Передача переменной из js в php, посредством ajax
echo "
<input type='text' id='avatar'>
<input type='button' onclick='ava()' value='Установить аватар'>
<script>
function ava() {
var ava = document.getElementById('avatar').value
ava = encodeURIComponent(ava)
var r = new XMLHttpRequest; // создаем запрос
r.open('POST', 'login.php', true) // открываем
r.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // устанавливаем заголовок
r.send('login.php?ava='+ava) // что посылаем
}
</script>
";
function senn2() {
$a = $_POST['ava'];
mysql_query("INSERT INTO `users` (avatar) VALUES (\''.$a.'\') WHERE `name` = '$login' AND `pass` = '$pass'");
}
if($_SERVER['REQUEST_METHOD']=='POST') senn2();
В чем ошибка, вот примеры пост запроса: login.php?ava=asdf То есть запрос отправляется нормально, но в пхп странная проблема, где? В БД ничего не появляется? |
mysql_query("INSERT INTO `users` (avatar) VALUES (\''.$a.'\') WHERE `name` = '$login' AND `pass` = '$pass'");
ужоснах...
mysql_query('INSERT INTO `users` (avatar) VALUES ('.$a.') WHERE `name` = '.$login.' AND `pass` = '.$pass);
Обратите внимание, что данные надо фильтровать перед вставкой. |
Serg_pnz,
так чтоли:
mysql_query("INSERT INTO `users` WHERE `name`=".$login."AND `pass`=".$pass."(avatar) VALUES (".$a.")")
P.S. просто учился по одному уроку, там так было |
9xakep,
я ж вроде написал во второй строке... |
Цитата:
Цитата:
Цитата:
Цитата:
|
9xakep,
По пунктам тогда: 1. В Вашем коде синтаксис не верный 2. Про фильтрацию. Напрямую получаемые от пользователя данные вставлять нельзя - сломают сайт. Надо фильтровать, например intval, если число, заслешивать кавычки, чистить от хтмл-тегов. Попробуйте пока всё же мой вариант
mysql_query('INSERT INTO `users` (avatar) VALUES ('.$a.') WHERE `name` = '.$login.' AND `pass` = '.$pass);
3. Откуда берутся значения $login и $pass? Они точно существуют? Попробуйте вывести так
echo 'INSERT INTO `users` (avatar) VALUES ('.$a.') WHERE `name` = '.$login.' AND `pass` = '.$pass;
Всё на месте? 4. nasqad, в натуре, надо UPDATE SET |
Цитата:
просто INSERT - для добавления новых записей. Есть еще INSERT ... ON DUPLICATE. Если по ключу нет - добавит, иначе - изменит. |
Цитата:
$ava = (isset($_POST['ava'])) ? $_POST['ava'] : false;
if ($ava) {
$query = "UPDATE `users` SET `avatar`='%s' WHERE `name`='%s' AND `pass`='%s'";
$query = sprintf($query, mysql_real_escape_string($ava), mysql_real_escape_string($login), mysql_real_escape_string($pass));
$res = mysql_query($query);
//...
}
ну конечно переменные $login, $pass должны где то сначала вычисляться. |
Цитата:
Нет не все, логин и пароль от отсутствуют.ладно воспользуюсь советом micscr. Спасибо ============ Я кажется понял в чем проблема, я отправляю логин и пароль формой, на мою же страницу, после они теряются, может быть в этом проблема? ============ Можно ли на событие в js повесить ф-ию php? Я понимаю, что это бред, но все же? ============ micscr, Написал так:
$ava = (isset($_POST['ava'])) ? $_POST['ava'] : 'false'; // false строкой сделал
echo 'ava is '.$ava; // false
if ($ava) {
echo $row['name'].'<hr>'.$row['pass'];
$query = "UPDATE `users` SET `avatar`='%s' WHERE `name`='%s' AND `pass`='%s'";
$query = sprintf($query, mysql_real_escape_string($ava), mysql_real_escape_string($row['name']), mysql_real_escape_string($row['pass']));
mysql_query($query);
}
И в БД все добавилось, получается, что от js ничего не приходит что ли? И ошибка не в php? |
Цитата:
Цитата:
Аякс у тебя тоже подозрительный, попробуй:
r.send('ava='+ava) // что посылаем
|
| Часовой пояс GMT +3, время: 10:27. |
|