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

Форум MySQL

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

 

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

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

тема: Помогите с кодом регистрации пользователей в СУБД MySQL
 
 автор: vit_ok   (02.11.2008 в 04:15)   письмо автору
 
 

<?php
// Удаляем лишние пробелы
$_POST['login'] = trim($_POST['login']);
$_POST['pass'] = trim($_POST['pass']);
$_POST['pass2'] = trim($_POST['pass2']);
// Проверяем не пустой ли суперглобальный массив $_POST
// Проверяем правильно ли заполнены обязательные поля
if(empty($_POST['login'])) exit('Поле "Логин" не заполнено'); //1
if(empty($_POST['pass'])) exit('Одно из полей "Пароль" не заполнено'); //2
if(empty($_POST['pass2'])) exit('Одно из полей "Пароль" не заполнено'); //3
if($_POST['pass'] != $_POST['pass2']) exit('Пароли не совпадают');
if(empty($_POST['email'])) exit('Поле "Email" не заполнено'); //4
if(empty($_POST['name'])) exit('Поле "Имя" не заполнено'); //5
if(empty($_POST['tel'])) exit('Поле "Телефон" не заполнено'); //6
// Если введён e-mail проверяем его на соответсвие
if(!empty($_POST['email']))
{
if(!preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$|i", $_POST['email']))
{
exit('Поле "E-mail" должно соответствовать формату yourname@yourname.com');
}
}
/////////////////////////////////////////////////
// 2. Блок проверки имени на уникальность
/////////////////////////////////////////////////
// Устанавливаем соединение с базой данных
require_once("mySql.php");
// Проверяем не было ли переданное имя
// зарегистрировано ранее
$query = "SELECT COUNT(*) FROM `Kontakt` WHERE login = $_POST[login]";
$usr = mysql_query($query);
if(!$usr) exit("Ошибка - ".mysql_error());
$total = mysql_result($usr, 0);
if($total > 0)
{
exit("Данное имя уже зарегистрировано, пожалуйста, выберите другое");
}

/////////////////////////////////////////////////
// 3. Блок регистрации пользователя
/////////////////////////////////////////////////
// Формируем и выполняем SQL-запрос на
// добавление нового пользователя
$query ="INSERT INTO `Kontakt` (`id`, `login`, `pass`, `email`, `name`, `tel`, `icq`, `obl`, `gorod`)
VALUES (NULL, '$_POST[login]', '$_POST[pass]', '$_POST[email]', '$_POST[name]', '$_POST[tel]', '$_POST[icq]', '$_POST[oblast]', '$_POST[gorod]')";
if(mysql_query($query))
{
// Осуществляем перезагрузку страницы,
// чтобы сбросить POST-данные
echo"<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
</HEAD><body>";
} else exit("Ошибка при добавлении данных - ".mysql_error());
?>

Так вот есть у меня код обработчик который вводит данные в базу, все вводит правильно тока кроме поля логин. Когда ввожу даные текстового типа выдает ошибку "Ошибка - Unknown column 'admin' in 'where clause'" а когда ввожу в поле логин тока одни цыфри заносит даные без проблем версия MySQL 5.0.45
Тип поля login varchar(20) cp1251_ukrainian_ci

  Ответить  
 
 автор: cheops   (02.11.2008 в 12:06)   письмо автору
 
   для: vit_ok   (02.11.2008 в 04:15)
 

>Ошибка - Unknown column 'admin' in 'where clause
Для какого из запросов выводится это сообщение? Просто у вас во всем скрипте нет ни одного SQL-запроса, где бы использовалось поле admin... Эта ошибка возникает именно в этом файле?

  Ответить  
 
 автор: vit_ok   (02.11.2008 в 22:47)   письмо автору
 
   для: cheops   (02.11.2008 в 12:06)
 

поля admin нету (есть login), проблема в занесении данных текстового типа в поле "login" базы, когда вводить цыфры вместо текстовых символов в это поле, то данные заносятся. А когда вносить любой текст, то выбивает ошыбку...

  Ответить  
 
 автор: Trianon   (02.11.2008 в 23:42)   письмо автору
 
   для: vit_ok   (02.11.2008 в 22:47)
 

$query = "SELECT COUNT(*) FROM `Kontakt` WHERE login = $_POST[login]";

Ошибка возникает при выполнении этого оператора.
Выведите его на экран перед выполнением - увидите где ошиблись.

  Ответить  
 
 автор: vit_ok   (03.11.2008 в 01:15)   письмо автору
 
   для: Trianon   (02.11.2008 в 23:42)
 

а причём здесь проверка даных если проблема в вводе даных в базу или я чтото непонимаю проверка проходит нормально если ввожу даные и они есть в базе то виводит что даные существуют так что с проверкой все нормально. Сама суть в воде чисельных и текстовых даных.

  Ответить  
 
 автор: Trianon   (03.11.2008 в 01:27)   письмо автору
 
   для: vit_ok   (03.11.2008 в 01:15)
 

Числовые и текстовые константы в SQL (равно как и во многих других языках ) записываются по-разному.

Еще раз. Ошибка в этом операторе. Как следствие, там еще и открытая уязвимость SQL-injection. Впрочем, вероятно, она не только там.
Дальше подсказывать не буду.Судя по ответу, голова вроде не пустая совсем - разберетесь.

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

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