Проблем със if else при проверка за регистриран потребител

kamelia90

Registered
Здравейте, от доста време ползвам сайта.
Мого полезни уроци има.
Доста чесото чета из форума, и знам че повечето от вас разбират доста.
И се надявам че ще споделяте своя опит.
Правя си една логин системка и имам следния проблем:
Проверката за регистрирани юзери не работи както трябва
ето го и кода :

Код:
<?php
define('IN_VALID', true); 
include ("include/header.php");
include ("modules/login.php");
include ("modules/stats.php");
echo ('
<div id="rightbar">');
@$query = mysql_query("SELECT * FROM `users` WHERE session='$ses'");
@$red = mysql_num_rows($query);
if ($red != NULL) {
$my_id = mysql_result($query, "0", "id");
$my_ime = mysql_result($query, "0", "username");
echo ('Вие вече имате акаунт и сте в него.');
}
else {
$a = rand(0,99); 
$b = rand(0,9); 
$random = "$a"."$b";
echo '<form name="reg" method="post">
<table border=0 width="64%" id="font2">
<tr>
<td colspan="2" align="center"></td>
</tr>
<tr>
<td align="right"><p class="margin">Потребител:</p></td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td align="right"><p class="margin">Е-майл:</p></td>
<td>
<input type="text" name="email" /></td>
</tr>
<tr>
<td align="right"><p class="margin">Парола:</p></td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td align="right"><p class="margin">Повтори паролата:</p></td> 
<td><input type="password" name="password2">
</td>
</tr>
<tr> 
<td align="right"><p class="margin">Секретен код</p></td>
<td><input name="code1" type="text" id="code1" readonly="readonly" value="';?><? echo "$random"; ?><? echo '" /></td>
</td>
</tr>
<tr> 
<td align="right"><p class="margin">Повтори кода</p></td>
<td><input name="code2" type="text" size="25" /></td> 
</tr> 
<tr>
<td colspan="2" align="center">
<br /><input type="submit" name="submit" value="Регистрация" />
</td>
</tr>
</table>
</form>';
}
if (isset($_POST["submit"])) { 
if (!empty($_POST["username"])) $username = htmlspecialchars($_POST["username"]); 
else $errMsg = "Моля въведете потребител!<br />"; 
if (!empty($_POST["password"])) $password = htmlspecialchars($_POST["password"]); 
else $errMsg = "Моля въведете парола!<br />"; 
if (!empty($_POST["email"])) $email = htmlspecialchars($_POST["email"]); 
else $errMsg = "Моля въведете е-майл!<br />"; 
if (strlen($_POST['password']) < 6) $errMsg = "Паролата Ви е твърде къса!<br />"; 
if (empty($errMsg)) {
$chek = mysql_query("SELECT * FROM `users` WHERE `username`='$username'")or die(mysql_error()); //проверка да ли потребителя същестува
$chek = mysql_num_rows($chek); 
if ($chek=='1') { 
echo 'Този потребител вече е регистриран! <a href="?p=reg">Назад</a>'; //Изкарва резултат защото потребителя съществува
}

$chek2 = mysql_query("SELECT * FROM `users` WHERE `email`='$email'")or die(mysql_error()); //проверка да ли емайла е използван
$chek2 = mysql_num_rows($chek2); 
if ($chek2=='1') { 
echo 'Този емайл вече е бил използан от друг потребител!'; //Изкарва резултата защото вече има такъв емайл
}

else {
$code1 = $_POST['code1']; 
$code2 = $_POST['code2']; 
if($code1 !== $code2){ 
echo "Кода не съвпада"; 
die(); 
};

$ip = ip2long($_SERVER['REMOTE_ADDR']);
$level = "1";
$password = md5($password);
$insert = mysql_query("INSERT INTO users(username, password, email, ip, level) VALUES('$username', '$password', '$email', '$ip', '$level')")or die(mysql_error()); 
echo 'Здравей <b>' . $username . '</b>! Регистрацията е успешна!';
echo ("<meta http-equiv=\"refresh\" content=\"3; url=index.php\">");
}} 
else 
echo $errMsg; 
mysql_close(); 
}
echo ('</div>
<div id="footer">
Copyright (c) <a href="http://web-tourist.net/forum/profile.php?mode=viewprofile&u=nom3r1"><b>nom3r1</b></a>
</div>
</div>
</center>
</body>
</html>');
?>

ето и само частта с проверките:

Код:
}
if (isset($_POST["submit"])) { 
if (!empty($_POST["username"])) $username = htmlspecialchars($_POST["username"]); 
else $errMsg = "Моля въведете потребител!<br />"; 
if (!empty($_POST["password"])) $password = htmlspecialchars($_POST["password"]); 
else $errMsg = "Моля въведете парола!<br />"; 
if (!empty($_POST["email"])) $email = htmlspecialchars($_POST["email"]); 
else $errMsg = "Моля въведете е-майл!<br />"; 
if (strlen($_POST['password']) < 6) $errMsg = "Паролата Ви е твърде къса!<br />"; 
if (empty($errMsg)) {
$chek = mysql_query("SELECT * FROM `users` WHERE `username`='$username'")or die(mysql_error()); //проверка да ли потребителя същестува
$chek = mysql_num_rows($chek); 
if ($chek=='1') { 
echo 'Този потребител вече е регистриран! <a href="?p=reg">Назад</a>'; //Изкарва резултат защото потребителя съществува
}

$chek2 = mysql_query("SELECT * FROM `users` WHERE `email`='$email'")or die(mysql_error()); //проверка да ли емайла е използван
$chek2 = mysql_num_rows($chek2); 
if ($chek2=='1') { 
echo 'Този емайл вече е бил използан от друг потребител!'; //Изкарва резултата защото вече има такъв емайл
}

Помагайте :)
 
Изписва че потребителя е вече регистритан , но въпреки това прави регистряцията със същото име :(
 
Код:
<?php
define('IN_VALID', true); 
include ("include/header.php");
include ("modules/login.php");
include ("modules/stats.php");
echo ('
<div id="rightbar">');
@$query = mysql_query("SELECT * FROM `users` WHERE session='$ses'");
@$red = mysql_num_rows($query);
if ($red != NULL) {
$my_id = mysql_result($query, "0", "id");
$my_ime = mysql_result($query, "0", "username");
echo ('Вие вече имате акаунт и сте в него.');
}
else {
$a = rand(0,99); 
$b = rand(0,9); 
$random = "$a"."$b";
echo '<form name="reg" method="post">
<table border=0 width="64%" id="font2">
<tr>
<td colspan="2" align="center"></td>
</tr>
<tr>
<td align="right"><p class="margin">Потребител:</p></td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td align="right"><p class="margin">Е-майл:</p></td>
<td>
<input type="text" name="email" /></td>
</tr>
<tr>
<td align="right"><p class="margin">Парола:</p></td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td align="right"><p class="margin">Повтори паролата:</p></td> 
<td><input type="password" name="password2">
</td>
</tr>
<tr> 
<td align="right"><p class="margin">Секретен код</p></td>
<td><input name="code1" type="text" id="code1" readonly="readonly" value="';?><? echo "$random"; ?><? echo '" /></td>
</td>
</tr>
<tr> 
<td align="right"><p class="margin">Повтори кода</p></td>
<td><input name="code2" type="text" size="25" /></td> 
</tr> 
<tr>
<td colspan="2" align="center">
<br /><input type="submit" name="submit" value="Регистрация" />
</td>
</tr>
</table>
</form>';
}
if (isset($_POST["submit"])) { 
if (!empty($_POST["username"])) $username = htmlspecialchars($_POST["username"]); 
else $errMsg = "Моля въведете потребител!<br />"; 
if (!empty($_POST["password"])) $password = htmlspecialchars($_POST["password"]); 
else $errMsg = "Моля въведете парола!<br />"; 
if (!empty($_POST["email"])) $email = htmlspecialchars($_POST["email"]); 
else $errMsg = "Моля въведете е-майл!<br />"; 
if (strlen($_POST['password']) < 6) $errMsg = "Паролата Ви е твърде къса!<br />"; 

$chek = mysql_query("SELECT * FROM `users` WHERE `username`='$username'")or die(mysql_error()); //проверка да ли потребителя същестува
$chek = mysql_num_rows($chek); 
if ($chek=='1') $errMsg = "Този потребител вече е регистриран! <a href=\"?p=reg\">Назад</a>";

$chek2 = mysql_query("SELECT * FROM `users` WHERE `email`='$email'")or die(mysql_error()); //проверка да ли емайла е използван
$chek2 = mysql_num_rows($chek2); 
if($chek2=='1')$errMsg = "Този емайл вече е бил използан от друг потребител!";
$code1 = $_POST['code1']; 
$code2 = $_POST['code2']; 
if($code1 !== $code2)$errMsg ="Кода не съвпада"; 
if (empty($errMsg)) {
$ip = ip2long($_SERVER['REMOTE_ADDR']);
$level = "1";
$password = md5($password);
$insert = mysql_query("INSERT INTO users(username, password, email, ip, level) VALUES('$username', '$password', '$email', '$ip', '$level')")or die(mysql_error()); 
echo 'Здравей <b>' . $username . '</b>! Регистрацията е успешна!';
echo ("<meta http-equiv=\"refresh\" content=\"3; url=index.php\">");
} 
else 
echo $errMsg; 
mysql_close(); 
echo ('</div>
<div id="footer">
Copyright (c) <a href="http://web-tourist.net/forum/profile.php?mode=viewprofile&u=nom3r1"><b>nom3r1</b></a>
</div>
</div>
</center>
</body>
</html>');
}
?>
 
Пробвай по този начин:
Код:
}
if (isset($_POST["submit"])) {
if (!empty($_POST["username"])) { $username = htmlspecialchars($_POST["username"]); }
else { $errMsg[] = "Моля въведете потребител!<br />"; }
if (!empty($_POST["password"])) { $password = htmlspecialchars($_POST["password"]); }
else { $errMsg[] = "Моля въведете парола!<br />"; }
if (!empty($_POST["email"])) { $email = htmlspecialchars($_POST["email"]); }
else { $errMsg[] = "Моля въведете е-майл!<br />"; }
if (strlen($_POST['password']) < 6) { $errMsg[] = "Паролата Ви е твърде къса!<br />"; }
$check = mysql_query("SELECT * FROM `users` WHERE `username`='$username' AND `email`='$email'")or die(mysql_error()); //проверка да ли потребителя същестува
$check = mysql_num_rows($check);

if ($check >=1)
{
	$errMsg[] = 'Потр. име или е-мейл адреса са заети!';
}

if ($errMsg != null)
{
	foreach ($errMsg as $key)
	{
		//извежда всички грешки
		echo $key . '<br />';
	}
	// прекратяваме скрипта
	die();
}
else
{
// тук добавяш логиката за регистрацията
}
 
c3c0 пробвах но сега изобщо не регистрира,незнам може и аз да съм объркала нещо (момента с логиката) :roll:
 
kamelia90 каза:
c3c0 пробвах но сега изобщо не регистрира,незнам може и аз да съм объркала нещо (момента с логиката) :roll:
Каква грешка ти дава и добави ли логиката за регистрация?
 
c3c0 ето какво съм написала
Код:
<?php 
define('IN_VALID', true); 
include ("include/header.php"); 
include ("modules/login.php"); 
include ("modules/stats.php"); 
echo (' 
<div id="rightbar">'); 
@$query = mysql_query("SELECT * FROM `users` WHERE session='$ses'"); 
@$red = mysql_num_rows($query); 
if ($red != NULL) { 
$my_id = mysql_result($query, "0", "id"); 
$my_ime = mysql_result($query, "0", "username"); 
echo ('Вие вече имате акаунт и сте в него.'); 
} 
else { 
$a = rand(0,99); 
$b = rand(0,9); 
$random = "$a"."$b"; 
echo '<form name="reg" method="post"> 
<table border=0 width="64%" id="font2"> 
<tr> 
<td colspan="2" align="center"></td> 
</tr> 
<tr> 
<td align="right"><p class="margin">Потребител:</p></td> 
<td><input type="text" name="username" /></td> 
</tr> 
<tr> 
<td align="right"><p class="margin">Е-майл:</p></td> 
<td> 
<input type="text" name="email" /></td> 
</tr> 
<tr> 
<td align="right"><p class="margin">Парола:</p></td> 
<td><input type="password" name="password" /></td> 
</tr> 
<tr> 
<td align="right"><p class="margin">Повтори паролата:</p></td> 
<td><input type="password" name="password2"> 
</td> 
</tr> 
<tr> 
<td align="right"><p class="margin">Секретен код</p></td> 
<td><input name="code1" type="text" id="code1" readonly="readonly" value="';?><? echo "$random"; ?><? echo '" /></td> 
</td> 
</tr> 
<tr> 
<td align="right"><p class="margin">Повтори кода</p></td> 
<td><input name="code2" type="text" size="25" /></td> 
</tr> 
<tr> 
<td colspan="2" align="center"> 
<br /><input type="submit" name="submit" value="Регистрация" /> 
</td> 
</tr> 
</table> 
</form>'; 
} 
if (isset($_POST["submit"])) { 
if (!empty($_POST["username"])) { $username = htmlspecialchars($_POST["username"]); } 
else { $errMsg[] = "Моля въведете потребител!<br />"; } 
if (!empty($_POST["password"])) { $password = htmlspecialchars($_POST["password"]); } 
else { $errMsg[] = "Моля въведете парола!<br />"; } 
if (!empty($_POST["email"])) { $email = htmlspecialchars($_POST["email"]); } 
else { $errMsg[] = "Моля въведете е-майл!<br />"; } 
if (strlen($_POST['password']) < 6) { $errMsg[] = "Паролата Ви е твърде къса!<br />"; } 
$check = mysql_query("SELECT * FROM `users` WHERE `username`='$username' AND `email`='$email'")or die(mysql_error()); //проверка да ли потребителя същестува 
$check = mysql_num_rows($check); 

if ($check >=1) 
{ 
   $errMsg[] = 'Потр. име или е-мейл адреса са заети!'; 
} 

if ($errMsg != null) 
{ 
   foreach ($errMsg as $key) 
   { 
      //извежда всички грешки 
      echo $key . '<br />'; 
   } 
   // прекратяваме скрипта 
   die(); 
} 
else 
echo $errMsg; 
mysql_close(); 
echo ('</div> 
<div id="footer"> 
Copyright (c) <a href="http://web-tourist.net/forum/profile.php?mode=viewprofile&u=nom3r1"><b>nom3r1</b></a> 
</div> 
</div> 
</center> 
</body> 
</html>'); 
} 
?>

виж къде ми е грешката, и ако може ми го напиши :roll:
 
Добавих заявка, която да регистрира потребителя, но свери дали полетата в базата данни и тези, които съм написал са едни и същи. Между другото ти препоръчвам да смениш тази система, защото:
1. За да се установи дали потребителя е влязъл се изпълняват четири заявки. Напълно ненужно, защото това може да се провери със сесия.
2. Кода за сигурност не работи коректно и всеки път ще показва "Грешен код". Причината е, че той трябва да се запамети във сесия, след което да се провери дали е коректен.
3. Няма абсолютно никаква защита.
4. Много грозно е смесен дизайна и кода. Може да се използва темплейтна система или функции - и двата варианта са за предпочитане пред този.

Ето ти кода, надявам се, че този път ще проработи:
Код:
<?php
define('IN_VALID', true);
include ("include/header.php");
include ("modules/login.php");
include ("modules/stats.php");
echo ('
<div id="rightbar">');
@$query = mysql_query("SELECT * FROM `users` WHERE session='$ses'");
@$red = mysql_num_rows($query);
if ($red != NULL) {
$my_id = mysql_result($query, "0", "id");
$my_ime = mysql_result($query, "0", "username");
echo ('Вие вече имате акаунт и сте в него.');
}
else {
$a = rand(0,99);
$b = rand(0,9);
$random = "$a"."$b";
echo '<form name="reg" method="post">
<table border=0 width="64%" id="font2">
<tr>
<td colspan="2" align="center"></td>
</tr>
<tr>
<td align="right"><p class="margin">Потребител:</p></td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td align="right"><p class="margin">Е-майл:</p></td>
<td>
<input type="text" name="email" /></td>
</tr>
<tr>
<td align="right"><p class="margin">Парола:</p></td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td align="right"><p class="margin">Повтори паролата:</p></td>
<td><input type="password" name="password2">
</td>
</tr>
<tr>
<td align="right"><p class="margin">Секретен код</p></td>
<td><input name="code1" type="text" id="code1" readonly="readonly" value="';?><? echo "$random"; ?><? echo '" /></td>
</td>
</tr>
<tr>
<td align="right"><p class="margin">Повтори кода</p></td>
<td><input name="code2" type="text" size="25" /></td>
</tr>
<tr>
<td colspan="2" align="center">
<br /><input type="submit" name="submit" value="Регистрация" />
</td>
</tr>
</table>
</form>';
}
if (isset($_POST["submit"])) {
if (!empty($_POST["username"])) { $username = htmlspecialchars($_POST["username"]); }
else { $errMsg[] = "Моля въведете потребител!<br />"; }
if (!empty($_POST["password"])) { $password = htmlspecialchars($_POST["password"]); }
else { $errMsg[] = "Моля въведете парола!<br />"; }
if (!empty($_POST["email"])) { $email = htmlspecialchars($_POST["email"]); }
else { $errMsg[] = "Моля въведете е-майл!<br />"; }
if (strlen($_POST['password']) < 6) { $errMsg[] = "Паролата Ви е твърде къса!<br />"; }
$check = mysql_query("SELECT * FROM `users` WHERE `username`='$username' AND `email`='$email'")or die(mysql_error()); //проверка да ли потребителя същестува
$check = mysql_num_rows($check);

if ($check >=1)
{
   $errMsg[] = 'Потр. име или е-мейл адреса са заети!';
}

if ($errMsg != null)
{
   foreach ($errMsg as $key)
   {
      //извежда всички грешки
      echo $key . '<br />';
   }
   // прекратяваме скрипта
   die();
}
else
{
// записваме потребителя в базата данни
$save_user = mysql_query('INSERT INTO users (username, password, email) VALUES ("'.$username.'", "'.$password.'",
"'.$email.'"');

	if ($save_user)
	{
		echo 'Потребителя е записан успешно!';
	}
	
	else 
	{
		echo 'Потребителя не е записан успешно.';
	}
}
echo ('</div>
<div id="footer">
Copyright (c) <a href="http://web-tourist.net/forum/profile.php?mode=viewprofile&u=nom3r1"><b>nom3r1</b></a>
</div>
</div>
</center>
</body>
</html>');
}
?>
 
c3c0 успях най-накрая благодарение на теб ти ме подсети +1
само че вместо логическата функция and използвах OR и всичко заспа
Код:
}
if (isset($_POST["submit"])) { 
if (!empty($_POST["username"])) $username = htmlspecialchars($_POST["username"]); 
else $errMsg = "Моля въведете потребител!<br />"; 
if (!empty($_POST["password"])) $password = htmlspecialchars($_POST["password"]); 
else $errMsg = "Моля въведете парола!<br />"; 
if (!empty($_POST["email"])) $email = htmlspecialchars($_POST["email"]); 
else $errMsg = "Моля въведете е-майл!<br />"; 
if (strlen($_POST['password']) < 6) $errMsg = "Паролата Ви е твърде къса!<br />"; 
if (empty($errMsg)) {
$check = mysql_query("SELECT * FROM `users` WHERE `username`='$username' OR `email`='$email'")or die(mysql_error()); //проверка да ли потребителя същестува 
$check = mysql_num_rows($check); 

if ($check >=1) 
{ 
   $errMsg[] = 'Потр. име или е-мейл адреса са заети!'; 
} 

if ($errMsg != null) 
{ 
   foreach ($errMsg as $key) 
   { 
      //извежда всички грешки 
      echo $key . '<br />'; 
   } 
   // прекратяваме скрипта 
   die();
Мерси
Тази система би трябвало да има защити поне според nom3rl аз лично съм пробвала с SQL инжекции има си защита и на инклуд е има и доста забележки :?: ако знаеш някоя по добра готова система можеш да я споделиш :)
 
Ако използваш скрипта за логин (вход) трябва да е AND. Ако проверяваш дали потр. име ИЛИ (OR) е-мейл адреса ги има в базата данни (използва се при регистрация на нов потребител) правилно си използвала OR.
Може тази система да има защити (не съм я гледал цялата), но ти препоръчвам да не използваш само htmlspecialchars. Прегледай тези функции:
http://bg.php.net/manual/en/function.addslashes.php
http://bg.php.net/manual/en/function.mysql-real-escape-string.php

Успех!
 

Back
Горе