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 03.05.2012 10:27

Serg_pnz,
не хочу использовать jquery, внутренне отторжение к нему) Хочу на чистом js писать. Хотя знаю, что там это все делается без геморроя
=========
Сейчас прочитал про сессии(написано: При использовании сессий данные сохраняются во временных файлах на сервере.), вопрос: насколько они сохраняются?

9xakep 03.05.2012 10:29

Цитата:

Сообщение от Serg_pnz
И да - посмотреть бы все файлы.

если хочешь весь код увидеть, пожалуйста:
<body>
<form action='login.php' method='POST'>
<input type='text' value='<?php echo $_POST['login'] ?>' name='login'>
<input type='text' name='pass' value='<?php echo $_POST['pass'] ?>' >
<input type='submit' value='Зайти'>
</form></body>
<?php 
function senn() {
$login = $_POST['login'];
$pass = $_POST['pass'];
$conn = mysql_connect('localhost', 'gmoryes_login', '*********');
if(mysql_select_db('gmoryes_login', $conn))
{
	$res = mysql_query("SELECT `name`,`pass` FROM `users` WHERE `name` = '$login' AND `pass` = '$pass'");
	$row = mysql_fetch_assoc($res); 
		if($row['name']!='' && $row['pass']!= '')
		{
			if($row['avatar']!='')
			{
			echo "у вас уже есть аватар, это: ".$row['avatar'];
			}
		else {  
			echo "
			<script>
 			document.body.innerHTML = ''
			</script>
			";
			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('ava='+ava) // что посылаем
			}
			</script>
			";
			function s(){
			$ava = (isset($_POST['ava'])) ? $_POST['ava'] : false;
			
			if ($ava) {
			echo 'ava is '.$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) or die('Error:' . mysql_error());
  			}	
			else {
			echo 'else';
			}
			}
			if($_SERVER['REQUEST_METHOD']=='POST') s();
		     }
		}
}
}
if($_SERVER['REQUEST_METHOD']=='POST') senn();
?>

micscr 03.05.2012 11:12

о жизни сессии

код конечно... :) . Старайся сразу отделять логику от вывода. js файлы отдельно должны идти.

Не работает потому что при аяксе ты не передаешь
$login = $_POST['login'];
$pass = $_POST['pass'];


и включи в php.ini
error_reporting = E_ALL
, много полезного будешь видеть

9xakep 03.05.2012 13:23

micscr,
Цитата:

Сообщение от micscr
код конечно...

поверь это еще не самый) А вообще это пока только первые php скрипты, в будущем надеюсь будет лучше :)
Цитата:

Сообщение от micscr
Не работает потому что при аяксе ты не передаешь
$login = $_POST['login'];
$pass = $_POST['pass'];

так я же их не при аяксе передавал, это я принимал формой
Цитата:

Сообщение от micscr
и включи в php.ini
error_reporting = E_ALL
, много полезного будешь видеть

погуглил, оказывается мой хостинг, как я понял не предоставляет возожности редактировать php.ini :(

micscr 03.05.2012 15:06

функцией уровень ошибок можно выставить:
http://php.net/manual/en/function.error-reporting.php

да, у тебя там вообще чепуха. В функции s() вот этому:
$row['name']
неоткуда взяться. В пыхе переменные сами не ищутся выше, как в js.
По идее надо сделать
function s($name, $pass)
, а эти данные при аякс запросе, в скрипте неоткуда брать. Ты их не передаешь.

Serg_pnz 04.05.2012 13:42

micscr,
:yes:

9xakep,
тут запроси id юзера в базе и пихни его в сессию
$res = mysql_query("SELECT `name`,`pass` FROM `users` WHERE `name` = '$login' AND `pass` = '$pass'");


А позже сделаешь отбор по id, хранящегося в сессии
"UPDATE `users` SET `avatar`='%s' WHERE `id`=".$_SESSION['user_id'];

9xakep 04.05.2012 18:53

micscr,
Serg_pnz,
спасибо за советы, обязательно воспользуюсь :)
Но пока решил потренироваться, и не могу понять в чем проблема, точнее как правильно сделать, задача:
передать данные с текстового поля, на эту же страницу с помощью ajax:
[php]
<?php 
echo "
<input type='text' value='' id='text'><input type='button'  onclick='send()' value='send'>
<script>
function send() {
var text = document.getElementById('text').value
var r = new XMLHttpRequest;
r.open('GET', 'ex-1.php?text='+encodeURIComponent(text), true)
r.send(null)
}
</script>
";
$text = $_GET['text'];
echo $text;
?>
[/php]
[IMG]http://s019.radikal.ru/i616/1205/8f/7e0bff4880e6.png[/IMG]
[IMG]http://s019.radikal.ru/i643/1205/d3/f323295d027a.png[/IMG]
Данные отправляются, и по 2ому скриншоту видно, что они приходят(или я не прав?), но на страницу они не добавляются, что не так-то? :-E

Ура!!! У меня получилось :D :D
<?php 
$con = mysql_connect('localhost', 'gmoryes_login', '****');
mysql_select_db('gmoryes_login', $con);
echo "
<input type='text' value='' id='text'><input type='button'  onclick='send()' value='send'>
<script>
function send() {
var text = document.getElementById('text').value
var r = new XMLHttpRequest;
r.open('GET', 'ex-1.php?text='+encodeURIComponent(text), true)
r.send(null)
}
</script>
";
$text = $_GET['text'];
mysql_query("INSERT INTO `users` (avatar) VALUES ('$text')");
?>

9xakep 04.05.2012 21:02

Почему ничего не выводит?
<?php 
error_reporting(E_ALL); // докладываем обо всех ошибках, спасибо микскр
echo "
Введите свой логин: <input type='text' value='' id='login'><br>
Введите свой пароль: <input type='text' id='pass'><br>
<input type='button' value='Войти' onclick='logIn()'>
<script>
function logIn() {
var login = document.getElementById('login').value
login = encodeURIComponent(login)
var pass = document.getElementById('pass').value
pass = encodeURIComponent(pass)
var r = new XMLHttpRequest;
r.open('GET', 'login.php?login='+login+'&pass='+pass, true)
r.send(null)
}
</script>
";
$connect = mysql_connect('localhost', 'gmoryes_login', '*****'); // заходим
$login = (isset($_GET['login'])) ? $_GET['login'] : false; // проверяем есть логин и пароль(отправлены ли они)
$pass = (isset($_GET['pass'])) ? $_GET['pass'] : false;
mysql_select_db('gmoryes_login', $connect); // конектимся к таблице
if($login) {
if($pass) {
$res = mysql_query("SELECT `name`, `pass` FROM `users` WHERE `name` = '$login' AND `pass` = '$pass'");
$res = mysql_fetch_assoc($res);
if($res['name']!='' && $res['pass']!= '') {
echo '<b>good</b>'; // почему это не попадет на страницу??
} else {
echo '<b>bad</b>'; // и это тоже? 
}
}
}
?>

Что надо написать? Поскольку в ответе от сервера все в порядке(не считая проблем с кодировками)

micscr 05.05.2012 09:24

Цитата:

// почему это не попадет на страницу??
// и это тоже?
Ну смотри что ты делаешь:
1) запрашиваешь страницу. Если в адресной строке нет ни login ни pass, то то, что в цитате не выводится.
2) ты вводишь данные в поля и жмешь кнопку. Но ты забыл поставить обработчик r.onreadystatechange, в котором обработаешь ответ, который на картинке. Естественно в этом ответе html тот не нужен, а только 'good' или 'bad'.

AJAX - это уже на загруженной странице, js запросил данные с сервера и обработав полученный ответ, что то сделал, изменил dom, например.

И насчет твоего sql-запроса, такие вещи решаются запросами вида:
select count(*) from users where ...
и проверяется полученное число, 0 или более.

9xakep 05.05.2012 09:43

micscr,
даже если я его ставлю, он пишет Undefined :blink:
<?php 
error_reporting(E_ALL);

echo "
Введите свой логин: <input type='text' value='' id='login'><br>
Введите свой пароль: <input type='text' id='pass'><br>
<input type='button' value='Войти' onclick='logIn()'>
<script>
function logIn() {
var login = document.getElementById('login').value
login = encodeURIComponent(login)
var pass = document.getElementById('pass').value
pass = encodeURIComponent(pass)
var r = new XMLHttpRequest; // создать запрос
r.onreadystatechange = function () {   
if(r.readyState==4 && r.status == 200) {
alert(r.responceText) // выводит undefined??
}
}
r.open('GET', 'login.php?login='+login+'&pass='+pass, true)
r.send(null)
}
</script>
";
$connect = mysql_connect('localhost', 'gmoryes_login', 'mishan11235');  // конектимся к БД
$login = (isset($_GET['login'])) ? $_GET['login'] : false;
$pass = (isset($_GET['pass'])) ? $_GET['pass'] : false;
mysql_select_db('gmoryes_login', $connect); // выбираем таблицу
if($login) {
if($pass) {
$res = mysql_query("SELECT `name`, `pass` FROM `users` WHERE `name` = '$login' AND `pass` = '$pass'");
$res = mysql_fetch_assoc($res);
if($res['name']!='' && $res['pass']!= '') {
echo "good"; // все, это на странице не выводиться!
} else {
echo "bad"; // как и это!
}
}
}
?>


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