#php #html #mysql #authentication
#php #HTML #mysql #аутентификация
Вопрос:
Я пытаюсь извлечь данные из своей базы данных, но не могу этого сделать. Иногда я не получаю никакого результата, или иногда я получаю сбой без нажатия кнопки отправки. Пожалуйста, взгляните на этот код. Я знаю, что я делаю что-то не так, но я не могу разобраться в этом, поскольку я новичок и в процессе обучения. Пожалуйста, взгляните на мой html и php. Хотя в связи с DB нет ошибок, я трижды проверил, что он работает нормально, чтобы установить соединение с db. Вот мой php-код
<?php
if (isset($_POST['login']))
{
include "config.php";
$username=mysqli_real_escape_string ($conn,$_POST['user']);
$password=$_POST['user'];
$sql="SELECT username, password FROM user WHERE username='{$username}' AND password='{$password}'";
$result = mysqli_query($conn,$sql) or die("Query failed");
if (mysqli_num_rows($result)>0)
{
while( $row=mysqli_fetch_assoc($result))
{
echo "Successful";
}
}
else
{
echo 'failed ';
}
}
?>
Моя БД настраивается успешно, ошибок в config.php .
html здесь
<!DOCTYPE html>
<html class="no-js">
<head>
<meta charset="utf-8">
<title>Login | Charity</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Fonts -->
<link href='http://fonts.googleapis.com/css?family=Open Sans:400,300,700' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Dosis:400,700' rel='stylesheet' type='text/css'>
<!-- Bootsrap -->
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<!-- Font awesome -->
<link rel="stylesheet" href="assets/css/font-awesome.min.css">
<!-- Template main Css -->
<link rel="stylesheet" href="assets/css/style.css">
<!-- Custom Style -->
<link rel="stylesheet" href="assets/css/login-style.css">
<!-- Modernizr -->
<script src="assets/js/modernizr-2.6.2.min.js"></script>
</head>
<body>
<!-- NAVBAR
================================================== -->
<header class="main-header">
<nav class="navbar navbar-static-top">
<div class="navbar-top">
<div class="container">
<div class="row">
<div class="col-sm-6 col-xs-12">
<ul class="list-unstyled list-inline header-contact">
<li> <i class="fa fa-phone"></i> <a href="tel:"> 123 456 789 </a> </li>
<li> <i class="fa fa-envelope"></i> <a href="mailto:contact@sadaka.org">contact@test.org</a> </li>
</ul> <!-- /.header-contact -->
</div>
<div class="col-sm-6 col-xs-12 text-right">
<ul class="list-unstyled list-inline header-social">
<li> <a href="#" target="_blank"> <i class="fa fa-facebook"></i> </a> </li>
<li> <a href="#" target="_blank"> <i class="fa fa-twitter"></i> </a> </li>
<li> <a href="#" target="_blank"> <i class="fa fa-google"></i> </a> </li>
<li> <a href="#" target="_blank"> <i class="fa fa-youtube"></i> </a> </li>
<li> <a href="#" target="_blank"> <i class="fa fa fa-pinterest-p"></i> </a> </li>
</ul> <!-- /.header-social -->
</div>
</div>
</div>
</div>
<div class="navbar-main">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.html"><img src="assets/images/sadaka-logo.png" alt=""></a>
</div>
<div id="navbar" class="navbar-collapse collapse pull-right">
<ul class="nav navbar-nav">
<li><a href="index.html">HOME</a></li>
<li><a href="about.html">ABOUT</a></li>
<li class="has-child"><a href="#">CAUSES</a>
<ul class="submenu">
<li class="submenu-item"><a href="causes.html">Causes list </a></li>
<li class="submenu-item"><a href="causes-single.html">Single cause </a></li>
<li class="submenu-item"><a href="causes-single.html">Single cause </a></li>
<li class="submenu-item"><a href="causes-single.html">Single cause </a></li>
</ul>
</li>
<li><a href="gallery.html">GALLERY</a></li>
<li><a href="contact.html">CONTACT</a></li>
<li><a class="is-active" href="login.html">LOGIN</a></li>
</ul>
</div> <!-- /#navbar -->
</div> <!-- /.container -->
</div> <!-- /.navbar-main -->
</nav>
</header> <!-- /. main-header -->
<div class="main-container">
<div class="login-content">
<!-----start-main---->
<div class="login-form">
<div class="head">
<img src="./assets/images/gallery/thumb/employee-avatar.png" alt="Employee Avatar"/>
</div>
<div class="login-header">
<p><span class="welcome-label">WELCOME </span><br>
<span class="description"> Logon to system for best experience</span></p>
</div>
<form class="input-form">
<li>
<input type="text" name="user" class="text" placeholder="Email" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Email';}" ><a href="#" class=" icon user"></a>
</li>
<li>
<input type="password" name="" placeholder="Password" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Password';}"><a href="#" class=" icon lock"></a>
</li>
<div class="forgot-password-label">
<a href="/">Forgot Password?</a>
</div>
<div class="p-container">
<input type="submit" name="login" value="LOG IN" >
<div class="clear"> </div>
</div>
<div class="new-account-container">
<p><span class="no-account-label">Doesn't have account? </span><span class="create-account-label"><a href="/">Create One</a></span></p>
</div>
</form>
</div>
<!--//End-login-form-->
</div>
</div>
<footer class="main-footer">
<div class="footer-top">
</div>
<div class="footer-main">
<div class="container">
<div class="row">
<div class="col-md-4">
<div class="footer-col">
<h4 class="footer-title">About us <span class="title-under"></span></h4>
<div class="footer-content">
<p>
<strong>Sadaka</strong> ipsum dolor sit amet, consectetur adipiscing elit. Ut at eros rutrum turpis viverra elementum semper quis ex. Donec lorem nulla, aliquam quis neque vel, maximus lacinia urna.
</p>
<p>
ILorem ipsum dolor sit amet, consectetur adipiscing elit. Ut at eros rutrum turpis viverra elementum semper quis ex. Donec lorem nulla, aliquam quis neque vel, maximus lacinia urna.
</p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="footer-col">
<h4 class="footer-title">LAST TWEETS <span class="title-under"></span></h4>
<div class="footer-content">
<ul class="tweets list-unstyled">
<li class="tweet">
20 Surprise Eggs, Kinder Surprise Cars 2 Thomas Spongebob Disney Pixar
</li>
<li class="tweet">
20 Surprise Eggs, Kinder Surprise Cars 2 Thomas Spongebob Disney Pixar
</li>
<li class="tweet">
20 Surprise Eggs, Kinder Surprise Cars 2 Thomas Spongebob Disney Pixar
</li>
</ul>
</div>
</div>
</div>
<div class="col-md-4">
<div class="footer-col">
<h4 class="footer-title">Contact us <span class="title-under"></span></h4>
<div class="footer-content">
<div class="footer-form" >
<form action="php/mail.php" class="ajax-form">
<div class="form-group">
<input type="text" name="name" class="form-control" placeholder="Name" required>
</div>
<div class="form-group">
<input type="email" name="email" class="form-control" placeholder="E-mail" required>
</div>
<div class="form-group">
<textarea name="message" class="form-control" placeholder="Message" required></textarea>
</div>
<div class="form-group alerts">
<div class="alert alert-success" role="alert">
</div>
<div class="alert alert-danger" role="alert">
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-submit pull-right">Send message</button>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="clearfix"></div>
</div>
</div>
</div>
<div class="footer-bottom">
<div class="container text-right">
Sadaka @ copyrights 2015 - by <a href="http://www.ouarmedia.com">Ouarmedia</a>
</div>
</div>
</footer>
<!-- jQuery -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="assets/js/jquery-1.11.1.min.js"></script>')</script>
<!-- Bootsrap javascript file -->
<script src="assets/js/bootstrap.min.js"></script>
<!-- Template main javascript -->
<script src="assets/js/main.js"></script>
<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
<script>
(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l= new Date;
e=o.createElement(i);r=o.getElementsByTagName(i)[0];
e.src='//www.google-analytics.com/analytics.js';
r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
ga('create','UA-XXXXX-X');ga('send','pageview');
</script>
</body>
</html>
Комментарии:
1. ПРЕДУПРЕЖДЕНИЕ : при использовании
mysqli
вы должны использовать параметризованные запросы иbind_param
добавлять пользовательские данные в свой запрос. НЕ используйте для этого экранирование вручную и интерполяцию или конкатенацию строк, потому что вы неизбежно создадите серьезные ошибки SQL-инъекций . Случайно неэкранированные данные представляют серьезную опасность. Использование связанных параметров менее подробное и их легче просмотреть, чтобы убедиться, что вы делаете это правильно. Вы пропустили один здесь.2. ПРЕДУПРЕЖДЕНИЕ : написать слой управления доступом непросто, и есть много возможностей сделать это неправильно. Любая современная платформа разработки , такая как Laravel , поставляется со встроенной системой аутентификации , и вы можете использовать библиотеки аутентификации . По крайней мере, следуйте рекомендуемым рекомендациям по безопасности и никогда не храните пароли в виде обычного текста или слабого хэша, такого как SHA1 или MD5 .
3. Примечание: Объектно-ориентированный интерфейс to
mysqli
значительно менее подробный, что упрощает чтение и аудит кода, и его нелегко спутать с устаревшимmysql_query
интерфейсом, где отсутствие одногоi
может вызвать проблемы. Пример:$db = new mysqli(…)
и$db->prepare("…")
процедурный интерфейс является артефактом эпохи PHP 4 и не должен использоваться в новом коде. Кроме того, процедурный интерфейс имеет менее строгую проверку ошибок и отчеты, что затрудняет отладку.4. Это производственный код или для чисто академических целей?
5. $password= $_POST[‘user’]; должно быть $password= $_POST[‘pass’];
Ответ №1:
Первое, что я заметил в вашем коде:
$password=$_POST['user'];
Вы не сможете правильно подключиться к своей базе данных, если используете переменную, хранящую пользователя для пароля базы данных. Измените его на любую переменную, которую вы используете для хранения передачи БД.
Попробуйте этот код. Добавьте информацию вручную и посмотрите, есть ли ошибка. Если это работает, настройте его для работы с вашим кодом:
<?php
/* Connecting to DB */
$ConnectionSQL = new mysqli ('localhost', 'put_user_db', 'put_pass_db', 'database_to_connect');
/*If connection error*/
if ($ConnectionSQL->connect_error) {
die('Connection Error (' . $ConnectingSQL->connect_errno . ') '
. $ConnectingSQL->connect_error);
}
/*If Connection succesfull, show host info*/
echo '<p>Connection established: '. $ConnectingSQL->host_info.'</p>';
echo '<p>Server '.$ConnectionSQL->server_info.'</p>';
Второе:
Введите значение для имени пароля в HTML-форме. Вы ничего не вкладываете. Пример:
<input type="password" name="password"
PHP-код:
$password= $_POST['password'];
Комментарии:
1. Да, база данных подключена правильно. Когда я использую простую форму без css и анимации, она работает нормально, но когда я использую ее на своей исходной странице, она перестает работать. Я добавляю полный html этой страницы в свой вопрос. Пожалуйста, просмотрите это. Я буду благодарен
2. Я добавил это в сообщение, пожалуйста, просмотрите. У вас нет ничего в значении «name» html-формы для пароля, поэтому вы не передаете значение пароля.