2015-07-01 5 views
2

Это все очень ново для меня, и я знаю только самые основы. Я создаю логин для входа на веб-страницу (очевидно, безопасность - это не огромная сделка, или я бы этого не делал). Я продолжаю сталкиваться с предложением «где», заявляя, что «пользователь» не существует. База данных настроена следующим образом: dbname = connectivity Таблица = пользователи пользователи имеют идентификатор, пользователь и пароль. Кто-нибудь хочет дать мне несколько указателей? Заранее спасибо.Ошибка настройки входа в систему MySQL MySQL

<?php 
define('DB_HOST', 'localhost'); 
define('DB_NAME', 'connectivity'); 
define('DB_USER','root'); 
define('DB_PASSWORD',''); 
$con=mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Ya done goofed: " . mysql_error()); 
$db=mysql_select_db(DB_NAME,$con) or die("Ya done goofed: " . mysql_error()); 

function SignIn() 
{ 
session_start(); 
if(!empty($_POST['user'])) 


{ 
    $query = mysql_query("SELECT * FROM users where user = `$_POST[user]` AND pass = '$_POST[pass]'") or die(mysql_error()); 
    $row = mysql_fetch_array($query) or die(mysql_error()); 
    if(!empty($row['user']) AND !empty($row['pass'])) 
    { 
     $_SESSION['user'] = $row['pass']; 
     echo "SUCCESSFULLY LOGIN TO USER PROFILE PAGE..."; 

    } 
else 
{ 
    echo "SORRY... YOU ENTERD WRONG ID AND PASSWORD... PLEASE RETRY..."; 
} 
} 
} 
if(isset($_POST['submit'])) 
{ 
    SignIn(); 
} 

?> 
+0

Вы знаете, что значение столбца пользователя фактически соответствует значению $ _POST [пользователя] ? – bowlturner

ответ

-2

Вы отсутствуют котировки

Исправленный код:

$query = mysql_query("SELECT * FROM `users` WHERE `user` = `'".$_POST["user"]."'` AND pass = '".$_POST["pass"]."'") or die(mysql_error()) 
+1

PHP будет давать ошибки при использовании одинарных кавычек в ключах массива внутри строки –

+0

Я исправляю стоп ... я не использовал PDO plus, я всегда присваиваю переменную $ _POST [''] до запроса – petebolduc

+0

@petebolduc это не PDO, он отвлечен mysql_ * – SuperDJ

2

Есть некоторые вопросы здесь:

SELECT * FROM users where user = `$_POST[user]` AND pass = '$_POST[pass]' 

котировка стили повсюду. Попробуйте следующее:

SELECT * FROM `users` WHERE `user` = '$_POST[user]' AND `pass` = '$_POST[pass]' 

Также вы должны предварительно обработать SQL-инъекцию, если вы еще этого не сделали.

+0

Чтобы уточнить: используйте обратные ссылки ('') для цитирования имен таблиц и полей в базе данных. Используйте одиночные или двойные кавычки ('' 'и' '' соответственно) для цитирования ваших значений. И как @ mike.k справедливо говорит - не забудьте избежать ваших значений для защиты от SQL-инъекции - см. 'Mysql_real_escape_string()'. – Alex

+0

Большое спасибо за советы. Я знаю, что мне нужно многому научиться, и я ценю, что вы тратили время на комментарии. – Joe

+0

Удачи вам, мы все учимся все время –

0

Это правильный формат SQL.

$query = mysql_query("SELECT * FROM `users` WHERE `user` = `'".$_POST["user"]."'` AND pass = '".$_POST["pass"]."'") or die(mysql_error()); 

Одна вещь, чтобы отметить, что вы MUST бежать и проверять все глобальные переменные. Для получения дополнительной информации, которую я настоятельно рекомендую вам прочитать SO сообщение: How can I prevent SQL injection in PHP?

+0

Нет, это не 'правильный отформатированный SQL' –

0

Просто изменили ваш код следующим образом:

SELECT * FROM users where user = «$_POST[user]» AND pass = '$_POST[pass]'

