У меня есть следующий код (php и jquery) для Login for Student and Teacher (с использованием той же формы для доступа). В моей системе администратор может создавать Student и Teacher. После создания данные сохраняются в базе данных. Сохраненные данные предполагается использовать для входа в панель администратора. Но проблема заключается в том, что, когда Студент или Учитель хочет войти в систему с данными для входа, предоставленными администратором (который уже был сохранен в таблице базы данных), отображается сообщение об ошибке: Ошибка входа в систему, проверьте свое имя пользователя и пароль. (Эти же данные, сохраненные в таблице базы данных, используются для процесса входа в систему). Это болит голова. Если кто-то скажет мне, если будет некоторая ошибка в моем коде, будет очень признателен.
login_form.php
<form id="login_form1" class="form-signin" method="post"> <h3 class="form-signin-heading"><i class="icon-lock"></i> Sign in</h3> <input type="text" class="input-block-level" id="username" name="username" placeholder="Username" required> <input type="password" class="input-block-level" id="password" name="password" placeholder="Password" required> <button data-placement="right" title="Click Here to Sign In" id="signin" name="login" class="btn btn-info" type="submit"><i class="icon-signin icon-large"></i> Sign in</button> <script type="text/javascript"> $(document).ready(function(){ $('#signin').tooltip('show'); $('#signin').tooltip('hide'); }); </script> </form> <script> jQuery(document).ready(function(){ jQuery("#login_form1").submit(function(e){ e.preventDefault(); var formData = jQuery(this).serialize(); $.ajax({ type: "POST", url: "login.php", data: formData, success: function(html){ if(html=='true_teacher') { $.jGrowl("Loading File Please Wait......", { sticky: true }); $.jGrowl("Welcome to Soch College's E- Learning Management System", { header: 'Access Granted' }); var delay = 1000; setTimeout(function(){ window.location = 'dasboard_teacher.php' }, delay); } else if (html == 'true'){ $.jGrowl("Welcome to Soch College's E- Learning Management System", { header: 'Access Granted' }); var delay = 1000; setTimeout(function(){ window.location = 'student_notification.php' }, delay); } else { $.jGrowl("Please Check your username and Password", { header: 'Login Failed' }); } } }); return false; }); }); </script>
login.php
<?php include('admin/dbcon.php'); session_start(); $username = $_POST['username']; $password = $_POST['password']; //for student login $query_student = mysql_query("SELECT * FROM student WHERE username='$username' AND password='$password'"); $count_stu = mysql_num_rows($query_student); $row_stu = mysql_fetch_array($query_student); //for teacher login $query_teacher = mysql_query("SELECT * FROM teacher WHERE username='$username' AND password='$password'")or die(mysql_error()); $count_tea = mysql_num_rows($query_teacher); $row_tea = mysql_fetch_array($query_teacher); if( $count_stu > 0 ) { $_SESSION['id']=$row_student['student_id']; echo 'true'; }else if( $count_tea > 0 ) { $_SESSION['id']=$row_teacher['teacher_id']; echo 'true_teacher'; } else{ }?>
Я думаю, проблема здесь;
if( $count_stu > 0 ) { //$_SESSION['id']=$row_student['student_id'];// mistake $_SESSION['id']=$row_stu['student_id']; echo 'true'; }else if( $count_tea > 0 ) { //$_SESSION['id']=$row_teacher['teacher_id'];// mistake $_SESSION['id']=$row_tea['teacher_id']; echo 'true_teacher'; } else{ echo 'Wrong Username Or Password'; }
Я согласен с @Drew Pierce, вам следует рассмотреть возможность использования pdo или mysqli.
Крайне важно использовать подготовленные операторы при непосредственном непосредственном использовании данных, предоставленных пользователем, с веб-страницы, такой как username
и password
.
Ваш существующий код открыт для SQL-инъекции . Используйте mysqli
с подготовленными операторами или PDO с подготовленными операторами .
От Fred: PHP не вставляет содержимое в базу данных mySQL: текст, изображения, что угодно