Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с логином

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
crosstep
Отправлено: 09 Апреля, 2011 - 11:14:11
Post Id


Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?
  2.                 if (!isset($_SESSION['user_id']))  {     ?>
  3.                    <form action="index.php" method="post">
  4.                         <h4>Вход на сайт </h4>          
  5.                         Имя:<br>
  6.  
  7.                         <input type="text" name="name" size="15" maxlength="30" value="" /><br>
  8.  
  9.                         Пароль:<br>
  10.    
  11.                         <input type="password" name="pass" size="15" maxlength="35" value="" /><br>
  12.      
  13.                         <input type="submit" value="Войти" />
  14.                
  15.                         </form>
  16.                
  17.                         <a href="reg.php">Регистрация.</a><br>
  18.                      
  19. <?                }              
  20.    
  21.  
  22.                
  23.  
  24.                 else {
  25.                 require_once("db.php");
  26.                 mysql_connect($dbhost,$dbuser,$dbpass);
  27.                 mysql_select_db($dbase);
  28.                
  29.                 //login($_POST['name'], $_POST['pass']);
  30.              
  31.                
  32.                 $query = "'SELECT * FROM `accs` WHERE name="$_POST['name']" LIMIT 0,1";
  33.                 $f = mysql_query($query);
  34.                 if(!$f) $error = 1;
  35.                
  36.                 while($row = mysql_fetch_row($f)) {
  37.                
  38.                        $_SESSION['user_id']= $row['0'];
  39.                        $sname = $row['1'];
  40.                        $date = $row['2'];
  41.                        $spass = $row['3'];
  42.                        $group = $row['4'];
  43.                        
  44.                
  45.                 }
  46.                
  47.                 if($_POST['pass'] == $spass && $_POST['name'] = $sname) {
  48.                   echo "Вы вошли как ".$_POST['name'];
  49.                 } else $error =1;                      
  50.                
  51.                 if($error) die("Неверное имя или пароль");
  52.                
  53.                 mysql_close();
  54.              
  55.                        
  56.                  } ?>

(Добавление)
$query = "'SELECT * FROM `accs` WHERE name="$_POST['name']" LIMIT 0,1";
Parse error: syntax error, unexpected T_VARIABLE in Z:\home\test1.ru\www\index.php on line 61

проблема с этой строчкой(я запутался там в кавычках) помогите плз
 
 Top
Garda1
Отправлено: 09 Апреля, 2011 - 11:21:47
Post Id


Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




Знаки конкатенации и кавычки для string
PHP:
скопировать код в буфер обмена
  1. $query = "SELECT * FROM `accs` WHERE name='".$_POST['name']."' LIMIT 0,1";

(Отредактировано автором: 09 Апреля, 2011 - 11:22:36)

 
 Top
DeepVarvar Супермодератор
Отправлено: 09 Апреля, 2011 - 12:51:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




LIMIT 0,1
Вы где видели id = 0???
 
 Top
Мелкий Супермодератор
Отправлено: 09 Апреля, 2011 - 13:04:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DeepVarvar, у лимита первым необязательным аргументом - пропуск строк. 0 = без пропуска строк.


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 09 Апреля, 2011 - 14:44:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Мелкий сознательно:
и LIMIT 1 и LIMIT 0,1 и LIMIT 1,1 тождественны.
Но чтобы самим не путаться, лучше уж писать без нуля, т.к. это немного противоречит с поведением.
 
 Top
Мелкий Супермодератор
Отправлено: 09 Апреля, 2011 - 15:06:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DeepVarvar пишет:
и LIMIT 1 и LIMIT 0,1 и LIMIT 1,1 тождественны.

С чего вдруг?
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `fortest`.`tmp` (
  2. `id` TINYINT UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY
  3. )
  4. INSERT INTO `tmp` VALUES (NULL), (NULL);
  5. SELECT * FROM `tmp` LIMIT 0,1; -- вернёт id=1
  6. SELECT * FROM `tmp` LIMIT 1,1; -- вернёт id=2

limit 1 и limit 0,1 - да, равны. limit 1,1 - другая строка по определению.


-----
PostgreSQL DBA
 
 Top
levchick
Отправлено: 09 Апреля, 2011 - 19:22:19
Post Id



Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Июль 2010  


Помог: 3 раз(а)