Эта линия нужно переписать, как следующим образом:

SELECT * FROM users WHERE user = '".$_POST[user]."' AND pass = '".$_POST[pass]."'

Я считаю, что это должно работать на каждом сервере без каких-либо проблем.

4

Остановите использование mysql_*. используйте mysqli_* или PDO. Посмотрите на код: -

<?php 
// Force PHP to show errors 
error_reporting(E_ALL); // Get all type of errors if any occur in code 
ini_set('display_errors',1); // Display those errors 

session_start(); // start session 

define('DB_HOST', 'localhost'); 
define('DB_NAME', 'connectivity'); 
define('DB_USER','root'); 
define('DB_PASSWORD',''); 

$con = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME) or die("connection not established"); Or use $con = mysqli_connect('localhost','root','','connectivity') or die("connection not established"); 

if(isset($_POST['submit'])){ 
    SignIn(); 
} 

function SignIn(){ 
    if(!empty($_POST['user'])) { 
     $username = mysqli_real_escape_string($con , $_POST['user']); // prevent form SQL injection 
     $password = mysqli_real_escape_string($con , $_POST['pass']); // prevent form SQL injection 
     $query = mysqli_query($con,"SELECT * FROM users where user = '".$username."' AND pass = '".$password."'") or die(mysqli_error($con)); 
     if(mysqli_num_rows($query) > 0){ // check count of resultset 
      $_SESSION['user'] = $_POST['pass']; 
      echo "SUCCESSFULLY LOGIN TO USER PROFILE PAGE..."; 
     }else{ 
      echo "SORRY... YOU ENTERD WRONG ID AND PASSWORD... PLEASE RETRY..."; 
     } 
    } 
} 
?> 
+0

Я только что вернулся с обеда и попробую это, Спасибо, что нашли время, чтобы просмотреть мои вещи и предоставить ваш отзыв. Я знаю, что это, вероятно, легко для многих, но я только начинаю. Еще раз спасибо! – Joe

+0

На вашем и коде SuperDJs я все время получаю «неопределенную переменную» для $ con. Он уже определен в обеих ситуациях, не уверен, почему я получаю это. – Joe

+0

Это помогло! Теперь я просто получаю эту ошибку: «Предупреждение: mysqli_connect(): (HY000/1045): доступ запрещен для пользователя« root »@« localhost »(с использованием пароля: YES) в C: \ xampp \ htdocs \ OctopiPage \ connectivity.php on line 13 соединение не установлено « – Joe

0

Есть несколько вещей неправильно с вашим кодом проверить его внизу:

<?php 
session_start(); // This needs to be on top of every page 

define('DB_HOST', 'localhost'); 
define('DB_NAME', 'connectivity'); 
define('DB_USER','root'); 
define('DB_PASSWORD',''); 

// Use mysqli_* as mysql_* is depracted and will be removed 
$con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die("connection not established"); 

// Add a bit of security 
$user = mysqli_real_escape_string($con, $_POST['user']); 
$pass = mysqli_real_escape_string($con, $_POST['pass']); 

function SignIn($user, $pass) { 
    // Add backticks ` around column and table names to prevent mysql reserved word error 
    $query = mysqli_query($con, "SELECT * FROM `users` WHERE `user` = '$user' AND `pass` = '$pass'"); 
    // No need to fetch the data you already have 
    // Check if the query returns atleast 1 row (result) 
    if(mysqli_num_rows($query) >= 1) { 
     $_SESSION['user'] = $pass; 
     echo "SUCCESSFULLY LOGIN TO USER PROFILE PAGE..."; 
    } else { 
     echo "SORRY... YOU ENTERD WRONG ID AND PASSWORD... PLEASE RETRY..."; 
    } 
} 

if(isset($_POST['submit']) && !empty($user) && !empty($pass)) { 
    SignIn($user, $pass); 
} else { 
    echo "SORRY... THERE ARE EMPTY FIELDS... PLEASE RETRY..."; 
} 

?> 
Смежные вопросы