[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не возвращает значение переменной
SoMeOnE
Всем првиет.
Такая проблема
Есть файл index.php


Свернутый текст
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>test</title>

<
script src="jquery-1.5.2.min.js" type="text/javascript"></script>
<
script src="test.js" type="text/javascript"></script>

</
head>

<
body>
<
form action="?" method="post">
<
textarea name="mes" cols="40" rows="10"><?php echo htmlspecialchars($mes);?></textarea><br />
<
input id="submit" name="ok" type="submit" />
</
form>

<
div id="button">button<div>

<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);

$mes = !empty($_POST['mes']) ? $_POST['mes'] : null;

if(isset($_POST['ok'])){
$test = !empty($_POST['test']) ? $_POST['test'] : 5;
print $test;
}
?>

И соответственно js скрипт с ajax запросом при сабмите

Свернутый текст
$(document).ready(function(){

$('#submit').click(function(){
var test = 7;
alert (test);
$.ajax({
type: "POST",
url: "index.php",
data: {test : test},
success: function(data){
$('#result').html(data);
},
error: function() {
alert( "Data not Saved" );
}
}
);
});

});


Я хочу вернуть переменную test обратно в index.php.
Но ее значение всегда равно 5, хотя в js она равна 7...)
Что я не так делаю?



Спустя 1 час, 54 минуты, 27 секунд (28.07.2011 - 10:55) ApuktaChehov написал(а):
Вы перед вашими проверками в PHP сделайте var_dump($_POST);, и посмотрите что вам аякс прислал. Если 7, значит ищите косяк в php скрипте, а если ничего не прислала, ковыряйте аякс.

Спустя 47 минут, 39 секунд (28.07.2011 - 11:43) SoMeOnE написал(а):
7 не вернул. И аякс тоже после определения перемнной в js возвращает
вот это.
error: function() {
alert( "Data not Saved" );
}

В чем может быть проблема

Спустя 11 минут, 34 секунды (28.07.2011 - 11:54) ApuktaChehov написал(а):
Фаербаг используйте, там все видно.

Спустя 19 минут, 8 секунд (28.07.2011 - 12:14) SoMeOnE написал(а):
firebug вот это показывает
uncaught exception: [Exception... "prompt aborted by user" 
nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"
location: "JS frame :: resource://gre/components/nsPrompter.js :: openTabPrompt :: line 468" data: no]

Что он имеет в виду?)

Спустя 4 минуты, 15 секунд (28.07.2011 - 12:18) ApuktaChehov написал(а):
Ну чего, написано что вызов отменен пользователем.
Почему хз. Или ошибка в вашем коде, а так как я с JQ работал крайне мало, то сразу на глаз не определю, или внутри JQ. Или еще что хз.

Вообщем я сдаюсь. Может кто еще подскажет...

Спустя 13 минут, 37 секунд (28.07.2011 - 12:31) SoMeOnE написал(а):
Самому не получается разобраться...
Буду ждать...)

Спустя 12 минут, 51 секунда (28.07.2011 - 12:44) ApuktaChehov написал(а):
Вот нагугли:
PROBLEM SOLVED: so in the html markup the form that holds the fields of data should have an

onsubmit="return false;"


Смотрите у вас с формой html косяк. По ходу она туда-же данные шлет сразу же.

Спустя 5 минут, 12 секунд (28.07.2011 - 12:49) alex12060 написал(а):

$(document).ready(function(){

$('#submit').click(function(e){
var test = 7;
e.preventDefault();

$.ajax({
type: "POST",
url: "index.php",
data: "test="+test+"&ok=1",
success: function(data){
$('#result').html(data);
},
error: function() {
alert( "Data not Saved" );
}
}
);
});

});

