проверка — PHP / MySQL: проверьте, существует ли имя пользователя

Я новичок в php, и я хочу проверить, существует ли введенное имя пользователя уже.

Вот мой код

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);

if (isset($_POST['submit'])) {
include "connect.php";
ValidateUser();
}function ValidateUser()
{
if (!empty($_POST['username']) AND !empty($_POST['password'])) {
$queryrow=mysqli_query("SELECT * FROM websiteusers WHERE username = '$_POST['username']'");
if ($rows=mysqli_num_rows($queryrow)=0) {
RegisterUser();
}
}

function RegisterUser() {
echo "works up to here";
}
?>

Это даже не дает мне ошибку, несмотря на включение отчетов об ошибках.

-2

Решение

Вы даже инициализировали mysqli_connect?

$Connection =  mysqli_connect("host","user","pass","database");

Затем передайте его функции, которая использует mysqli_query() от:

function foo ($DB){
mysqli_query($DB,"QUERY HERE");
// Do other stuff
return /* Whatever you wish to return here*/
}
foo($Connection);
0

Другие решения

То, что вы пытаетесь достичь, может быть легко сделано с помощью следующего кода. Еще большее беспокойство вызывает безопасность. Хорошей практикой является дезинфекция ввода каждый раз, когда у пользователя есть возможность ввести текст.

Кроме того, использование подготовленных запросов создаст еще один уровень безопасности.

Хотя это не использует предоставленный вами код напрямую, я считаю, что это полезно учить хорошим привычкам.

Если у вас есть вопросы, не стесняйтесь спросить.

$username = $_POST['username']; <-- sanitize this
$message = null;
$mysqli = new mysqli("localhost", "user", "password", "database");

$stmt = $mysqli->prepare("SELECT username FROM websiteusers WHERE username=?");
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($usernamesql);
$stmt->fetch();

if ($stmt->num_rows() > 0) {
RegisterUser();
} else {
$message .= 'username already exists';
}

Позже, когда вам потребуется запросить больше элементов или связать больше результатов:

$stmt = $mysqli->prepare("SELECT username,password,other1,other2 FROM websiteusers WHERE username=?");
$stmt->bind_param('s', $username); <-- the "s" means the argument is a strings, if a argument is stored as an int use "i", but one character for each argument is required.
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($usernamesql);
$stmt->fetch();

Несколько аргументов:

$stmt = $mysqli->prepare("SELECT username,password,other1,other2 FROM websiteusers WHERE username=? AND authenticated=?");
$stmt->bind_param('si', $username,$isauthenticated); <-- second argument is a INT or BOOL
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($usernamesql,$passwordsql,$other1sql,$other2sql);
$stmt->fetch();

Когда вы ожидаете несколько результатов, и скажем, вы хотите, чтобы вывести их в массивы:

$userarray = array();

$stmt = $mysqli->prepare("SELECT username FROM websiteusers WHERE username=?");
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($usernamesql);

while($stmt->fetch()){
array_push($userarray, $usernamesql);
}

$ userarray теперь является массивом всех результатов, извлеченных из базы данных.

0

Вот правильный способ сделать это:

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);

if (isset($_POST['submit'])) {
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

if(check_user($mysqli, $_POST['username']){
registerUser();
}else{
echo 'user exist, cannot register';
}

}

function check_user($conn, $username){
$query = "SELECT * FROM websiteusers WHERE username = ?";

if ($stmt = $conn->prepare($query)) {
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->close();
}

return $stmt->num_rows === 0;
}function registerUser() {
echo "registering user ...";
}
0
По вопросам рекламы [email protected]