Мне нужна помощь в создании журнала для моего сайта и подключении его к базе данных.
Это php-код
<?php session_start(); include("dbconnect.php"); $numrows=0; $member=$_GET['Membership_Number']; $password=$_GET['Password']; $query="select First_name, Last_name, Membership_Number from members where (Membership_Number='$member' && Password='$password')"; $link = mysql_query($query); if (!$link) { die('login error'); } $numrows=mysql_num_rows($link); if ($numrows>0){ // authentication is successfull $row = mysql_fetch_array($link, MYSQL_ASSOC); $_SESSION['user']['first_name']=$row['fname']; $_SESSION['user']['last_name']=$row['lname']; $_SESSION['user']['email']=$row['email']; header("location:index.php"); } else { header("location:../invalid.php"); // authentication was unsuccessfull } ?>
Это HTML-код
<form id="jjjj" method="post" action="Send_log_details.php" class="register"> <ul> <li> Membership Number:<br> <input type="text" id="Membership_Number" name="Membership_Number"> </li> <li> Password:<br> <input type="password" id="Password" name="Password" value="Login"> </li> <li> <input type="submit" name="register" value="Login" onclick="logMeIn()"> </li> </ul> </form>
Может кто-нибудь объяснить, почему этот код не работает
благодаря
method=post
и в php вы используете $_GET
. Поскольку @njk также прокомментировал,
Пожалуйста, не используйте функции mysql_ * в новом коде. Они больше не поддерживаются и официально устарели.
Прежде всего, $_GET
не включает значения параметров POSTed формы. $_POST
или $_REQUEST
будут работать, хотя последнее может быть неразумно использовать, поскольку в зависимости от конфигурации PHP он может включать значения cookie.
Во-вторых, $query
недействителен SQL. В частности, SQL использует AND
вместо &&
. Кроме того, имена столбцов должны соответствовать остальной части вашего кода, если вы используете опцию MYSQL_ASSOC:
$sqlMember = mysql_real_escape_string($member); $sqlPassword = mysql_real_escape_string($password); $query="select First_name fname, Last_name lname, Email email, Membership_Number from members where (Membership_Number='$sqlMember' and Password='$sqlPassword')";
mysql_real_escape_string () используется для предотвращения SQL-инъекции . Если вы используете либо расширение MySQLi, либо PDO, вы бы подготовили функциональные возможности оператора, которые вы должны использовать вместо этого.
Кстати, возможны другие атаки против вашего приложения, такие как логин CSRF и фиксация сеанса.