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

Форум MySQL

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

 

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

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

тема: В базу данных не заносится новый пользователь
 
 автор: Dizels   (12.09.2007 в 13:41)   письмо автору
 
 

из формы регистрации все передается в файл regist3.php, вот он:

<?PHP
  session_start
();
  
session_register('scd');




  if(isset(
$HTTP_POST_VARS['securityCode']) && (isset($HTTP_SESSION_VARS['securityCode']) || isset($_SESSION['securityCode'])))
    {
        if(
strtolower($HTTP_POST_VARS['securityCode'])==$HTTP_SESSION_VARS['securityCode'] || strtolower($HTTP_POST_VARS['securityCode'])==$_SESSION['securityCode'])
        {
    
include 
"../admin/config.php";

// получаем данные

$login trim($_POST['login']);
$pol $_POST['pol'];
$familia trim($_POST['familia']);
$dfamilia trim($_POST['dfamilia']);
$name trim($_POST['name']);
$otchestvo trim($_POST['otchestvo']);
$date_day $_POST['date_day'];
$date_month $_POST['date_month'];
$date_year $_POST['date_year'];
$pass1 $_POST['pass1'];
$pass2 $_POST['pass2'];
$email trim($_POST['email']);
$icq trim($_POST['icq']);
$dopolnitelno $_POST['dopolnitelno'];


// Проверяем правильность ввода данных

if(empty($login)) echo "Не указан логин";
if(empty(
$familia)) echo "Не указана фамилия";
if(empty(
$name)) echo "Не указано имя";
if(empty(
$otchestvo)) echo "Не указано отчество";

if(empty(
$pass1) ||
   empty(
$pass2) ||
   
$pass1 != $pass2) echo "Ошибка в паролях";
if(empty(
$email)) 
{
    if (!
preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i"$email))
    echo 
"Не указан e-mail";
}


// Блок проверки логина

$rus = array("А""а""В""Е""е""К""М""Н""О""о""Р""р""С""с""Т""Х""х"); 

$eng = array("A""a""B""E""e""K""M""H""O""o""P""p""C""c""T""X""x");

$eng_login str_replace($rus$eng$login);
$rus_login str_replace($eng$rus$login);

// Формируем SQL-запрос

$query "SELECT * FROM user
        WHERE login LIKE '
$login' OR
              login LIKE '
$eng_login' OR
              login LIKE '
$rus_login'";
 
$ath mysql_query($query);
 if (
$ath)
 {
    if(
mysql_num_rows($ath)>0) echo "Данный логин уже зарегистрирован, попробуйте другой.";
 }
 else



// Формируем SQL-запрос на добавление регистрационных данных в БД

// Проверяем, нет ли одинарных кавычек

$login str_replace("'","`"$login);
$familia str_replace("'","`"$familia);
$dfamilia str_replace("'","`"$dfamilia);
$name str_replace("'","`"$name);
$otchestvo str_replace("'","`"$otchestvo);
$email str_replace("'","`"$email);
$icq str_replace("'","`"$icq);
$dopolnitelno str_replace("'","`"$dopolnitelno);

// Добавляем нового пользователя

 
$query_user "INSERT INTO users VALUES(
    NULL,
    '
$login',
    '
$pass1',
    '
$pol',
    '
$familia',
    '
$name',
    '
$otchestvo',
    '
$dfamilia',
    '
$bithday',
    '
$email',
    '
$icq',
    '
$dopolnitelno')";

        }else{
      print 
'<font color="red">Неверный защитный код!</font><br><br><a href="registform.php">Попробовать еще раз!</a><script>window.setTimeout(\'location.href("registform.php")\',1500);</script>';
    }
  }
?>



Вот, все вроде работает, определяет когда защитный код неправильно ввел, если фамилию не ввел и т.д., но вот в БД пользователь не попадает почему-то, что в коде не так?

Вот структура БД :

CREATE TABLE `users` (
  `user_id` int(11) unsigned NOT NULL auto_increment,
  `user_login` tinytext NOT NULL,
  `user_password` tinytext NOT NULL,
  `pol` int(1) NOT NULL default '0',
  `user_f` tinytext NOT NULL,
  `user_n` tinytext NOT NULL,
  `user_o` tinytext NOT NULL,
  `user_df` tinytext,
  `bithday` date NOT NULL default '0000-00-00',
  `email` tinytext NOT NULL,
  `ICQ` tinytext,
  `dopolnitelno` text,
  PRIMARY KEY  (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

   
 
 автор: Faraon   (12.09.2007 в 14:02)   письмо автору
 
   для: Dizels   (12.09.2007 в 13:41)
 

Попробуйте выполнить код
$query_user = mysql_query("INSERT INTO users VALUES(
    NULL,
    '$login',
    '$pass1',
    '$pol',
    '$familia',
    '$name',
    '$otchestvo',
    '$dfamilia',
    '$bithday',
    '$email',
    '$icq',
    '$dopolnitelno')");
    if(!$query_user){
            echo mysql_error();
            }

Какую ошибку выдает?

   
 
 автор: Indemion   (12.09.2007 в 14:07)   письмо автору
 
   для: Dizels   (12.09.2007 в 13:41)
 

Где строка:
<?php
mysql_query
($query_user) or die(mysql_error());
?>

   
 
 автор: Dizels   (12.09.2007 в 16:17)   письмо автору
 
   для: Indemion   (12.09.2007 в 14:07)
 

Попробуйте выполнить код$query_user = mysql_query("INSERT INTO users VALUES(
NULL,
'$login',
'$pass1',
'$pol',
'$familia',
'$name',
'$otchestvo',
'$dfamilia',
'$bithday',
'$email',
'$icq',
'$dopolnitelno')");
if(!$query_user){
echo mysql_error();
}


Какую ошибку выдает?


При вот таком все занеслось в БД, спасибо, тока если можно - укажите, в чем же ошибка была?

   
 
 автор: Faraon   (12.09.2007 в 16:27)   письмо автору
 
   для: Dizels   (12.09.2007 в 16:17)
 

mysql_query посылает запрос MySQL, который вы сформировали, а у вас этой функции не было, следовательно ваш запрос не обрабатывался

   
 
 автор: Dizels   (12.09.2007 в 16:35)   письмо автору
 
   для: Faraon   (12.09.2007 в 16:27)
 

Ок, большое спасибо за разъяснения. Пользователь зарегистрировался, но вот заметил некоторые недочеты, а именно:
1) в графе pol все время значение 0, я же думал, сделать так: 0 - мужск. пол, 1 - женский пол. Как это реализовать?

2) Почему-то не записывается в БД девичья фамилия, здесь я вообще не знаю почему так происход.

3)Дата рождения: здесь я понимаю что не так, у меня отдельные переменные на день, месяц и год, подскажите плз, как их правильно сформировать и запихнуть в столбец таблицы "bithday" и сразу же вопрос, как сделать так, чтобы пользователь обязательно выбирал свой день рождения, а то многие так и оставят 1 января 1940 года:)

