Как я смогу проверить несколько факторов вместе вместо проверки на каждый из них? Поэтому в основном я использую PDO, и я должен убедиться, что имена пользователей и электронные письма уникальны. Итак, как бы я это сделал? я видел
if ( $sthandler->rowCount() > 0 ) { // do something here }
Но есть ли лучший способ сделать это. Также, если нет, кто-то может объяснить, как я буду работать с этим.
EDIT Вот мой код запроса, который вводится в базу данных
<?php try { $handler = new PDO('mysql:host=localhost;dbname=s','root', '*'); $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e){ exit($e->getMessage()); } $name = $_POST['name']; $username = $_POST['username']; $email = $_POST['email']; $password = $_POST['password']; $password1 = $_POST['passwordconf']; $ip = $_SERVER['REMOTE_ADDR']; //Verifcation if (empty($name) || empty($username) || empty($email) || empty($password) || empty($password1)) { echo "Complete all fields"; } // Password match if ($password != $password1) { echo $passmatch = "Passwords don't match"; } // Email validation if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo $emailvalid = "Enter a valid email"; } // Password length if (strlen($password) <= 6){ echo $passlength = "Choose a password longer then 6 character"; } function userExists($db, $user) { $userQuery = "SELECT * FROM userinfo u WHERE u.user=:user;"; $stmt = $db->prepare($userQuery); $stmt->execute(array(':user' => $user)); return !!$stmt->fetch(PDO::FETCH_ASSOC); } $user = 'userName'; $exists = userExists($db, $user); if(exists) { // user exists already. } else { // user doesn't exist already, you can savely insert him. } if(empty($passmatch) && empty($emailvalid) && empty($passlength)) { //Securly insert into database $sql = 'INSERT INTO userinfo (name ,username, email, password, ip) VALUES (:name,:username,:email,:password,:ip)'; $query = $handler->prepare($sql); $query->execute(array( ':name' => $name, ':username' => $username, ':email' => $email, ':password' => $password, ':ip' => $ip )); } ?>
<?php //Connections try { $handler = new PDO('mysql:host=localhost;dbname=s','root', '*'); $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e){ exit($e->getMessage()); } $name = $_POST['name']; $username = $_POST['username']; $email = $_POST['email']; $password = $_POST['password']; $password1 = $_POST['passwordconf']; $ip = $_SERVER['REMOTE_ADDR']; //Verifcation if (empty($name) || empty($username) || empty($email) || empty($password) || empty($password1)){ $error = "Complete all fields"; } // Password match if ($password != $password1){ $error = "Passwords don't match"; } // Email validation if (!filter_var($email, FILTER_VALIDATE_EMAIL)){ $error = "Enter a valid email"; } // Password length if (strlen($password) <= 6){ $error = "Choose a password longer then 6 character"; } if(!isset($error)){ //no error $sthandler = $handler->prepare("SELECT username FROM users WHERE username = :name"); $sthandler->bindParam(':name', $username); $sthandler->execute(); if($sthandler->rowCount() > 0){ echo "exists! cannot insert"; } else { //Securly insert into database $sql = 'INSERT INTO userinfo (name ,username, email, password, ip) VALUES (:name,:username,:email,:password,:ip)'; $query = $handler->prepare($sql); $query->execute(array( ':name' => $name, ':username' => $username, ':email' => $email, ':password' => $password, ':ip' => $ip )); } }else{ echo "error occured: ".$error; exit(); }
Что-то вроде этого должно работать:
function userExists($db, $user) { $userQuery = "SELECT * FROM userinfo u WHERE u.user=:user;"; $stmt = $db->prepare($userQuery); $stmt->execute(array(':user' => $user)); return !!$stmt->fetch(PDO::FETCH_ASSOC); } $user = 'userName'; $exists = userExists($db, $user); if(exists) { // user exists already. } else { // user doesn't exist already, you can savely insert him. }
Код, который вы показываете, не имеет смысла проверять уникальность имени пользователя и электронной почты. Вы должны установить UNIQUE KEY
в базе данных.