Спустя 8 минут, 16 секунд (28.07.2011 - 12:58) killer8080 написал(а):
SoMeOnE
я бы удивился если бы оно ещё и работало :)
1 аякс запрос должен обрабатываться отдельным скриптом, а не самим же index.php;
2 вызов аякса навешен на событие onclick сабмита, то есть по нажатия браузер вначале шлёт аякс запрос и следом не дожидаясь ответа, происходит полная перезагрузка страницы, действие сабмита никто же не отменял ;)
3 почему обработка принятых данных идёт после вывода хтмл?! Как по твоему должен отработать header(), и переменная $mes используется раньше чем объявляется, надо хотя бы как то так
<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);

$mes = !empty($_POST['mes']) ? $_POST['mes'] : null;


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>test</title>

<
script src="jquery-1.5.2.min.js" type="text/javascript"></script>
<
script src="test.js" type="text/javascript"></script>

</
head>

<
body>
<
form action="" method="post">
<
textarea name="mes" cols="40" rows="10"><?php echo htmlspecialchars($mes);?></textarea><br />
<
input id="submit" name="ok" type="submit" />
</
form>

<
div id="button">button<div>
<?php
if(isset($_POST['ok'])){
$test = !empty($_POST['test']) ? $_POST['test'] : 5;
print $test;
}
?>

Спустя 2 минуты, 3 секунды (28.07.2011 - 13:00) SoMeOnE написал(а):
alex12060
После Вашего кода не срабатывает ничего в
 if(isset($_POST['ok'])){
var_dump($_POST);
// echo '--------'.$_POST['test'];
$test = !empty($_POST['test']) ? $_POST['test'] : 5;
}

Даже не печатает ничего

Спустя 7 минут, 32 секунды (28.07.2011 - 13:07) SoMeOnE написал(а):
killer8080
Насчет первого тоже сомневался что это будет воможно.
Спасибо за объяснения (второй пункт)
На счет третьего. Это все же тестовый пример. В настоящей работе все куда правильней)))

Если на какое то события подвешу ajax. Определю переменную в отдельном php скрипте.
В индексе после нажатия submit он увидит ее?

Спустя 3 минуты, 59 секунд (28.07.2011 - 13:11) killer8080 написал(а):
SoMeOnE
можешь заблокировать сабмит формы
<form action="" method="post" onsubmit="return false;" >
тогда ответ аякса вернётся на страницу :)

Спустя 4 минуты, 11 секунд (28.07.2011 - 13:16) SoMeOnE написал(а):
killer8080
А как тогда обрабатывать
	if(isset($_POST['ok']))

Спустя 2 минуты, 11 секунд (28.07.2011 - 13:18) killer8080 написал(а):
Цитата (SoMeOnE @ 28.07.2011 - 13:16)
А как тогда обрабатывать
if(isset($_POST['ok']))

ну так у тебя же данные яаксом подгружаются, никакого $_POST['ok']) там не будет.


Точнее будет только у юзеров с отключённым JS

Спустя 15 минут (28.07.2011 - 13:33) SoMeOnE написал(а):
killer8080
Я что то не разобрался)
А как тогда проверить переменную. Я же хочу что бы при отправке формы js еще одну переменную определил и вернул в скрипт.
Через что проверку делать?

И если можно этот вопрос так и остался...)
Цитата
Если на какое то события подвешу ajax. Определю переменную в отдельном php скрипте.
В индексе после нажатия submit он увидит ее?

Спустя 9 минут, 28 секунд (28.07.2011 - 13:42) killer8080 написал(а):
Цитата (SoMeOnE @ 28.07.2011 - 13:33)
Если на какое то события подвешу ajax. Определю переменную в отдельном php скрипте.
В индексе после нажатия submit он увидит ее?

нет не увидит, страница же перезагрузиться (если сабмит не отменён JS).
Цитата (SoMeOnE @ 28.07.2011 - 13:33)
А как тогда проверить переменную. Я же хочу что бы при отправке формы js еще одну переменную определил и вернул в скрипт.
Через что проверку делать?