4) И еще - только что попробовал добавить пользователя с таким же ником и у меня это свободно получилось, хотя не должно было, подскажите, что и здесь не так.

   
 
 автор: Faraon   (12.09.2007 в 17:01)   письмо автору
 
   для: Dizels   (12.09.2007 в 16:35)
 

1) и 2)
Приведите форму заполнения
3)
Можно проверять что если это значение равно 1 января 1940 года,
то возвращать к форме и писать ошибку или реализовать средствами Javascript проверку этого selecta

   
 
 автор: Dizels   (12.09.2007 в 17:39)   письмо автору
 
   для: Faraon   (12.09.2007 в 17:01)
 

по 1 и 2:

<tr>
<td>Пол <font color="red">&#42;</font> :</td>
<td>
<input type=radio name=pol onChange="dsurname(1, this)" value="myg">Муж   
<input type=radio name=pol onChange="dsurname(2, this)" value="gen" checked>Жен 
</td>
</tr>

<script> 
function dsurname(which, obj) 

  obj.form.devichiafamilia.disabled = !( 
    (which==1 && !obj.checked) || 
    (which==2 && obj.checked) 
  ); 

</script>


<tr>
  <td>Девичья фамилия:</td>
  <td><input type=text name=devichiafamilia size=30></td>
</tr>


по 3 - как для начала мне записать то, что уже ввели? у меня получается 3 переменных:
$date_day, $date_month, $date_year - вот их все в одну объединить и записать в БД, как это объединение сделать(сам код как написать не пойму).

   
 
 автор: Faraon   (12.09.2007 в 17:50)   письмо автору
 
   для: Dizels   (12.09.2007 в 17:39)
 

1.
У вас значение 1и2 не будет а будет myg или gen в зависимости то radio

2 Имя поля где пользователь пишет девичью фамилию

<input type=text name=devichiafamilia size=30>

А принимаете

$_POST['dfamilia']


3.
$d=$date_year."-".$date_month."-".$date_day;

   
 
 автор: Dizels   (12.09.2007 в 18:00)   письмо автору
 
   для: Faraon   (12.09.2007 в 17:50)
 

1)

из структуры БД:

  `pol` int(1) NOT NULL default '0',

т.е. я не правильно указал в структуре, да? Нужно так:

  `pol` tinytext NOT NULL,

?

2) Спасибо, не заметил.
3) еще раз спасибо.
4) И еще - только что попробовал добавить пользователя с таким же ником и у меня это свободно получилось, хотя не должно было, подскажите, что и здесь не так.
5) Так же почему-то, если не вводить пароль - выскакивает сообщение "ошибка пароля", однако запись о пользователе все равно заносится в БД

   
 
 автор: Dizels   (12.09.2007 в 19:18)   письмо автору
 
   для: Dizels   (12.09.2007 в 18:00)
 

дата вводится, остальные вопросы в силе.

   
 
 автор: Faraon   (13.09.2007 в 09:34)   письмо автору
 
   для: Dizels   (12.09.2007 в 19:18)
 

Попробуйте этот код

<?PHP
  session_start
();
  
session_register('scd');




  if(isset(
$HTTP_POST_VARS['securityCode']) && (isset($HTTP_SESSION_VARS['securityCode']) || isset($_SESSION['securityCode'])))
    {
        if(
strtolower($HTTP_POST_VARS['securityCode'])==$HTTP_SESSION_VARS['securityCode'] || strtolower($HTTP_POST_VARS['securityCode'])==$_SESSION['securityCode'])
        {

include 
"../admin/config.php";

// получаем данные

$login trim($_POST['login']);
$pol $_POST['pol'];
$familia trim($_POST['familia']);
$dfamilia trim($_POST['dfamilia']);
$name trim($_POST['name']);
$otchestvo trim($_POST['otchestvo']);
$date_day $_POST['date_day'];
$date_month $_POST['date_month'];
$date_year $_POST['date_year'];
$pass1 $_POST['pass1'];
$pass2 $_POST['pass2'];
$email trim($_POST['email']);
$icq trim($_POST['icq']);
$dopolnitelno $_POST['dopolnitelno'];


// Проверяем правильность ввода данных

if(empty($login)){ echo "Не указан логин";
exit;
}
if(empty(
$familia)){ echo "Не указана фамилия";
exit;
}
if(empty(
$name)){ echo "Не указано имя";
exit;
}

if(empty(
$otchestvo)){ echo "Не указано отчество";
exit;
}
if(empty(
$pass1) || ($pass2)){
if(
$pass1 != $pass2){

    echo 
"Ошибка в паролях";
exit;
}
}
   if(empty(
$email))
{
    if (!
preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i"$email))
    echo 
"Не указан e-mail";
    exit;
    }


// Блок проверки логина

$rus = array("А""а""В""Е""е""К""М""Н""О""о""Р""р""С""с""Т""Х""х");

$eng = array("A""a""B""E""e""K""M""H""O""o""P""p""C""c""T""X""x");

$eng_login str_replace($rus$eng$login);
$rus_login str_replace($eng$rus$login);

// Формируем SQL-запрос

$query "SELECT * FROM user
        WHERE login LIKE '
$login' OR
              login LIKE '
$eng_login' OR
              login LIKE '
$rus_login'";
 
$ath mysql_query($query);
if (
mysql_num_rows($ath)>0)
    {
    echo 
"Данный логин уже зарегистрирован, попробуйте другой.";
exit;

 }
 else{



// Формируем SQL-запрос на добавление регистрационных данных в БД

// Проверяем, нет ли одинарных кавычек

$login str_replace("'","`"$login);
$familia str_replace("'","`"$familia);
$dfamilia str_replace("'","`"$dfamilia);
$name str_replace("'","`"$name);
$otchestvo str_replace("'","`"$otchestvo);
$email str_replace("'","`"$email);
$icq str_replace("'","`"$icq);
$dopolnitelno str_replace("'","`"$dopolnitelno);

// Добавляем нового пользователя

 
$query_user mysql_query("INSERT INTO users VALUES(
    NULL,
    '
$login',
    '
$pass1',
    '
$pol',
    '
$familia',
    '
$name',
    '
$otchestvo',
    '
$dfamilia',
    '
$bithday',
    '
$email',
    '
$icq',
    '
$dopolnitelno')");
        }
        }else{
      print 
'<font color="red">Неверный защитный код!</font><br><br><a href="registform.php">Попробовать еще раз!</a><script>window.setTimeout(\'location.href("registform.php")\',1500);</script>';
    }
  }

  
?>

   
 
 автор: Dizels   (13.09.2007 в 12:15)   письмо автору
 
   для: Faraon   (13.09.2007 в 09:34)
 

Вот такую ошибку выдает:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in z:\home\localhost\www\peoplecrimea\regist_user\regist3.php on line 79


Вот эта строка:

$ath = mysql_query($query);

   
 
 автор: Faraon   (13.09.2007 в 12:22)   письмо автору
 
   для: Dizels   (13.09.2007 в 12:15)
 

Замените

if(mysql_num_rows($ath)>0){

на

if(mysql_result($ath, 0, "login")==true){     

   
 
 автор: Dizels   (13.09.2007 в 14:12)   письмо автору
 
   для: Faraon   (13.09.2007 в 12:22)
 

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in z:\home\localhost\www\peoplecrimea\regist_user\regist3.php on line 79

Вот такая теперь ошибка, строку поменял. Самое интересное, что пользователь в БД записывается, но вот ошибка выпадает. И при этом не работает проверка уникальности логина.

   
 
 автор: Faraon   (13.09.2007 в 15:17)   письмо автору
 
   для: Dizels   (13.09.2007 в 14:12)
 

Странно у меня работает
А что вот это за проверка, что-то не пойму что здесь проверяется ?

$rus = array("А", "а", "В", "Е", "е", "К", "М", "Н", "О", "о", "Р", "р", "С", "с", "Т", "Х", "х"); 

$eng = array("A", "a", "B", "E", "e", "K", "M", "H", "O", "o", "P", "p", "C", "c", "T", "X", "x"); 

$eng_login = str_replace($rus, $eng, $login); 
$rus_login = str_replace($eng, $rus, $login); 

   
 
 автор: cheops   (13.09.2007 в 15:39)   письмо автору
 
   для: Faraon   (13.09.2007 в 15:17)
 

Проверяется не осущетсвляется ли попытка подделать имя, используя вместо русских букв английских и наоборот.

   
 
 автор: Dizels   (13.09.2007 в 15:53)   письмо автору
 
   для: cheops   (13.09.2007 в 15:39)
 

cheops прав, это взято из книги Практика создания web-сайтов PHP 5. и вот эта строка кстати тоже

if(mysql_num_rows($ath)>0){


Так что здесь, как мне кажется дело в чем-то другом

   
 
 автор: Faraon   (13.09.2007 в 16:21)   письмо автору
 
   для: Dizels   (13.09.2007 в 15:53)
 

-

   
 
 автор: Faraon   (13.09.2007 в 16:32)   письмо автору
 
   для: Faraon   (13.09.2007 в 16:21)
 

Твою дивизию и что же я опять дамп БД не посмотрел
У вас же столбец login не существует а есть user_login

$query = "SELECT * FROM user 
        WHERE user_login LIKE '$login' OR 
              user_login LIKE '$eng_login' OR 
              user_login LIKE '$rus_login'"; 

   
 
 автор: Dizels   (13.09.2007 в 16:47)   письмо автору
 
   для: Faraon   (13.09.2007 в 16:32)
 

Блин - все равно туже ошибку выдает.

   
 
 автор: Faraon   (13.09.2007 в 17:07)   письмо автору
 
   для: Dizels   (13.09.2007 в 16:47)
 

Давайте узнаем что за ошибка

if(!$ath) echo mysql_error(); 

   
 
 автор: Dizels   (13.09.2007 в 17:37)   письмо автору
 
   для: Faraon   (13.09.2007 в 17:07)
 

УРА! ПОЛУЧИЛОСЬ!
Ошибка как всегда была в моей невнимательности вот код который был:
$query = "SELECT * FROM user
WHERE user_login LIKE '$login' OR

а таблица называлась users!

ОГРОМНОЕ СПАСИБО, Faraon! Без твоей помощи я бы очень долго мучался. Я думаю, что это далеко не последний мой вопрос на форуме, поэтому давай на "ты", а то я чего-то заметил, что ты ко мне на "вы".

P.S. остался один маленький вопросик - как поступить с полом? Как его в таблице писать?
У меня было так:
`pol` int(1) NOT NULL default '0',

Но как я понимаю надо так:
  `pol` tinytext NOT NULL,

я прав?

   
 
 автор: Faraon   (13.09.2007 в 17:51)   письмо автору
 
   для: Dizels   (13.09.2007 в 17:37)
 

Думаю CHAR(3) подойдет

   
 
 автор: valenok   (13.09.2007 в 17:53)   письмо автору
 
   для: Faraon   (13.09.2007 в 17:51)
 

Enum 'male','female'

   
Rambler's Top100
вверх

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