Проверка пустых полей!

Статус
В этой теме нельзя размещать новые ответы.

Spike_Manana

Новичок
Проверка пустых полей!

Apache 1.3.34 - PHP 4.4.1 - MySQL 5.0.16

Привет всем!
Я начинающий программер, тобишь знания PHP и MySQL у меня очень слабенькие :rolleyes:
Поэтому решил понадеятся на добрых людей :) Спасибо заранее!!!

Проблема вот такая:
PHP:
if ($username=NULL) {  
echo ("Не введен логин");  }  
elseif ($password=NULL) {  
echo ("Не введен пароль");  }  
elseif ($email=NULL) {  
echo ("Не введен e-mail");  } 
   else {    
include ("../db/config.php");   // Считывает настройки БД  
include ("../db/opendb.php");   // Открывает соеденение с MySQL сервером
// Вписывает информацию введенную пользователем  
mysql_query ("INSERT INTO users (username, password, email, fname, lname, mname, regdate) 
VALUES ('$username', '$password', '$email', '$fname', '$lname', '$mname', '$regdate')");
// Перенаправляет на страницу с сообщением об удачной регистрации
header("Location: messages/user_reg_succes.php");
include("../db/closedb.php");   // Закрывает соеденение с MySQL сервером
}
Вот тут я пытаюсь сделать так чтоб код проверил 3 поля с вводом данных: логин, пароль и e-mail. Если что то не введено, то он должен выдавать сообщение о конкретно невведенном поле, если оно не одно то и сообщений больше!
 

Solid

Drosera anglica
В первом случае ты присваеваешь к переменной username значение NULL.
Во втором проверяешь переменную на "пустоту". http://php.net/empty/
Ещё есть http://php.net/isset/, почти что тоже самое что и if(@$username==null) return true; else return false;
 

Solid

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

_RVK_

Новичок
а какая разница между:
if ($username=NULL) {
и
if (empty($username)) {
Ну если ты имелл ввиду == в условии то разница только в том что если $username не определена, то ты получишь Notice. Во втором случае нет.
Еще, второй вариант гораздо красивее и читабельнее.

И хочу добавить, что пользуйся массивами $_GET и $_POST. А то скоро ты прибижишь на форум с воплями что у тебя не передаются переменные.
 

Spike_Manana

Новичок
Автор оригинала: Solid
Совет на будущее: постарайся как можно меньше использовать include, конечно, бывают моменты когда они требуются в таком количестве, но данный случай уж точно к таким не принадлежит.
А как мне подругому данные из этих фаилов достать? :confused:
 

RigVan

Постоянный член клуба
ну и наличие пустых полей предварителльно нужно проверить на странице с формой с помощью JavaScript, что кстати не отменяет проверки в PHP
 

Spike_Manana

Новичок
С помощью _RVK_ немного подправил код,
вроде всё хорошо, только вот если пароль
преобразовать в md5 то поле с вводом пароля
становится НЕ обязательным :( тоесть зарегится
можно не вводя пароля ;) а это совсем грустно...
Вобщем вот код:
PHP:
$password = md5($password);   // Преобразует пароль по алгоритму md5
$regdate = date("d.m.Y");   // Присваевает дату, переменной $regdate

$err_message = ''; // Присваевает пустое значение переменной сообщения

// Образует сообщения о пустых полях
if (empty($username)) {
    $err_message .= "Не введен Логин";    
} 
if (empty($password)) {
    $err_message .= "Не введен Пароль";    
}
if (empty($email)) {
    $err_message .= "Не введена Почта";    
}

// При выполнении следующего условия запускает скрипт регистрации
if (empty($err_message)) {

include ("../db/config.php");   // Считывает настройки БД
include ("../db/opendb.php");   // Открывает соеденение с MySQL сервером

// Вписывает информацию введеную пользователем
mysql_query ("INSERT INTO nap_users (username, password, email, fname, lname, mname, regdate)
 VALUES ('$username', '$password', '$email', '$fname', '$lname', '$mname', '$regdate')");

// Перенаправляет на страницу с сообщением об удачной регистрации
header("Location: messages/user_reg_succes.php");

include ("../db/closedb.php");   // Закрывает соеденение с MySQL сервером
} 

// Выдает сообщения о пустых полях, если такие есть
else {
	print $err_message;
}
Как сделать поле с паролем md5 необходимым?
 

Dreammaker

***=Ф=***
Вместо первой строчки попробуй поставить:
PHP:
$password=(!empty($_POST['password']))?md5($_POST['password']):'';
В итоге ты получаешь переменную с пассвордом или пустой или обработанной функцией md5 в зависисмости от того, заполнено это поле в форме или нет.

update: исправил опечатки в выражении...
 

Spike_Manana

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



Теперь возник другой вопрос! как НЕ используя
PHP:
include
достать информацию (переменные) из других скриптов??? И как эти самые сообщения заставить появлятся только после нажатия кнопки? а не так чтоб сообщения сразу выводились при входе на страничку!
Щас код выглядит так:
PHP:
$err_message = ''; // Присваевает пустое значение переменной сообщения

// Образует сообщения о пустых полях
if (empty($username) && empty($password) && empty($email)) {
    $err_message .= "Вы не ввели ни одного значения!!!";    
}
else {
	if (empty($username)) {
    	$err_message .= "Вы не ввели Логин";    
	} 
	if (empty($password)) {
    	$err_message .= "Вы не ввели Пароль";    
	}
	if (empty($email)) {
    	$err_message .= "Вы не ввели Почту";    
	}
}

// При выполнении следующего условия запускает скрипт регистрации
if (empty($err_message)) {

include ("../db/config.php");   // Считывает настройки БД
include ("../db/opendb.php");   // Открывает соеденение с MySQL сервером

$password = md5($password);   // Преобразует пароль по алгоритму md5

// Вписывает информацию введеную пользователем
mysql_query ("INSERT INTO nap_users (username, password, email, fname, lname, mname, regdate)
 VALUES ('$username', '$password', '$email', '$fname', '$lname', '$mname', '$regdate')");

// Перенаправляет на страницу с сообщением об удачной регистрации
header("Location: messages/user_reg_succes.php");

include ("../db/closedb.php");   // Закрывает соеденение с MySQL сервером
} 

// Выдает сообщения о пустых полях, если такие есть
else {
	print $err_message;
}
 

Spike_Manana

Новичок
Не не игнорирую, просто ещё мало всего знаю и сразу врубится не могу, но за посты Спасибо!!! ;)
 

Solid

Drosera anglica
Проверить username и password можно через:
PHP:
$result = mysql_query(sprintf("SELECT COUNT(*) as count FROM nap_users WHERE username='%s' AND password='%s'", mysql_real_escape_string($_POST['username']), mysql_real_escape_string($_POST['password'])));
if($result && mysql_num_rows($result)>0) {
 // vse ok, zashol
 // tut zapisyvaesh v cookies ili ispol'zuesh sessii
} else {
 // try again
}
 

McSimm

Новичок
empty() вещь хорошая, но она не пропускает нули
это желательно помнить. если поле должно быть непустым, но допускать значение '0', empty() не подходит.

Когда данные
if (!isset($var) or '' == $var) { /*поле не задано*/ }

VALUES ('$username', '$password', '$email', '$fname', '$lname', '$mname', '$regdate')");
Данные для SQL необходимо готовить. Скрипт может получить любые строки, но не любые готов принять SQL, а некоторые представляют угрозу.
Не поленитесь почитать про mysql_real_escape() и про sql injecting

Как сделать поле с паролем md5 необходимым?
Преобразовывать после проверки :)
 

MustDie

Новичок
суперглобальные массивы обязательно использовать?
или если только в php.ini отключено?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху