| 
			| 
					
						| FallenSoul | 
								|  | «  : 16-08-2007 19:11 »  |  | 
 
 Добрый день. Прочитал руководства по установке апач+пхп+Mysql, учебник по пхп- всё очень хорошо написано и главное работает.  Но вот что я не нашел в учебнике. Каким образом реализуется механизм изменения содержимого .пхп страницы ? Вот index.php на котором 2 формы для входа в систему. Как в этом отрывке       if(strcmp($login,$row->login)==0 && strcmp($pass,$row->passw)==0) {
 
 }
реализовать "очистку страницы" и вывода на абсолютно чистой новой странице с тем же адресом в URL /index.php сообщение вида "Добро пожаловать.", но чтобы ни форм ничего другого там не было а только текст. Весьма благодарен. <html> <head>
 <title> Игра </title>
 </head>
 
 
 <body>
 <font face="Verdana" size=1>
 <br><hr size=3 color=red>
 <form action=/index.php method="get">
 <br><b> Login : </b>
 <br><input type="text" name="login" value="" emptyok="true">
 <br><b> Password :</b>
 <br><input type="text" name="password" value="" emptyok="true">
 <br><br><input type="submit" value="Войти">
 </form>
 <a href=/registration.php > Регистрация </a>
 </font>
 
 <?
 
 include "config.php";
 
 $login=$HTTP_GET_VARS['login'];
 $pass=$HTTP_GET_VARS['password'];
 $play=mysql_query("select * from player;");
 if($play)
 {
 while($row=mysql_fetch_object($play))
 {
 if(strcmp($login,$row->login)==0 && strcmp($pass,$row->passw)==0)
 {
 //
 }
 }
 }
 ?>
 </body>
 </html>
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #1 : 16-08-2007 20:07 »  |  | 
 
 1. $HTTP_GET_VARS['login'] Это давно устаревшая форма получения данных запроса. Следует пользоваться массивом $_GET. Точно также с POST запросом - $_POST. 2. Проверка логин/пароля. Перебор всех строк - крайне негуманный и неудобный метод. Укажи проверяемое в запросе. <?php$query = "
 SELECT *
 FROM player
 WHERE login = '" . mysql_escape_string($login) . "'
 AND passw = '" . mysql_escape_string($pass) . "'";
 $res = mysql_query($query);
 if (mysql_num_rows($res) == 0)
 {
 // not logged in
 }
 else
 {
 // now logged
 }
 mysql_free_result($res);
 ?>
 3. Изменение состава выводимой страницы. Можно использовать множество способов. Например, самый простой, но и самый неудобный из-за смешивания php-кода и html и плохой читаемости. <?phpif ($condition)
 {
 ?>
 ...одни данные...
 <?php
 }
 else
 {
 ?>
 ...другие данные...
 <?php
 }
 ?>
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| FallenSoul | 
								|  | « Ответ #2 : 16-08-2007 20:14 »  |  | 
 
 По поводу первых 2х пунктов я понял, а что касается третьего:
 Допустим у нас 3 страницы- Главная с формами для заполнения, промежуток с приветствием "Добро пожаловать " такой то юзер, содержимое отображающееся только для авторизированного юзера. Какое взять условие для этих 3х случаев?
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #3 : 16-08-2007 20:46 »  |  | 
 
 Если попроще, то так: <?phpswitch($condition)
 {
 case 0:
 include('file0.html');
 break;
 case 1:
 include('file1.html');
 break;
 case 2:
 include('file2.html');
 break;
 default:
 include('file_default.html');
 break;
 }
 ?>
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| FallenSoul | 
								|  | « Ответ #4 :  17-08-2007 06:45 »   |  | 
 
 Еще один вопрос ... Как передавать допустим со страницы "Добро пожаловать" на следующую на которую переход будет по ссылке допустим переменную чтобы проверять какого её значение, в подтверждение того что пользователь попал в авторизованную зону введя логин и пароль предварительно. ? |  
						| 
								|  |  
								| « Последнее редактирование: 17-08-2007 07:01 от FallenSoul » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #5 : 17-08-2007 07:27 »  |  | 
 
 например так:h**p://myexample.com/index.php?object=myobject
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| FallenSoul | 
								|  | « Ответ #6 : 17-08-2007 07:46 »  |  | 
 
 Не совсем понял. Точнее понял, но не до конца. Вот у меня после проверки на первой странице правильности ввода логина/пароля отображается следующее Добро пожаловать.<a href=/main.php?enter=$enter> Вход </a>
Выше я переменной $enter задавал значение если она в положительной ветке условного оператора который проверяет правильность ввода логина/пароля. А на следующей странице адресс у меня выглядит как main.php?enter=$enter,но проверку if($enter==0){
 ?>
 
 <font face=Verdana size=1>
 Зайдите заного с Главной страницы
 </font>
 
 <?
 
 }
 else if($enter==1)
 {
 
 ?>
 //
 <?
 }
