#php #mysql #duplicates
#php #mysql #дубликаты
Вопрос:
Всякий раз, когда выполняется приведенный ниже код, в нужных местах таблицы создается правильная строка, но затем создается дополнительная строка с пустым именем пользователя, но паролем с этим md5 d41d8cd98f00b204e9800998ecf8427e
, который также пуст.
Код:
define("DB_SERVER", "localhost");
define("DB_USER", "will");
define("DB_PASS", "blahblah");
define("DB_NAME", "blah");
define("TBL_USERS", "users");
function addNewUser($username, $password){
global $connection;
$password1 = md5($password);
$username = mysql_real_escape_string($username);
$q = "INSERT INTO ".TBL_USERS." VALUES ('$username', '$password1')";
return mysql_query($q, $connection);
}
$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME, $connection) or die(mysql_error());
addNewUser($_POST["username"], $_POST["password"]);
}
Как мне остановить его от этого? Кстати, этот код выполняется в php-скрипте.
Ответ №1:
Просто предположение — возможно, он пытается выполнить запрос один раз в вашей строке «return» внутри функции, а затем снова, когда в вашей фактической строке вызова (addNewUsers).
Попробуйте это:
function addNewUser($username, $password){
$password1 = md5($password);
$username = mysql_real_escape_string($username);
$q = "INSERT INTO ".TBL_USERS." VALUES ('$username', '$password1')";
return $q;
}
$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME, $connection) or die(mysql_error());
mysql_query(addNewUser($_POST["username"], $_POST["password"]), $connection);
Комментарии:
1. Если он не выполняет запрос в функции, будет ли ему по-прежнему нужна глобальная переменная connection?
Ответ №2:
Похоже, что функция вызывается без установки переменных POST (потому что этот хэш соответствует пустой строке). Ваш код пытается добавить пользователя во время отображения формы? Если это так, убедитесь, что имя пользователя и пароль не пусты, прежде чем добавлять пользователя..
Нравится:
function addNewUser($username, $password){
global $connection;
if (empty($username) || empty($password))
return;
$password1 = md5($password);
$username = mysql_real_escape_string($username);
$q = "INSERT INTO ".TBL_USERS." VALUES ('$username', '$password1')";
return mysql_query($q, $connection);
}
Ответ №3:
Я думаю, вам следует встроить оператор if вокруг вашего вызова функции.
Попробуйте что-то вроде этого:
if(isset($_POST["send"]))
{
addNewUser($_POST["username"], $_POST["password"]);
}
$_POST[«отправить»] будет установлен при отправке формы.
Если вы не работаете с формой, вы можете проверить, установлены ли имя пользователя и пароль:
if(isset($_POST["username"]) amp;amp; isset($_POST["password"]))
{
addNewUser($_POST["username"], $_POST["password"]);
}
Я надеюсь, что это сработает!
Приветствую,
Mixxiphoid