0

投稿やさまざまなフォーラムを数時間見てから、ついにあきらめました。登録ページとログインページを作成しようとして、過去 24 時間 PHP を学んでいます。登録は機能しているようです (いくつかのバグなどがあると確信していますが、現時点ではすべてが sql にあるようです)。私のログインページに関する限り、これは私がいくつかの問題を抱えている場所です。

新しい編集

ここに私のregistration.phpがあります

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

//Set error msg to blank
$errorMsg = "";
// Check to see if the form has been submitted
if (isset($_POST['username'])) 
{
include_once 'db_connect.php';
$username = preg_replace('/[^A-Za-z0-9]/', '', $_POST['username']);
$password = preg_replace('/[^A-Za-z0-9]/', '', $_POST['password']); 
$accounttype = preg_replace('/[^A-Za-z]/','', $_POST['accounttype']);
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
//validate email with filter_var
if ((!$username) || (!$password) || (!$accounttype) || (!$email))
    {
    $errorMsg = "Everything needs to be filled out";
    } 
    else {
// if fields are not empty

// check if user name is in use
    $db_username_check = mysql_query("SELECT id FROM members WHERE          username='$username' LIMIT 1");
    $username_check = mysql_num_rows($db_username_check); 
// check if email is in use
    $db_email_check = mysql_query("SELECT id FROM members WHERE email='$email' LIMIT 1");
    $email_check = mysql_num_rows($db_email_check);

//if username is in use ... ERROR
    if ($username_check > 0)  { 
    $errorMsg = "ERROR: username is already in use";

// if username is ok check if email is in use       
    } else if ($email_check > 0) {
    $errorMsg = "ERROR: email is already in use"; 

    } else {

    session_start();
    $hashedPass = md5($password); 
// Add user info into the database table, claim your fields then values 
    $sql = mysql_query("INSERT INTO members (username, password, email, accounttype ) 
    VALUES('$username', '$hashedPass', '$email', '$accounttype')") or die (mysql_error());
    // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query
    $id = mysql_insert_id();
    $_SESSION['id'] = $id; 
    mkdir("members/$id", 0755); 
    header("location: member_profile.php?id=$id");
    $errorMsg = "Registration Successful";
    exit();}

    }
// if the form has not been submitted
} else { $errorMsg = 'To register please fill out the form'; }
?>

ここに私のLogin.phpがあります

<?php
 error_reporting(E_ALL);
    ini_set('display_errors', '1');

    // if the form has been submitted
    $errorMsg = "";
    if ($_POST['username']){

            include_once('db_connect.php');
            $username = stripslashes($_POST['username']);
            $username = strip_tags($username);
            $username = mysql_real_escape_string($_POST['username']);
            $password = mysql_real_escape_string($_POST['password']); 
            $hashedPass = md5($password);


            $sql = "SELECT username,password FROM members WHERE username ='$username' AND password = '$hashedPass'";
            $login_check = mysql_query($sql);
            $count = mysql_num_rows($login_check);
            $row = mysql_fetch_array($login_check);
            //var_dump($id, $username, $password);

                if($count==1)
                    {
                        session_start();
                        //$id = $row["id"]; 
                        //                $_SESSION['id'] = $userid; 
                        //                $username = $row['username'];  
                        //                $_SESSION['username'] = $username; 
                        //                header("location: member_profile.php?id=$userid"); 
                         echo "User name OK";
                         return true;
        } else {
            echo "Wrong username or password";
            return false;

                    }
                }

    ?>

誰かが $id = mysql_insert_id(); を登録するたびに、最後のクエリから ID を取得し、$_SESSION['id'] を開始します。ただし、 if($count==1) の直後のログイン中に、完全に失われました。何らかの理由で名前とパスワードがチェックされ、通過しますが、ID は失敗します。「SELECT id FROM members WHERE id='$id'」を追加しようとしましたが、私の $id は常に未定義です。

私の member_profile.php は次のようなものです:

<?php
session_start();
$toplinks = "";
if(isset($_SESSION['id'])) {
//If the user IS logged in show this menu
$userid = $_SESSION['id'];
$username = $_SESSION['username'];
$toplinks = '
<a href="member_profile.php?id=' .$userid. '"> Profile </a> &bull;
<a href="member_account.php">Account</a> &bull;
<a href="logout.php">Logout</a>
';

} else {
// If the user IS NOT logged in show this menu
$toplinks = '
<a href="register.php">JOIN</a> &bull;
<a href="login.php">LOGIN</a>
';

}

?>

セキュリティ、構造、コーディングスタイルに関するヒントをありがとうございます。これは私にとってphpの3日目です。

間違いはご容赦ください。

4

3 に答える 3

2

あなたifはコメントの中に入っていますこれをチェックしてください-

<?php // if the form has been submitted $errorMsg = ""; if

編集してください --

    <?php 
    // if the form has been submitted 
    $errorMsg = ""; 
    if(($_POST['username']) && ($_POST['password'])){

あなたもあなたのコードでmysql使用し、使用しています--mysqli

$row = mysqli_fetch_array($sql);

使用する -

$row = mysql_fetch_array($sql);

あなたのセッションと、コメントで言及されたPhilを見てください。

session_start()
于 2012-11-07T05:01:40.443 に答える
1

コードを置き換える

$row = mysqli_fetch_array($sql); to $row = mysql_fetch_array($login_check);  



if($count==1)
                    {

                        $id = $row['id'];
                        session_start();
                        $_SESSION['id'] = $id; 
                        //$row = mysqli_fetch_array($sql);
                        $username = $row['username'];  

                        $_SESSION['username'] = $username;
                        header("location: member_profile.php?id=$id");
                        exit();
                        } else {
                        echo "Wrong username or password";
                        return false;
                    }

また、テーブルに id フィールドがある場合は、クエリを変更します。

$sql = "SELECT id,username,password FROM members WHERE username ='$username' AND password = '$hashedPass'";
于 2012-11-07T05:04:11.790 に答える
0

まず、コードを調べました。今日は私の php の 4 日目なので、すべてを mysql から mysqli に変更し始めました。コードはおそらくまだごちゃごちゃしていますが、今のところ機能しています。ありがとうございました

$sql = ("SELECT * FROM members WHERE username = '$username' && password = '$hashedPass'");
            $login_check = mysqli_query($link, $sql);
            $count = $login_check->num_rows;
            $row = mysqli_fetch_array($login_check);
             printf("Result set has %d rows.\n", $count);

                if($count==1)
                    {
                        session_start();
                        $id = $row["id"]; 
                        $_SESSION['id'] = $id; 
                        $username = $row['username'];  
                        $_SESSION['username'] = $username; 
                        header("location: member_profile.php?id=$id"); 
                        echo "User name OK";
                        return true;
于 2012-11-08T23:40:06.977 に答える