Не проходит. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #7 : 17-08-2007 08:04 »  |  | 
 
 FallenSoul, тебя спасет использование сессий. См. в мануале session_start() и все, что написано рядом. Загляни в наши статьи - год назад я писал по этому делу. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| FallenSoul | 
								|  | « Ответ #8 : 17-08-2007 11:50 »  |  | 
 
 <?
 $today = date("m.d.y H:i:s");
 
 if(!empty($name) && !empty($pass) && !empty($nick))
 {
 if($born==1 || $born==2)
 {
 $play="
 select *
 from player
 where login = '" . mysql_escape_string($name) . "'
 ";
 
 $sql=mysql_query($play);
 
 if($x==0 && mysql_num_rows($sql) > 0) echo "Такой логин уже существует";
 else
 if($x==0 && mysql_num_rows($sql) == 0)
 {
 
 mysql_query("insert into player values (NULL,'$name','$pass','$nick','$sex','$born',NULL,'$today') ");
 echo "Вы зарегистрированы и можете войти в игру.";
 
 }
 }
 }
 
 ?>
Сессии потихоньку осваиваю-а вот отрывок из регистрации которую переписал в том стиле в котором мне написали авторизацию. Здесь есть какие то неточности или что-то лишнее ? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| FallenSoul | 
								|  | « Ответ #9 : 17-08-2007 21:04 »  |  | 
 
 Вопрос по поводу php и MySql. При регистрации мне приходится выполнять след. запрос :       mysql_query("insert into player values (NULL,'$name','$pass','$nick','$sex','$born','0','0','3','3','3','$today') ");
хотя предпоследние 5 параметров 0,0,...,3 у меня в таблице равны соответствующим числам по default'у,но не указывая их или оставляя пустым содержимое ковычек, добавлять новую запись в таблицу не хочет. 3 вопроса. 1. Можно ли как-то опустить наличие этих ковычек в запросе ? 2. Как действует дефолт значения у столбца если при создании записи всё равно надо указывать значение этого столбца? 3. MySql дружит с кирилицей? Дело в том что если разрешить создавать записи,в которых будет присутствовать кирилица,- то выводя их на страницах пхп проблем никаких нет, однако если просматривать содержащиеся в таблице соответствующие записи,то вся кирилица превращается в абру кадабру. |  
						| 
								|  |  
								| « Последнее редактирование: 17-08-2007 21:11 от FallenSoul » |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #10 : 18-08-2007 07:22 »  |  | 
 
 FallenSoul, связывать интерактивные страницы можно по разному. Типичный подход: сохранение параметров в сессии. При старте страницы запускаешь сессию - данные (если это не первый заход этой сессии) подкачиваются автоматом в массив $_SESSION. При завершении страницы массив также автоматически сохраняется. Подробно здесь: https://club.shelek.ru/view.php?id=28  : прочти "Сессии PHP. Часть 1." - этого достаточно для понимания сессий. В статье "Создание динамического веб-сайта, с использованием ПХП(часть первая)" рассматривается пример, подобный приведенному мною выше. Вопрос по поводу php и MySql. При регистрации мне приходится выполнять след. запрос :       mysql_query("insert into player values (NULL,'$name','$pass','$nick','$sex','$born','0','0','3','3','3','$today') ");хотя предпоследние 5 параметров 0,0,...,3 у меня в таблице равны соответствующим числам по default'у,но не указывая их или оставляя пустым содержимое ковычек, добавлять новую запись в таблицу не хочет. 3 вопроса. 1. Можно ли как-то опустить наличие этих ковычек в запросе ? 2. Как действует дефолт значения у столбца если при создании записи всё равно надо указывать значение этого столбца? 3. MySql дружит с кирилицей? Дело в том что если разрешить создавать записи,в которых будет присутствовать кирилица,- то выводя их на страницах пхп проблем никаких нет, однако если просматривать содержащиеся в таблице соответствующие записи,то вся кирилица превращается в абру кадабру.1. Можно. Кроме того, крайне небезопасно делать так, как в твоем примере - выше я уже указывал, что нужно делать со строками перед помещением их в SQL-запрос: обрабатывать ф-ией mysql_escape_string(). Почитай в инете о "SQL-Injection" - полезно знать. 2. Вообще, это вопрос не по web - см. его в мануале по MySQL. Для вставки неполной строки нужно указать список столбцов. INSERT INTO TABLE (col1, col7, col8, col9) VALUES (1, 7, 8, 9) 3. Это проблема не MySQL, а утилиты, которой ты пользуешься. Если, к примеру, у тебя винда и ты хранишь в базе текст в кодировке windows-1251, при просмотре его через консольную утилиту получишь мусор, т.к. виндовая консоль работает с кодировкой cp866 (дебильное наследие прошлого). Для удобства администрирования поставь PHPMyAdmin - web-инструмент для администрирования MySQL. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| FallenSoul | 
								|  | « Ответ #11 : 18-08-2007 08:28 »  |  | 
 
 Каждый день узнаю всё больше и больше нового для себя, и спс тебе за это =) Поставил пхпадмин, изменил код занесения учетной записи в таблицу при регистрации на следующий :          $query="insert into player values (NULL,
 '".mysql_escape_string($name)."',
 '".mysql_escape_string($pass)."',
 '".mysql_escape_string($nick)."',
 '$sex','$born','0','0','3','3','3',
 '".mysql_escape_string($today)."'
 );";
 $res=mysql_query($query);
 if($res) echo "Вы зарегистрированы и можете войти ";
