0

そのため、私が取り組んでいるプロジェクトでは、ドロップダウン メニューのオプションに入力して [送信] をクリックするだけでログインする必要があります (パスワード フィールドはありません)。

このトピックについて検索すると、Twitter のドロップダウン メニューに似たきちんとしたドロップダウン メニューを作成する方法に関する情報が返されます。そして、私がこれを自分で試みたとき、サーバーエラーの非常に忌まわしいことが発生しました.

<?php

mysql_connect("localhost", "root", "mypassword")or die("cannot connect"); 
mysql_select_db("lunch_punch")or die("cannot select DB");

$myname=$_POST['myname'];


session_register("myname");
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}

<?php
session_start();
if(!session_is_registered(myname)){
header("location:home.html");
}
?>

<html>
<body>
Login Successful
</body>
</html>
4

2 に答える 2

1

あなたが本当に古いチュートリアルを見ているのではないかと思うので、ここにこの例/tutをまとめました。

従うのは非常に簡単で、PDO を使用したデータベースへの安全な接続とクエリ、セッション制御、単純なクラスの使用とそのメソッドへのアクセスなど、多くの側面をカバーしています。それが役に立てば幸い。

<?php 
session_start();

class simpleLogin{
    public $error;

    function __construct($dsn, $user=null, $pass=null){
        $this->dsn = $dsn;
        $this->user = $user;
        $this->pass = $pass;
        //Connect
        $this->connect();
    }

    function connect(){
        try{
            $this->db = new PDO($this->dsn, $this->user, $this->pass);
            $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
            $this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
        }catch (Exception $e){
            die('Cannot connect to databse. Details:'.$e->getMessage());
        }
    }

    //Get all users from db for drop down box
    function get_all_users(){
        $sql = "SELECT * FROM users";
        $statement = $this->db->query($sql);
        $statement->execute();
        return $statement->fetchAll();
    }

    /**
     * The main check_login method, this method is called
     *  on each page load to check status of logged in user
     *  or handle form POST login.
     *
     * @return bool
     */
    function check_login(){
        //Logout
        if(isset($_GET['logout'])){$this->logout();}

        //Already Logged in
        if(isset($_SESSION['logged_in']) && $_SESSION['logged_in']===true){return true;}

        //User posted login form
        if($_SERVER['REQUEST_METHOD']=='POST'){
            if(!empty($_POST['myname'])){
                /*
                CREATE  TABLE `lunch_punch`.`users` (
                `id` INT NOT NULL AUTO_INCREMENT ,
                `username` VARCHAR(255) NULL ,
                PRIMARY KEY (`id`) );
                */
                $sql = "SELECT 1 FROM users WHERE username=:username";
                $statement = $this->db->prepare($sql);
                $statement->bindParam(':username', $_POST['myname']);
                $statement->execute();
                $result = $statement->fetch();
                if(!empty($result)){
                    $_SESSION['logged_in']=true;
                    return true;
                }else{
                    return false;
                }
            }else{
                $this->error = 'Please select your name!';
            }
        }
    }

    /**
     * Logout user and then redirect to index
     *
     */
    function logout(){
        session_destroy();
        session_regenerate_id(true);
        exit(header('Location: index.php'));
    }
}


//Start the login class and pass your mysql connection details
$login = new simpleLogin('mysql:host=127.0.0.1;dbname=lunch_punch','root','password');

//Check the login
if($login->check_login() === true){
    //Logged In, wOOt do whatever...
    echo 'You are logged in... <a href="?logout">Logout</a>';
}else{
    //Logged Out, show login form
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Simple Login by Select Box</title>
</head>
<form method="POST" action="">
  <p>Please Login by selecting your name.</p>

  <p><select size="1" name="myname">
      <option value="" selected>-- Select Your Name --</option>
      <?php 
      //Get all users from database and output into the option box
      foreach($login->get_all_users() as $user):?>
      <option value="<?php echo $user['username'];?>"><?php echo $user['username'];?></option>';
      <?php endforeach;?>
     </select>
     <input type="submit" value="Login">
  </p>
  <?php echo ((!empty($login->error))?'<span style="color:red;">'.$login->error.'</span>':null);?>
</form>
<body>
</body>
</html>
<?php } ?>
于 2012-08-20T02:30:58.627 に答える
0

session_registerまた、関連する関数はphp 5.3で非推奨になり、php5.4で削除されました。したがって、php 5.4を使用している場合、このコードは致命的なエラーにつながります。

代わりに次のようなものを使用する必要があります。マニュアルを参照してください。

<?php
session_start();
$myname=$_POST['myname'];
// do some validation on $myname to make sure it is what you expect it to be
$_SESSION['myname'] = $myname;

そして、設定する変数を確認する必要がある場所:

<?php
session_start();
if (isset($_SESSION['myname']))
{
  // the variable is set
}

これらのmysql_*関数も非推奨になっているため、PDOまたはmysqliでプリペアドステートメントに切り替えることをお勧めします。

于 2012-08-20T01:57:22.240 に答える