Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите с MySQL и PHP
Форумы портала PHP.SU » » Работа с СУБД » Помогите с MySQL и PHP

Страниц (2): [1] 2 »
 

1. improbable - 06 Марта, 2012 - 07:35:43 - перейти к сообщению
Есть форма входа на сайт

CODE (htmlphp):
скопировать код в буфер обмена
  1. <html>
  2. <body>
  3. <form name='form' method='POST' action='ver.php' >
  4. <center>
  5. Username: <input type='text' name='username' value=''><br>
  6. Password: <input type='password' name='password' value=''><br>
  7. <input type='submit' name='submit' value='Log In'>
  8. </center>
  9. </form>
  10. </body>
  11. </html>
  12.  


есть подключение к БД

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. /*
  3. DB Name  a3115530_db
  4. DB User  a3115530_admin
  5. DB Host  mysql10.000webhost.com
  6. */
  7.  
  8. // подключение к серверу MySQL
  9.  
  10. $dbc = mysql_connect('mysql10.000webhost.com', 'a3115530_admin', 'пароль не спалю'); // <host> <user> <pass>
  11.         if(!$dbc) {
  12.                 die('Подключение не удалось: ' . mysql_error());
  13.                           }
  14.  
  15. // выбираем БД
  16.  
  17. $db_selected = mysql_select_db("a3115530_db", $dbc); // <db name> <host> <user> <pass>
  18.         if(!$db_selected) {
  19.                 die('Подключение не удалось: ' . mysql_error());
  20.                                           }
  21. ?>


есть файл php, на который перенаправляет с формы входа

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include 'dbconnection.php';
  3. $pas = $_POST[password];
  4. $un = $_POST[username];
  5. $act = "SELECT password FROM users WHERE login = $un";
  6. ?>



ВНИМАНИЕ ВОПРОС: Как проверить совпадают ли пароль, введенный пользователем, и пароль из БД, который стоит напротив введенного username ($un)
(Добавление)
я уверен, тут это каждый знает, просто напишите плз
2. Dezmont - 06 Марта, 2012 - 08:00:51 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $password = mysql_query($act) or die(mysql_error());
  2. $array = mysql_fetch_assoc($password);
  3. if($_POST['password'] !== $array['password']){
  4.    die('Incorrect password.');
  5. }
  6. // Выполняете ваш скрипт если пароли совпадают.

Сравнение жёсткое, поэтому должен совпадать тип данных.
3. improbable - 06 Марта, 2012 - 08:03:07 - перейти к сообщению
спасибо, а перед выполнения скрипта надо else?
4. Dezmont - 06 Марта, 2012 - 08:04:54 - перейти к сообщению
Если у вас скрипт выглядит так, как вы описали, то никакого else не надо. Если пароли не совпадают, die() остановит выполнение скрипта и выведет сообщение об ошибке. Если пароли совпадут, выполнение скрипта продолжится после блока if.
5. improbable - 06 Марта, 2012 - 08:11:15 - перейти к сообщению
вроде-бы подставил то, что Вы написали, но видимо не туда...

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include 'dbconnection.php';
  3. $pas = $_POST[password];
  4. $un = $_POST[username];
  5. $act = mysql_real_escape_string("SELECT password FROM users WHERE username = $un");
  6. $password = mysql_query($act) or die(mysql_error());
  7. $array = mysql_fetch_assoc($password);
  8. if($_POST['password'] !== $array['password']){
  9.    die('Incorrect password.');
  10. }
  11. echo "1223";
  12. ?>


при логине admin и пароле 123 пишет

Цитата:
Unknown column 'admin' in 'where clause'

(Добавление)
немного поправил, вот http://untoldwealth[dot]hostoi[dot]com/login.php

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include 'dbconnection.php';
  3. $password = mysql_query("SELECT password FROM users WHERE login = $un") or die(mysql_error());
  4. $array = mysql_fetch_assoc($password);
  5. if($_POST['password'] !== $array['password']){
  6.    die('Incorrect password.');
  7. }
  8. ?>


пишет

Цитата:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
6. snikers987 - 06 Марта, 2012 - 08:37:01 - перейти к сообщению
Dezmont зачем весь запрос через mysql_real_escape_string()?

PHP:
скопировать код в буфер обмена
  1.  
  2. //database conection is already established
  3. $login = mysql_real_escape_string($_POST['login']);
  4. $pass = mysql_real_escape_string($_POST['pass']);
  5. $rResult = mysql_query('SELECT `id` FROM `users` WHERE `login` = "'.$login.'" AND `pass` = "'.$pass.'"');
  6. if(!mysql_num_rows($rResult)){
  7.     echo 'Incorrect password';
  8. }
  9.  
7. improbable - 06 Марта, 2012 - 08:38:46 - перейти к сообщению
я тоже не понял ту строчку, пробовал без нее...
еще с переменными не очень понятно, $act получается переопределяется... толком запрос не задан. кто может написать?
8. Dezmont - 06 Марта, 2012 - 08:42:10 - перейти к сообщению
snikers987, ничего страшного ведь не случится? Я просто дополнил код по ходу. ctrl+c, ctrl+v в конец и он работает.

А зачем создавать переменные $un,$pas?
9. improbable - 06 Марта, 2012 - 08:44:32 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. include 'dbconnection.php';
  2. $act = "SELECT password FROM users WHERE login = $un";
  3. $password = mysql_query($act) or die(mysql_error());
  4. $array = mysql_fetch_assoc($password);
  5. if($_POST['password'] !== $array['password']){
  6.    die('Incorrect password.');
  7. }



Цитата:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
10. Dezmont - 06 Марта, 2012 - 08:46:32 - перейти к сообщению
improbable, я вам скинул рабочий вариант. Зачем вы исправляете на неверный?

Строку можно даже в Gogle вставить, он вам переведёт. Error in SQL Syntax.

$un заключите в одинарные кавычки '$un'
11. snikers987 - 06 Марта, 2012 - 08:47:16 - перейти к сообщению
Dezmont пишет:
snikers987, ничего страшного ведь не случится? Я просто дополнил код по ходу. ctrl+c, ctrl+v в конец и он работает.

А зачем создавать переменные $un,$pas?

Он не может работать, mysql_real_escape_string() его 'сломала', нужно содержимое переменных экранировать, а не весь запрос.
12. improbable - 06 Марта, 2012 - 08:50:05 - перейти к сообщению
' вроде деактивируют переменную внутри?
вообще полностью правильный код можно?
у меня есть файл подключения к БД dbconnection.php - он рабочий
13. Dezmont - 06 Марта, 2012 - 08:56:24 - перейти к сообщению
snikers987 пишет:
Dezmont пишет:
snikers987, ничего страшного ведь не случится? Я просто дополнил код по ходу. ctrl+c, ctrl+v в конец и он работает.

А зачем создавать переменные $un,$pas?

Он не может работать, mysql_real_escape_string() его 'сломала', нужно содержимое переменных экранировать, а не весь запрос.


Что-то шарик за ролик, извините. Проэкранировал кавычки...
14. improbable - 06 Марта, 2012 - 09:03:04 - перейти к сообщению
snikers987

Цитата:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/a3115530/public_html/ver.p hp on line 6


PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include 'dbconnection.php';
  3. $login = mysql_real_escape_string($_POST['login']);
  4. $pass = mysql_real_escape_string($_POST['pass']);
  5. $rResult = mysql_query('SELECT `id` FROM `users` WHERE `username` = "'.$login.'" AND `pass` = "'.$pass.'"');
  6. if(!mysql_num_rows($rResult)){
  7.     echo 'Incorrect password';
  8. }
  9. ?>



и еще, поправочка, в таблице не логин, оказывается, а 'username')))
но по-любому не работает.
я думал это элементарно для форумчан, оказывается не совсем))
(Добавление)
УРААА!

Правильный код:

PHP:
скопировать код в буфер обмена
  1. include 'dbconnection.php';
  2. $login = mysql_real_escape_string($_POST['username']);
  3. $pass = mysql_real_escape_string($_POST['password']);
  4. $rResult = mysql_query('SELECT `id` FROM `users` WHERE `username` = "'.$login.'" AND `password` = "'.$pass.'"');
  5. if(!mysql_num_rows($rResult)){
  6.     echo 'Incorrect password';
  7. }


Всем спасибо!
15. snikers987 - 06 Марта, 2012 - 10:02:57 - перейти к сообщению
Дык тут нет екстрасенсов, Вам виднее как в Вашей бд поля называются..Помоему много ума не нужно, чтобы пример под свой случай исправит.
Если уж на то пошло, то драйвер mysql_ вообще не стоит использовать.

 

Powered by ExBB FM 1.0 RC1