PHP-код продолжает создавать еще одну строку при каждом запуске кода

#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