не удается получить доступ к базе данных с помощью isset php

#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-формы для пароля, поэтому вы не передаете значение пароля.