LIMIT {номер строки, с которой начинаем выбирать},{кол-во выбираемых строк}

В MySQL, как и принято в программировании, нумерация начинается с 0. Так что, первая строка таблицы имеет номер 0 и именно с нее мы начинаем выбирать. Если указать LIMIT 1,1 - то мы вернем вторую строку таблицы.
(Добавление)
Если первый парамент пропущен - по умолчанию, подствавляется 0. Так что, тождественны только LIMIT 1 и LIMIT 0,1
 
 Top
crosstep
Отправлено: 09 Апреля, 2011 - 20:39:20
Post Id


Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




А как правильно выставить ковычки?) как не пытался не ест)
 
 Top
Garda1
Отправлено: 09 Апреля, 2011 - 21:49:04
Post Id


Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




попробуй вставить эту строку
PHP:
скопировать код в буфер обмена
  1.     $query = "SELECT * FROM `accs` WHERE `name`='".$_POST['name']."' LIMIT 0,1";
 
 Top
crosstep
Отправлено: 09 Апреля, 2011 - 22:11:32
Post Id


Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




пробовал-не канает)
(Добавление)
Ну всмысле ошибку не выдает но и не логинит)
 
 Top
SAD
Отправлено: 09 Апреля, 2011 - 22:15:49
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




лучше проэкранировать данные
PHP:
скопировать код в буфер обмена
  1. $name = mysql_real_escape_string($_POST['name']);
  2. $query = "SELECT * FROM `accs` WHERE `name`='{$name}' LIMIT 1";
 
 Top
Kirilik
Отправлено: 09 Апреля, 2011 - 22:30:43
Post Id


Гость


Покинул форум
Сообщений всего: 66
Дата рег-ции: Апр. 2011  


Помог: 2 раз(а)




crosstep пишет:
if($_POST['pass'] == $spass && $_POST['name'] = $sname)

здесь имя не сравнивается, а присваивается.
 
 Top
Garda1
Отправлено: 09 Апреля, 2011 - 22:53:43
Post Id


Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




а что кстати мешает сделать проверку логин-пароль в запросе?
смысл возвращать пароль в скрипт...тем более чаще всего они хранятся закодированными md5().
PHP:
скопировать код в буфер обмена
  1.  
  2. $query = "SELECT `login`,`etc` FROM `accs` WHERE `name`='{$_POST['name']}' AND `pass` = '{$_POST['pass']}' LIMIT 0,1";
  3. $f = mysql_query($query);
  4. mysql_close();//именно здесь, потому что если сработает die, то скрипт закночит работу
  5. //а потом уже и смысла в использовании цикла нет, поскольку ответ ожидается один
  6. if(!$f) die("Неверное имя или пароль");
  7. else{
  8.    $row = mysql_fetch_assoc($f);
  9.    echo 'Вы вошли как '.$row['login'];
  10. }

(Отредактировано автором: 09 Апреля, 2011 - 22:54:23)

 
 Top
Kirilik
Отправлено: 09 Апреля, 2011 - 23:22:35
Post Id


Гость


Покинул форум
Сообщений всего: 66
Дата рег-ции: Апр. 2011  


Помог: 2 раз(а)




А вообще логика здесь не понятна:
crosstep пишет:
PHP:
скопировать код в буфер обмена
  1. $query = "'SELECT * FROM `accs` WHERE name="$_POST['name']" LIMIT 0,1";
  2. $f = mysql_query($query);    
  3. if(!$f) $error = 1;  
  4. while($row = mysql_fetch_row($f)) {
  5. $_SESSION['user_id']= $row['0'];  
  6. $sname = $row['1'];    
  7. $date = $row['2'];
  8. $spass = $row['3'];
  9. $group = $row['4'];    
  10. }    
  11.  if($_POST['pass'] == $spass && $_POST['name'] = $sname)...

если в базе несколько записей с именем как в $_POST, то данные из них извлекаются в цикле, нО проверка почему-то идет после цикла - проверяются данные лишь последней выбранной записи
А остальные?.

Извиняюсь, не заметил Limit. Закатив глазки
Но тогда зачем цикл? Однако

(Отредактировано автором: 09 Апреля, 2011 - 23:28:59)

 
 Top
crosstep
Отправлено: 09 Апреля, 2011 - 23:53:58
Post Id


Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




спс всё в тему) но всё равно не пашет логин)
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB