Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Регистрация пользователя ошибка в скрипте
 
 автор: Сергей1988   (22.03.2009 в 18:30)   письмо автору
 
 

<?php

defined("MY_SCRIPT") or die();
$i=$_GET['print'];

switch ($i)

{
case "form":

if (!isset ($_POST ['submit']))

{
Форма для регистрации
}

break;



case "mess":

if ((empty($_POST['login'])) AND (empty($_POST['password']))) {$message='Ошибка: вы не ввели имя и пароль!</br><a href="index.php?go=reg&print=form">Назад</a>';}
... и т.д.



else

{

$arr = file('users.php');//считываем содержимое файла в массив

for($i = 1; $i<count($arr); $i++)

{

list ($user, $pass) = explode("¤",$arr[$i]);//извлекаю из строки переменные

$arr[$i]=array ("1"=>"$user","2"=>"$pass");

#echo $arr[$i][1]."<br/>"; так выводится список всех пользователей

if ($_POST ['login']==$arr[$i][1])/*Проверка ника... Но на практике получается что $_POST ['login'] сравнивается только с последним элементом массива $arr[$i][1], то есть с ником, который содержит последняя строка файла*/{$message='Ошибка: такой пользователь уже существует! Выберите другое имя.</br><a href="index.php?go=reg&print=form">Назад</a>';}



else

{

FileWrite ('users.php', $_POST ['login']."¤".$_POST ['password']."\n");

$message='<b>'.$_POST['login'].'</b> регистрация прошла успешно!<br/>Твой пароль: <b>'.$_POST['password'].'</b></br><a href="index.php">На главную</a>';

}

}


}

echo $message;

break;



default:
Правила регистрации

break;

}

Ну и как можно догадаться вопрос мой заключается в следующем что нужно исправить чтобы скрипт наконец-то заработал...

  Ответить  
 
 автор: Slo_Nik   (23.03.2009 в 19:29)   письмо автору
 
   для: Сергей1988   (22.03.2009 в 18:30)
 

в названии темы присутствует слово "ошибка", а вот где про неё в самом сообщении(выделеная жирным шрифтом)?

  Ответить  
 
 автор: Сергей1988   (23.03.2009 в 19:51)   письмо автору
 
   для: Slo_Nik   (23.03.2009 в 19:29)
 

Немного решил изменить код...

$num=file ("users.dat");//создаю массив $num
for ($i=0; $i<count($num); $i++)//индексирую его
{
$line=explode ("¤"; $num[$i]);//убираю разделитель
$line=list ($user, $pass);//извлекаю переменные из строки
$users=array ("user"=>$user, "pass"=>$pass);//создаю массив $users с индексами...
#А вот что делать дальше не знаю...
}

У меня по идеи должно получиться два одномерных массива, которые мне нужно привести к табличному виду, то есть получить из них один двухмерный. Такого вида:

######################
# $num # $user # $pass #
######################
# 1 # Миша # 12345 #
######################
# 2 # Вася # sq561 #
######################
# 3 # Алеша # 0096 #
######################

При обращение к ячейке $массив[1][$user] будет получено значение "Миша"... И это значение позже я буду сравнивать с тем что отправлено $_POST['login']...

Я только учусь, так что не судите строго...

  Ответить  
 
 автор: Slo_Nik   (24.03.2009 в 00:44)   письмо автору
 
   для: Сергей1988   (23.03.2009 в 19:51)
 

приветди полностью скрипт и какую выдаёт ошибку... скрипт прикрепи файлом к сообщению

  Ответить  
 
 автор: Сергей1988   (24.03.2009 в 01:57)   письмо автору
4.9 Кб
 
   для: Slo_Nik   (24.03.2009 в 00:44)
 

Насчет ошибки, я не точно выразился... Ошибок нет, точнее есть одна я никак не могу проверить если в текстовом файле запись содержащая пользователя. У меня есть файл с данными

Вася¤пароль
...

И т.д.

Так вот значит когда я начинаю проверять наличие такого пользователя, то скрипт производит сравнение только с пользователем чье имя находится в последней строке...

  Ответить  
 
 автор: AlexDIXI   (24.03.2009 в 04:05)   письмо автору
 
   для: Сергей1988   (24.03.2009 в 01:57)
 

Так нормально?

<?php  

if(isset($_POST['submit'])){ $sub $_POST['submit']; }else{ $sub false; } 

if(
$sub){ 


if(isset(
$_POST['login'])){ $login trim($_POST['login']); }else{ $login false; } 
if(isset(
$_POST['passwd1'])){ $passwd1 trim($_POST['passwd1']); }else{ $passwd1 false; } 
if(isset(
$_POST['passwd2'])){ $passwd2 trim($_POST['passwd2']); }else{ $passwd2 false; } 
if(isset(
$_POST['email'])){ $email trim($_POST['email']); }else{ $email false; } 
if(isset(
$_POST['title'])){ $title trim($_POST['title']); }else{ $title false; } 
if(isset(
$_POST['desc'])){ $desc trim($_POST['desc']); }else{ $desc false; } 
if(isset(
$_POST['url'])){ $url trim($_POST['url']); }else{ $url false; } 

if(
$login && $passwd1 && $passwd2 && $email && $title && $desc && $url){ 


if(
preg_match("#^[a-z0-9]{4,10}$#i"$login)){ exit("Некорректный логин.");  } 

if(
preg_match("#^[a-z0-9]{4,12}$#i"$passwd1) && preg_match("#^[a-z0-9]{4,12}$#i"$passwd2)){ if(md5($passwd1) != md5($passwd2)){ exit("Пароли не совпадают."); }else{ $passwd md5($passwd1); } }else{ exit("Некорректный пароль."); } 

if (
preg_match("/^[-0-9a-z_\.]+@[-0-9a-z^\.]+\.[a-z]{2,6}$/i"$email)){ exit("Некорректный e-mail."); } 

if(!
preg_match("#^[а-яёa-z\d\.\s-\!]{10,100}$#i"$title)){ exit("Некорректное название сайта."); } 

if(!
preg_match("#^[а-яёa-z\d,\.\s-\!?]{10,255}$#i"$desc)){ exit("Некорректное описание сайта."); } 

if(
preg_match("#^http://(www\.)?[a-z\d\.-]+\.[a-z]{2,6}[a-z\d\.-_\?&%=/]*$#"$url)){ exit("Некорректный домен."); } 

echo 
"Спасибо! Регистрация прошла успешно.";  

}else{ echo 
"<strong>Вы не заполнили все поля..</strong>";  die();} 


}else{ 
?> 
<form name="form1" method="post" action=""> 
<table width="100%" border="1" cellspacing="2" cellpadding="2"> 
  <tr> 
    <td width="200" align="right" valign="top">Логин:</td> 
    <td align="left" valign="top"><input name="login" type="text" maxlength="10"> 
мин. 4 макс. 10</td> 
  </tr> 
  <tr> 
    <td width="200" align="right" valign="top">Пароль:</td> 
    <td align="left" valign="top"><input name="passwd1" type="password" maxlength="12">  
    мин. 4 макс. 12</td> 
  </tr> 
  <tr> 
    <td width="200" align="right" valign="top">Пароль еще раз:</td> 
    <td align="left" valign="top"><input name="passwd2" type="password" maxlength="12"></td> 
  </tr> 
  <tr> 
    <td width="200" align="right" valign="top">E-mail:</td> 
    <td align="left" valign="top"><input name="email" type="text" maxlength="35"></td> 
  </tr> 
  <tr> 
    <td width="200" align="right" valign="top">Название сайта:</td> 
    <td align="left" valign="top"><input name="title" type="text" size="50" maxlength="70">  
    - макс. 40</td> 
  </tr> 
  <tr> 
    <td width="200" align="right" valign="top">Описание сайта:</td> 
    <td align="left" valign="top"><textarea name="desc" cols="50" rows="5" wrap="physical"></textarea></td> 
  </tr> 
  <tr> 
    <td width="200" align="right" valign="top">Ссылка на сайт:</td> 
    <td align="left" valign="top"><input name="url" type="text" value="http://" size="40" maxlength="40"></td> 
  </tr> 
</table> 
<input type="submit" name="submit" value=" Добавить "> 
</form> 
<?php 

?>

  Ответить  
 
 автор: Сергей1988   (24.03.2009 в 11:27)   письмо автору
 
   для: AlexDIXI   (24.03.2009 в 04:05)
 

Нет... это совсем не то... В файле хранятся данные такого вида:
Вася:пароль1
Маша:пароль2
...
Мне нужно как то поместить в массив логин, прогнать его через цикл и сравнить с введеным...

До меня все очень туго доходит...

$strings=file("users.dat");
foreach ($strings as $string)
{
$element=explode(":", $string);
А вот что сделать дальше чтобы получить массив с именами?

Если можно дайте ссылку где бы можно было статейку на эту тему почитать. Не надо только ссылку на Мануал давать...

  Ответить  
 
 автор: AlexDIXI   (27.03.2009 в 00:24)   письмо автору
 
   для: Сергей1988   (24.03.2009 в 11:27)
 

<pre>
<?php
$loginpasswd  
= array(); // объявляем переменную $loginpasswd массивом НЕ ОБЯЗАТЕЛЬНО
$loginpasswd file("user.dat"); // получили массив, с данными через : логин и пароль.

// Создаем цикл, который создаст массив  только с логинами.

$onlylogin = array(); // объявляем переменную $onlylogin массивом НЕ ОБЯЗАТЕЛЬНО

for($i=0$i count($loginpasswd); $i++){ // Начинай с числа которому равен $i. Продолжай цикл пока $i < (меньше) count($loginpasswd) означает число, количество индексов в массиве. Увеличивай $i каждый раз на единицу.

$ulogin $loginpasswd[$i]; // Заносим в переменную $ulogin текущий массив цикла.

$ex = array(); // объявляем переменную $ex массивом НЕ ОБЯЗАТЕЛЬНО

$ex explode(":"$ulogin); // в данном случае, т.к. двоеточие только один раз встречается в строке, 
                                                //explode делит строку на 2 массива.
                                                // Первый массив будет логином а второй паролем. Т.е. $ex[0] и $ex[1]

$onlylogin[] = $ex[0]; // заносим логин в массив $onlylogin


}

// Вывод

print_r($onlylogin);

?>

  Ответить  
 
 автор: Trianon   (27.03.2009 в 00:31)   письмо автору
 
   для: Сергей1988   (24.03.2009 в 11:27)
 

<?
$list 
= array();
$strings=file("users.dat");
foreach (
$strings as $string)
{
  list(
$login$pwd) = explode(":"$string2);
  
$list[$login] = $pwd;
}

//..

if($list[$_POST['login']] == $_POST['password']) 
   
//...

  Ответить  
 
 автор: AlexDIXI   (27.03.2009 в 01:00)   письмо автору
 
   для: Trianon   (27.03.2009 в 00:31)
 

Или так, но if вернет ошибку :) Т.к. лоигн не может быть равен паролю )

  Ответить  
 
 автор: Trianon   (27.03.2009 в 01:06)   письмо автору
 
   для: AlexDIXI   (27.03.2009 в 01:00)
 

проверьте - потом поговорим.

  Ответить  
 
 автор: Сергей1988   (27.03.2009 в 12:14)   письмо автору
 
   для: Trianon   (27.03.2009 в 01:06)
 

Спасибо мужики конечно за помощь но до меня все уже дошло... Я просто не понимал что делал, а все оказалось так просто... Я с самого начала все делал правильно. А нужно было так:


$file_array=array();
$file_array=file(users.dat);
foreach ($file_array as $line)
{
$some=explode(":", $line);
//теперь $some[0] - это имя, а $some[1] - пароль, только его нужно обработать trim()
if (...) {...} ...
}


Все очень просто...
Тему я думаю можно удалить...

P.S. При синтаксисе list(...)=explode(...); похоже создавался новый массив, но он уже не содержал в себе все необходимые значения...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования