2

だから私は小さなサイトを開発しています.私はそれを開発しているだけなので、私と私の友人だけに見えるようにしたい.htaccessは私が今欲しいものではありません. 私はPHPがあまり得意ではありませんが、これを書くことができました:

<?
$user = $_REQUEST['user'];
$pass = $_REQUEST['pass'];
if($user == "xxx1" or "xxx2" and $pass == "xxx1" or "xxx2"){
    setcookie("notrandom", "Success", time()+3600);
}
else{
    setcookie("notrandom", "Success", time()-3600);
}
header("Location:index.php");

これをページ ナビゲーション バーに配置すると、ユーザーがログインしておらず、ログイン フォームのみが表示されている場合、ページのコンテンツが強制終了されます。

<?php 
if(empty($_COOKIE['notrandom'])){
    echo '
    <form class="form-inline navbar-form pull-right" method="post" action="kirjaudu.php">
  <input type="text" class="input-medium" placeholder="Käyttäjätunnus" name="user">
  <input type="password" class="input-medium" placeholder="Salasana" name="pass">

  <button type="submit" class="btn">Kirjaudu</button>
</form>
</div>
</div><!-- /navbar-inner -->
</div>
    ';
    die();
}

?>

ただし、私の問題は、スクリプトが入力されたユーザー名とパスワードを受け入れることです。orand

どうすればいいですか?これをどのように使用しますか?

$user = array("User1"=>"Pass1", 
              "User2"=>"Pass2");
4

4 に答える 4

3

何をしているの:

を実行するとき($user == "xxx1" or "xxx2")、実際に行っているのは と比較$user"xxx1"、それをと比較するOR'ingことで"xxx2"、 が得られTRUEます。あなたの状態は正しくありません。

演算子の優先順位


修理:

そのはず:

if(($user == "xxx1" and $pass == "xxx1") or ($user == "xxx2" and $pass == "xxx2")){
...
...
}

これは次のように評価さTRUEれます

case1: username = xxx1, password = xxx1
case2: username = xxx2, password = xxx2
于 2012-11-09T06:36:32.440 に答える
0

これを試してみてください。不必要な比較を避けて、実行が速くなる可能性があります

<?
$user = $_REQUEST['user'];
$pass = $_REQUEST['pass'];

if($user == "xxx1" && $pass == "xxx1") {
     setcookie("notrandom", "Success", time()+3600);
}
else if($user == "xxx2" && $pass == "xxx2){
setcookie("notrandom", "Success", time()+3600);
}
else{
     setcookie("notrandom", "Success", time()-3600);
}
header("Location:index.php");
?>
于 2012-11-09T07:01:00.107 に答える
0

このステートメントは、あなたが思っていることをしません:

if($user == "xxx1" or "xxx2" and $pass == "xxx1" or "xxx2")

本当に書くようなものです:

if ($user=="xxx1" or ("xxx2" != false and $pass == "xxx1") or "xxx2" != false)

したがって、「xxx2」は決して偽ではないため、ステートメントは常に真です。

あなたが欲しかったのは:

if ( ($user=="xxx1" and $pass=="xxx1") or ($user=="xxx2" and $pass=="xxx2") )

好きなだけユーザー名/パスワードを持つ配列を使用できます。値を比較する前に、ユーザー キーが存在することを確認してください。

$userArray = array("User1"=>"Pass1", "User2"=>"Pass2");

if (array_key_exists($user, $userArray) && $userArray[$user] == $pass) {
    // user is logged in!
} else {
    // user is not logged in
}

Cookie にまだ問題があります。セッションを使用しない理由:

session_start();
if (array_key_exists($user, $userArray) && $userArray[$user] == $pass) {
    $_SESSION['loggedIn'] = true;
} else if (!isset($_SESSION['loggedIn']) {
    $_SESSION['loggedIn'] = false;
}

// then later whenever you want to detect if the user is logged in or not...

if ($_SESSION['loggedIn']) { 
    // ... do stuff ...
}
于 2012-11-09T06:41:17.517 に答える
0

このコードで試してください:

<?
$user = $_REQUEST['user'];
$pass = $_REQUEST['pass'];

if(($user == "xxx1" && $pass == "xxx1") || ($user == "xxx2" && $pass == "xxx2")){
     setcookie("notrandom", "Success", time()+3600);
}
else{
     setcookie("notrandom", "Success", time()-3600);
}
header("Location:index.php");
?>
于 2012-11-09T06:38:46.750 に答える