предотвратить повторяющиеся записи sql переполнение стека

Я работаю в системе баз данных, и я стараюсь избегать повторяющихся записей для электронной почты и имени пользователя. Я пытался, но это все еще отклоняет, но не в состоянии точно видеть, что отклоняется.
Может кто-нибудь сказать, объясните, где я не прав?

if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];

$sql="INSERT into users (username,password,email) VALUES('$username','$password','$email')";

$result = mysql_query("INSERT INTO users VALUES ('duplicate')");

if (!$result) {
echo "Enter a different value";
} else {
echo "Save successful.";

}
}

2

Решение

Я формулирую этот ответ только для того, чтобы показать вам основы проверки на наличие дубликатов и вставки.

В конечном итоге вы должны установить ограничение UNIQUE для данного столбца (столбцов) и использовать условный оператор, основанный на результате ошибки.

Посоветуйтесь с моим сноски ниже в отношении безопасности.

Sidenote # 1: Вы можете удалить OR Username= '".$username."' если вы не хотите проверять наличие электронной почты и имени пользователя.

Sidenote # 2: — Я не уверен, что имена ваших столбцов имеют смешанный регистр, поэтому вам, возможно, придется внести некоторые коррективы.

  • Электронная почта или электронная почта — Пароль или пароль — Имя пользователя или имя пользователя

Sidenote # 2: — Убедитесь, что все ваши элементы содержат атрибут name и что форма действительно использует метод POST.

Сначала запросите, затем, если пользователь / электронная почта не существует, выполните INSERT.

Это, если вы уже создали Подключение к БД: (см. другие примечания ниже сносок, под «Установление соединения с БД»).

if(isset($_POST['submit'])){

$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];

$query = "SELECT * FROM users
where email='".$email."'
OR Username= '".$username."'";

$result = mysql_query($query);

if(mysql_num_rows($result) > 0){
echo "A record already exists.";
exit;
}

else{
$insert = mysql_query("INSERT into users (email, Username, Password)
VALUES ('".$email."','".$username."', '".$password."')");
}

if($insert){
echo "Success";
}

else{
echo "There was an error " . mysql_error();
}

mysql_close();

} // brace for if(isset($_POST['submit']))

Вы также можете заменить

$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];

с

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$email = mysql_real_escape_string($_POST['email']);

для некоторой дополнительной безопасности, пока вы не начнете использовать подготовленные заявления.


Примечания:

По поводу безопасности.

Не используйте старые mysql_ API, и вы не должны хранить пароли в виде простого текста.

использование mysqli с подготовленными заявлениями, или же PDO с подготовленными заявлениями.

Для хранения пароля используйте CRYPT_BLOWFISH или PHP 5.5 password_hash() функция.

Для PHP < 5.5 использовать password_hash() compatibility pack.


Добавьте отчет об ошибках в начало файла (ов), который поможет найти ошибки.

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

// rest of your code

Примечание: Отчеты об ошибках должны выполняться только на стадии подготовки, а не на производстве.


Установление соединения с БД:

То есть из руководства mysql_select_db():

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Not connected : ' . mysql_error());
}

// make foo the current db
$db_selected = mysql_select_db('foo', $link);
if (!$db_selected) {
die ('Can\'t use foo : ' . mysql_error());
}
5

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

Привет! Проверьте определение таблицы MySQL, если в столбце электронной почты и имени пользователя установлен UNIQUE KEY. Без этого флажка таблицы по-прежнему принимают все электронные письма и имена пользователей.

Также попробуйте получить информацию, если что-то плохое случится.

if (!$result) {
die('Invalid query: ' . mysql_error());
}
0

просто установите структуру столбца вашей таблицы электронной почты и имя пользователя на UNIQUE
тогда все будет хорошо.
если вы пытались вставить дубликаты данных
он не будет вставлен и mysql_query вернет false

0

При создании таблицы …

CREATE TABLE table_name (
column_name data_type(size) constraint_name
)

…Вы можете использовать UNIQUE ограничение вот так:

CREATE TABLE table_name (
column_name data_type(size) UNIQUE
)

Это ограничение нечувствительно к регистру, что означаетИмя пользователя‘ а также ‘имя пользователясчитаются идентичными.

Нажмите Вот для получения дополнительной информации об этом ограничении.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector