Я продолжаю получать более 1 сообщения в моей регистрационной форме. Может ли кто-нибудь помочь мне понять, что я делаю не так? Я продолжаю смотреть на это, и я не уверен, где я ошибся.
Форма регистрации
<?php include_once("config.php");?>
<?php if( !(isset( $_POST['register']))) { ?>
<!DOCTYPE html>
<html>
<head>
<title>Register </title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<header id="head" >
<p>Please Register</p>
<p><a href="register.php"><span id="register">Register</span></a></p>
</header>
<div id="main-wrapper">
<div id="register-wrapper">
<form method="post">
<ul>
<li>
<label for="usn">Username : </label>
<input type="text" id="usn" maxlength="30" required autofocus name="username" />
</li>
<li>
<label for="passwd">Password : </label>
<input type="password" id="passwd" maxlength="30" required name="password" />
</li>
<li>
<label for="conpasswd">Confirm Password : </label>
<input type="password" id="conpasswd" maxlength="30" required name="conpassword" />
</li>
<li class="buttons">
<input type="submit" name="register" value="Register" />
<input type="button" name="cancel" value="Cancel" onclick="location.href='login.php'" />
</li>
</ul>
</form>
</div>
</div>
</body>
</html>
<?php
} else {
$usr = new Users;
$usr->storeFormValues( $_POST );
if( $_POST['password'] == $_POST['conpassword'] ) {
echo $usr->register($_POST);
} else {
echo "Password and Confirm password not match";
exit;
}
$username = ($_POST['username']);
$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$sthandler = $con->prepare("SELECT username FROM users WHERE username = :username");
$sthandler->execute(array(':username'=>$username));
if ( $sthandler->rowCount() > 0 ) {
echo ('<br> Sorry, the username '.$_POST['username'].' is already in use.');
}else{
echo "username is free";
}
}
?>
Зарегистрировать страницу функций
public function register() {
$correct = false;
try {
$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "INSERT INTO users(username, password) VALUES(:username, :password)";
$stmt = $con->prepare( $sql );
$stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
$stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
$stmt->execute();
return "Registration Successful <br/> <a href='index.php'>Login Now</a>";
}catch( PDOException $e ) {
return $e->getMessage();
}
}
Это сообщение, которое я продолжаю получать. Мне нужно 1 или другой для отображения. Не оба одновременно. ПЛЮС, это первый раз, когда я пытаюсь зарегистрировать j123, поэтому я не уверен, каким образом я получаю свое имя пользователя, чтобы показать, что имя пользователя действительно уже используется.
Registration Successful
Sorry, the username j123 is already in use.
Все просто, смотри:
Измени это:
if ( $sthandler->rowCount() > 0 ) {
echo ('<br> Sorry, the username '.$_POST['username'].' is already in use.');
}else{
echo "username is free";
}
Для этого:
if ( $sthandler->rowCount() > 0 ) {
echo ('<br> Sorry, the username '.$_POST['username'].' is already in use.'); exit();
}else{
echo "username is free";
}
Только добавьте «выход ();» после эха, когда счетчик вернет больше 0. Эта команда остановит скрипт.
Других решений пока нет …