2016-01-07 3 views
0

У меня есть форма входа в систему, которая работает, как если бы пользовательский пароль для электронной почты и 2 pic был правильным, тогда echo вошел в систему, но проблема в том, что мой адрес электронной почты соответствует совпадению, но как я могу сопоставлять изображения с single [select html tag]. вот мой HTML форма ....Совпадение отдельных данных с двумя столбцами: mysql

<select name="image" multiple="multiple"> 
    <?php 
    for($i=0;$i<5;$i++) 
    echo"<option data-img-src=\"$pic[$i]\" value=\"$pic[$i]\" ></option>"; 
    ?> 
    </select> 

И MySQL запрос здесь .......

$mysql=mysql_query("SELECT * FROM `table` WHERE `email`='$email' AND `password`='$pass' AND `image1`='$image' AND `image2`='$image'") or die(mysql_error()); 

if(mysql_num_rows($mysql) ==1){ 
    $_SESSION['user']= $email; 
    header("location: home.php");    
    } else { 
    echo "error"; 
    session_destroy(); 
} 

Если оба изображения совпадают, то он успешно вошел в противном случае не

+1

[Ваш скрипт подвержен риску инъекций SQL.] (Http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –

+1

Пожалуйста, [прекратите использование ' mysql_ * 'functions] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). [Эти расширения] (http://php.net/manual/en/migration70.removed-exts-sapis.php) были удалены в PHP 7. Узнайте о [подготовленном] (http: //en.wikipedia.org/wiki/Prepared_statement) для [PDO] (http://php.net/manual/en/pdo.prepared-statements.php) и [MySQLi] (http://php.net/manual/en/mysqli .quickstart.prepared-statements.php) и подумайте об использовании PDO, [это очень легко] (http://jayblanchard.net/demystifying_php_pdo.html). –

+1

Для обеспечения безопасности паролей воспользуйтесь встроенными функциями PHP (http://jayblanchard.net/proper_password_hashing_with_PHP.html). Если вы используете версию PHP менее 5.5, вы можете использовать 'password_hash()' [пакет совместимости] (https://github.com/ircmaxell/password_compat). –

ответ

1

Идея заключалась бы в том, что каждое «изображение» привязано к идентификатору в вашем коде и/или базе данных. Когда человек выбирает изображение, он фактически выбирает идентификатор, который представляет это изображение.

Пользователи, настраивая свой профиль, проходят аналогичный процесс, выбирая изображение (которое сохраняет идентификатор изображения в строке пользователя).

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

Это БАЗОВАЯ ПОМЕЩЕНИЕ, и она не охватывает аспекты безопасности этой функции.

Я также вижу, что ваш HTML поддерживает пользователю возможность выбора нескольких изображений (хотя в вашем SQL-запросе используется только ссылка на ссылку до двух). Реализация для этого не сильно меняется по сравнению с выбором одного изображения, поэтому этот ответ по-прежнему применяется.

1

(Извините за мою терминологию) Как следует из ответа Шона, каждое изображение должно быть связано с идентификатором.

Во время регистрации перед введением значений в базу данных вы можете сгенерировать случайное число и переименовать изображение на этот сгенерированный номер и добавить его в базу данных. структура файла будет что-то вроде этого

пользователей/изображения/random_id.jpeg

Как я бы идти об этом процесс регистрации будет,

Об изменении входных данных, я бы выполнить ajax-запрос для получения уникального идентификатора, связанного с электронной почтой или именем пользователя, и изображения, связанного с этим идентификатором и четырьмя другими случайными изображениями.

Тогда остальное просто, пользователь будет выбирать изображение. Разумеется, мы будем сопоставлять его уникальный идентификатор с идентификатором, который существует в базе данных.

Если его совпадение, войдите в систему.

Это просто логический подход.

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