Проблема в том, что код не может проверить, было ли уже выполнено имя пользователя, есть ли в базе данных какой-либо код, который может проверить имя пользователя?PHP и MySQL - Проверьте, не найдено ли имя пользователя
Я экспериментирую с некоторыми из моих кодов, а затем, вероятно, искал его и в Stack Overflow об этой проблеме. Я пробовал это solution, но, видимо, это дает мне ошибки. Когда я попробовал это, предупреждение:
mysql_query() expects parameter 2 to be resource, object given in C:... on line ...
и проблема
mysql_num_rows() expects parameter 1 to be resource, null given in C:... on line ...
Я на самом деле ищу решение для этой проблемы или учебник, как решить эту проблему.
Мой код:
<?php
require_once("functions.php");
require_once("db-const.php");
session_start();
if (logged_in() == true) {
redirect_to("profile.php");
}
?>
<?php
?>
<html>
<head>
<title>Prospekt Member Area</title>
</head>
<body>
<h1> Register Here </h1>
<h2>© Kirk Niverba</h2>
<hr />
<!-- The HTML registration form -->
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
Username: <input type="text" name="username" /><br />
Password: <input type="password" name="password" /><br />
First name: <input type="text" name="first_name" /><br />
Last name: <input type="text" name="last_name" /><br />
Email: <input type="type" name="email" /><br />
<input type="submit" name="submit" value="Register" />
<a href="login.php">Already have an account?</a>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (empty($_POST['username']) || empty($_POST['password']) || empty($_POST['first_name']) || empty($_POST['last_name']) || empty($_POST['email'])) {
echo "Please fill all the fields!";
}
elseif (isset($_POST['submit'])) {
## connect mysql server
$mysqli = new mysqli(localhost, root, "", loginsecure);
# check connection
if ($mysqli->connect_errno) {
echo "<p>MySQL error no {$mysqli->connect_errno} : {$mysqli->connect_error}</p>";
exit();
}
## query database
# prepare data for insertion
$username = $_POST['username'];
$mainpass = $_POST['password'];
$password = hash('sha256', $mainpass);
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$email = $_POST['email'];
# check if username and email exist else insert
// u = username, e = emai, ue = both username and email already exists
$user = $_POST['username'];
$usernamecheck=mysql_query("SELECT username FROM users WHERE username='$user'", $mysqli);
if (mysql_num_rows($usernamecheck)>=1){
echo $user." is already taken";
}
else{
# insert data into mysql database
$sql = "INSERT INTO `users` (`id`, `username`, `password`, `first_name`, `last_name`, `email`)
VALUES (NULL, '{$username}', '{$password}', '{$first_name}', '{$last_name}', '{$email}')";
if ($mysqli->query($sql)) {
header("Location: checklogin.php?msg=Registered Successfully!");
} else {
echo "<p>MySQL error no {$mysqli->errno} : {$mysqli->error}</p>";
exit();
}
}
}
}
?>
<hr />
</body>
</html>
вы смешиваете '' mysqli' и mysql' функция - держать в одной или другой, prefably 'mysqli' и использовать подготовленные заявления, а не непосредственно вложение переменных в SQL. Также я замечаю, что ваше использование фигурных скобок немного «ударило или пропустило» - я подозреваю, что логика не работает правильно в коде, потому что вы, похоже, не балансируете их – RamRaider
Предупреждение: ваш код уязвим для [SQL-инъекций ] (https://en.wikipedia.org/wiki/SQL_injection). Пожалуйста, прочитайте [этот пост] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php), чтобы узнать больше о том, как его предотвратить. – Pang
virtualAon, пожалуйста, проверьте приведенный ниже ответ и отметьте и подтвердите один ответ, как принято. вы можете проголосовать за других, если они тоже полезны. thkan –