Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Передача переменной из js в php, посредством ajax (https://javascript.ru/forum/server/27971-peredacha-peremennojj-iz-js-v-php-posredstvom-ajax.html)

9xakep 01.05.2012 23:03

Передача переменной из 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

То есть запрос отправляется нормально, но в пхп странная проблема, где? В БД ничего не появляется?

Serg_pnz 01.05.2012 23:09

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);

Обратите внимание, что данные надо фильтровать перед вставкой.

9xakep 01.05.2012 23:25

Serg_pnz,
так чтоли:
mysql_query("INSERT INTO `users` WHERE `name`=".$login."AND `pass`=".$pass."(avatar) VALUES (".$a.")")

P.S. просто учился по одному уроку, там так было

Serg_pnz 01.05.2012 23:32

9xakep,
я ж вроде написал во второй строке...

9xakep 01.05.2012 23:39

Цитата:

Сообщение от nasqad
самый первый вариант девятки самый правильный из предложенных

какой девятки? :blink:
Цитата:

Сообщение от Serg_pnz
9xakep,
я ж вроде написал во второй строке...

Цитата:

Обратите внимание, что данные надо фильтровать перед вставкой.
Я это расценил, как: where должен стоять до заполнения
Цитата:

Сообщение от наскад
что это за странный запрос, какой еще where у инсерта

Как тогда добавить в БД данные, в нужный логин и пароль?

Serg_pnz 01.05.2012 23:51

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

micscr 02.05.2012 10:51

Цитата:

Сообщение от 9xakep
Как тогда добавить в БД данные, в нужный логин и пароль?

для изменения используется UPDATE
просто INSERT - для добавления новых записей.
Есть еще INSERT ... ON DUPLICATE. Если по ключу нет - добавит, иначе - изменит.

micscr 02.05.2012 11:03

Цитата:

if($_SERVER['REQUEST_METHOD']=='POST') senn2();

довольно странно выглядит. Делается на пыхе в общем так:
$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 должны где то сначала вычисляться.

9xakep 02.05.2012 11:55

Цитата:

Сообщение от Serg_pnz
3. Откуда берутся значения $login и $pass? Они точно существуют?
Попробуйте вывести так
echo 'INSERT INTO `users` (avatar) VALUES ('.$a.') WHERE `name` = '.$login.' AND `pass` = '.$pass;

Всё на месте?

$login и $pass беруться в самом начале, с помощью я захожу в аккаунт, вот сайт, введи в 1ое sdf, во 2ое we, и зайдешь.
Нет не все, логин и пароль от отсутствуют.ладно воспользуюсь советом 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?

micscr 02.05.2012 14:42

Цитата:

// false строкой сделал
вообще то так неверно, такая строка преобразуется в Истину.

Цитата:

echo 'ava is '.$ava; // false
смотри в фаербаге, вкладка "Сеть", идет ли у тебя 'ava' в $_POST.

Аякс у тебя тоже подозрительный, попробуй:
r.send('ava='+ava) // что посылаем


Часовой пояс GMT +3, время: 08:48.