не совсем понял что ты хочешь сделать? Что за переменная и какая должна быть проверка?
То что можно проверить на стороне клиента, нет смысла передавать аяксом.

Спустя 1 час, 3 минуты, 18 секунд (28.07.2011 - 14:45) SoMeOnE написал(а):
killer8080
В моем настоящем примере юзер до сабмита проводит определенные действия. И обрабатывается это на jquery который подключен к странице.
При успешном выполнении этого действия должна определиться перемнная какая нибудь, которая примет значение true.
После этого юзер нажмет сабмит. Если этого true не будет, то и ничего не будет))) А если будет тогда будет выполнено то, что в условии $_POST['ok']. В этом же условии индекс должен видеть это переменная true или нет.
Как это можно сделать?

Спустя 19 минут, 34 секунды (28.07.2011 - 15:05) SoMeOnE написал(а):
killer8080
Может ее после определения в отдельном скрипте записать в сессию. А после уничтожить.
Тогда после перезагрузки увидит?


Или как это надо сделать более правильным способом?

Спустя 1 час, 11 минут, 38 секунд (28.07.2011 - 16:17) killer8080 написал(а):
Цитата (SoMeOnE @ 28.07.2011 - 14:45)
моем настоящем примере юзер до сабмита проводит определенные действия. И обрабатывается это на jquery который подключен к странице.
При успешном выполнении этого действия должна определиться перемнная какая нибудь, которая примет значение true.

ну так в обработчике клика проверяй эту переменную, например так

var formChecked = false;

// тут код который делает нужные проверки

$(document).ready(function(){

$('#submit').click(function(){
if(!formChecked){
alert('форма не заполнена');
return false;
}

var test = 7;
alert (test);
$.ajax({
type: "POST",
url: "load.php",
data: {test : test},
success: function(data){
$('#result').html(data);
},
error: function() {
alert( "Data not Saved" );
}
}
);
});

});

Спустя 1 час, 38 минут, 52 секунды (28.07.2011 - 17:56) SoMeOnE написал(а):
Нет мне не совсем это нужно. У меня переменная определяется в js при успешном действие юзера и должна быть видна в php.
Сделал вот так. Прикрепляю js к отдельному событию (не к сабмит)
Свернутый текст
	$('#test').click(function() {
var test= true;
alert (test);
$.ajax({
type: "POST",
url: "insert.php",
data: ({
test: test
}),
success: function(msg){
$('#result').html(msg);
alert('Data Saved')
},
error: function() {
alert( "Data not Saved" );
}
}
);
});


В отдельном скрипте insert.php заношу переменную в сессию.
session_start();
$_SESSION['test'] = $_POST['test'];


После этого в сабмите проходит проверку перменная сессии. После ее уничтожаю.
Это нормально? Или слишком извращенно?

Спустя 1 час, 31 минута, 10 секунд (28.07.2011 - 19:27) killer8080 написал(а):
SoMeOnE
для начала нужно разобраться для чего вообще нужны проверки.
Проверка введённых данных на стороне клиента делается исключительно для юзабилити и не для чего более! то есть для того чтоб пользователю не приходилось многократно заполнять форму при ошибках и тратить время на перезагрузку страницы, и всё.
Проверка на стороне сервера должна быть всегда, не зависимо от наличия js проверок. Обеспечение безопасности и корректности сохраняемых данных, всегда должно быть на серверной стороне. Юзер может просто отключить JS или запрос вообще может послать бот, поэтому доверять полученным данным нельзя никогда. Думаю ответил на твой вопрос smile.gif
Нет смысла делать проверку JS-ом и сообщать об этом серверу, сервер сам должен всё проверять.

Спустя 1 день, 12 часов, 15 минут, 40 секунд (30.07.2011 - 07:42) SoMeOnE написал(а):
killer8080
Не было целый день...
Спасибо за разъяснения принципов, но все же хотелось бы уточнить?)