Всё довольно удобно,но только ради интереса подскажи- почему и пхп админ показывает мне в столбце nick который при регистрации я ввожу русскими буквами абра кадабру? id_player    login    passw    nick    sex    born    gold    level    str    dex    stam    regdate       28        test    test   ìàêñ   1   1   0   0   3   3   3   08.18.07 12:22:12 Перед тем как занести, все текстовые переменные обрабатываю след. образом :   $nick=$_POST["nick"];$nick = substr($_POST["nick"],0,32);
 $nick = htmlspecialchars(stripslashes($nick));
 |  
						| 
								|  |  
								| « Последнее редактирование: 18-08-2007 08:32 от FallenSoul » |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #12 : 18-08-2007 09:49 »  |  | 
 
 '$sex','$born' Ты уверен, что тут именно числа? Если эти данные получены от клиента, то надо обязательно их проверить перед вставкой. Для чисел можно сделать так: $born = 0 + $born; Это автоматом конвертит строку в число и если она не является числом, то преобразуется в ноль. Запомни важную вещь: все данные, полученные от клиента, потенциально опасные. Их нужно проверять и по возможности не использовать напрямую. Напр., параметер sex. Это перечисляемый тип с конечным кол-вом значений и лучше передавать его в виде числа. <?php// предполагаем, что sex имеет три значения: 0 - unknown, 1 - man, 2 - woman
 
 $sex = isset($_POST['sex']) ? $_POST['sex'] : 0; // передан ли вообще параметер
 
 if ($sex < 0 || $sex > 2)
 $sex = 0;
 ?>
 $nick = htmlspecialchars(stripslashes($nick)); По моему это излишество. htmlspecialchars() лучше использовать при выводе, а не вводе. stripslashes() вообще не нужен, если у тебя в php не активирована фича magic quotes (тоже излишество). Уникальные столбцы (напр. nick) полезно проверять до вставки или обработать ошибку вставки. Кракозябры: не настроена кодировка PHPMyAdmin-а. Быстрее всего он у тебя объявил страницу как iso8859-1, а тебе нужно windows-1251. Посмотри в его настройках (в конфиге). Проверить можно легко: загрузив страницу поменяй кодировку в браузере. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| FallenSoul | 
								|  | « Ответ #13 : 18-08-2007 10:05 »  |  | 
 
 по поводу $sex и $born я специально сделал их числами и затем в самом коде в отличие от того какое значение принимают эти переменные происходит вывод.     if($sex==1) (string)$sex="Мужской";else if($sex==2) (string)$sex="Женский";
 
 echo "<b>Пол : </b>" .$sex. "<br>";
 
htmlspecialchars() , stripslashes() -это всё старался делать по учебнику чтобы защититься от всяких недоброжелателей    уберу если лишнее. Нашел следующие настройки- стояло и вправду iso8859-1, но заменив на windows-1251 ничего не изменилось =-\ Менял кодировку-толку 0. $cfg['DefaultLang'] = 'windows-1251'; $cfg['Lang']     = 'windows-1251'; $cfg['DefaultCharset'] = 'windows-1251'; 3 А что можно придумать с взаимодействием 2х таблиц о кот. я выше попробовал изложить? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #14 : 18-08-2007 12:16 »  |  | 
 
 htmlspecialchars() , stripslashes() -это всё старался делать по учебнику чтобы защититься от всяких недоброжелателей    уберу если лишнее.Делать надо зная, что и зачем делается. Не торопись делать умные страницы - просто поэкспериментируй в ф-иями и посмотри, какая что делает. Рекомендую смотреть html-код генерируемой страницы - брузер может делать поблажки, но это не значит, что так можно делать. $cfg['DefaultLang'] = 'windows-1251';$cfg['Lang']     = 'windows-1251';
 $cfg['DefaultCharset'] = 'windows-1251';
 
 Lang - это язык (language), а не кодировка. Оставь "en" или задай "ru" (если конечно есть его поддержка). Посмотри свойства страницы в браузере - какая там кодировка. 3 А что можно придумать с взаимодействием 2х таблиц о кот. я выше попробовал изложить?
 В теме нет "2-х таблиц". О чем речь? |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	|  |