Допустим кто то разработал игру на js. И прикручивает к этой игре статистику. Т.е. должен воспользоваться ajax-ом. Он же должен посылать данные из js в php.
Как он им доверяет. Что запрос не бот и тд...?
А то получается, что js это зло и только...)

Спустя 5 часов, 42 минуты, 2 секунды (30.07.2011 - 13:24) killer8080 написал(а):
Цитата (SoMeOnE @ 30.07.2011 - 07:42)
Допустим кто то разработал игру на js. И прикручивает к этой игре статистику. Т.е. должен воспользоваться ajax-ом. Он же должен посылать данные из js в php.
Как он им доверяет. Что запрос не бот и тд...?

для этого есть сессии smile.gif
Цитата (SoMeOnE @ 30.07.2011 - 07:42)
А то получается, что js это зло и только...)
этого я не говорил. JS находиться на стороне клиента, а потому нельзя на него полагаться в вопросах безопасности, он нужен исключительно для удобства пользователей.

Спустя 4 часа, 59 минут, 12 секунд (30.07.2011 - 18:24) SoMeOnE написал(а):
Цитата (killer8080 @ 30.07.2011 - 10:24)
Цитата (SoMeOnE @ 30.07.2011 - 07:42)
Допустим кто то разработал игру на js. И прикручивает к этой игре статистику. Т.е. должен воспользоваться ajax-ом. Он же должен посылать данные из js в php.
Как он им доверяет. Что запрос не бот и тд...?

для этого есть сессии smile.gif

Знаю, что надоел, но можно поподробней...?)
Как я понимаю это нужно каждому пользователю давать какой нибудь id записывать в сессию, а потом при запросе на сервер инфы смотреть кто присылает ее?

Спустя 15 минут, 32 секунды (30.07.2011 - 18:39) killer8080 написал(а):
Цитата (SoMeOnE @ 30.07.2011 - 18:24)
Знаю, что надоел, но можно поподробней...?)
Как я понимаю это нужно каждому пользователю давать какой нибудь id записывать в сессию, а потом при запросе на сервер инфы смотреть кто присылает ее?

А по конкретней, что за задача?

Спустя 2 часа, 14 минут, 43 секунды (30.07.2011 - 20:54) SoMeOnE написал(а):
Ну таже самая)
Есть игра на jquery. При успешном проходе игры. Я по формуле рассчитываю сколько очков набрал юзер. После ajax-ом посылаю данные на сервер и заношу в базу. В данном случае я хочу использовать игру немного для других целей. Всего лишь при успешном проходе определить переменную и послать на сервер. В зависимости от того переменная true или нет выполнять, или не выполнять действия. Как обезапаситься от псевдо запроса (или от бота)?

Спустя 2 часа, 38 минут, 1 секунда (30.07.2011 - 23:32) killer8080 написал(а):
я так понимаю игроки регистрируются перед игрой? То есть нужна защита от читерства?
На 100% защитится наверно не получиться. Можно сделать привязку сессий к ip и user-agent. В начале игры посылать аякс запрос серверу, в ответ сервер выдаст уникальный ключ и зафиксирует время выдачи ключа. После прохождения уровня процесс повторяется. Если запросы проходят быстрее минимального времени прохождения уровня в игре - значит читер, принимаем соответствующие меры. Ну это как вариант smile.gif


PS а этот вопрос случайно не относится к конкурсу ph34r.gif

Спустя 1 час, 8 минут, 27 секунд (31.07.2011 - 00:40) SoMeOnE написал(а):
killer8080
К конкурсу имеет немного косвенное отношения так как там тоже использую ajax

Конекретное отношение имеет к моему приложению на фб (если интересно http://apps.facebook.com/mobilepuzzle/). И так понимаю мне еще очень многое предстоит узнать, что бы хотя бы немного защитить базу)))

Спасибо за ответы.

Спустя 9 часов, 14 минут, 17 секунд (31.07.2011 - 09:55) killer8080 написал(а):
SoMeOnE
да не за что smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.