0

私は現在、基本的にデータベースに接続し、ユーザーがフォームに入力した値が一致するかどうかを確認する、非常に基本的なログインスクリプトを作成しています。しかし、何らかの理由で、送信ボタンがクリックされたときに私のコードは何もすることを拒否します!! ?? これがコードです...

<?php
mysql_connect("localhost", "username", "password");
mysql_select_db("dbname");
?>

<body>
<?php
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'");
$num = mysql_num_rows($result);
if($num == 0){
echo "Bad login, go <a href='login.php'>back</a>.";
}else{
session_start();
$_SESSION['username'] = $username;
header("Location: admin.php");
}


}else{
?>


<form action='login.php' method='post'>
   Username: <input type='text' name='username' /><br />
   Password: <input type='password' name='password' /><br /><br />
   <input type='submit' value='Login' />
</form>
<?php
}
?>
</body>

何か案は?

4

8 に答える 8

7

あなたはチェックしています

if(isset($_POST['submit'])){

...ただし、フォームコントロールに属性$_POST['submit']を指定しなかったため、設定されることはありません。name="submit"

送信ボタンを次のように変更します。

<input type='submit' name='submit' value='Login' />

また、できればパラメータ化されたクエリを使用して、データベース入力をサニタイズしてください。

于 2012-05-28T14:22:32.063 に答える
1

簡単なもの、試してみてください

<input type='submit' name='submit' value='Login' />

それ以外の

<input type='submit' value='Login' />

お役に立てれば!

編集:あなたはsubmitという名前を付けていません

于 2012-05-28T14:23:29.627 に答える
1

DaveRandomによって与えられた答えは私にとって最も有効なようです。

ただし、コードにいくつかの障害があり、最初に対処する必要があります。

特にログインフォームでは、致命的となる可能性のある入力をサニタイズしません。

使用する

  mysql_real_escape_string($_POST['username']));
  mysql_real_escape_string($_POST['username']));

SqlInjectionを回避するために他の対策を講じてください。

そして、あなたのフォームは正しいページにリダイレクトされていますか?依存しているページの名前がlogin.phpの場合は機能するはずですが、次を使用することもできます。

 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

とにかく、代わりに常にハンドラーページにリダイレクトする必要があるため、セルフページで処理するのは良い習慣ではないと思います。

于 2012-05-28T14:29:57.933 に答える
0

フォームと同じページに投稿していますか?

もしそうなら、action="login.php"を削除してみてください。

于 2012-05-28T14:25:10.287 に答える
0
  1. ログインに成功した場合の使用header(..)は機能しません。これは、すでにいくつかの文字がブラウザに送信されている可能性があるためです。文字が送信されないようにする必要があります。ややこのように:

    ここにある他のすべてのHTMLのもの..
  2. に変更if(isset($_POST['submit']))if(isset($_POST['username']))ます。これは、submit入力に「名前」フィールドがないためです。持っているものに対してテストします。

  3. 他の人が指摘しているように、スクリプトはSQLインジェクションに対してオープンです。いずれかを使用して修正します

于 2012-05-28T14:29:09.587 に答える
0

これは正しくありません。すでにいくつかのコンテンツを出力しているため、セッションが中断されます。

action = "login.php"はこのファイルを指している必要があります。たとえば、サンプルスクリプトはlogin.phpに保存されているので、問題ありません。そして、他の回答で述べられているように、あなたはname="something"それを介してそれにアクセスするように設定する必要があります$_POST['something']

<?php // some php scripting ?>

<!-- blank lines also counts as output --> 
<body>
  <?php session_start(); header("What ever"); ?>
</body>
于 2012-05-28T14:31:00.060 に答える
0

またsession_start()、コードの一番上に配置することをお勧めします。

だから試してみてください

<?php session_start(); ... ?>
于 2012-05-28T14:32:12.070 に答える
0

ログインページ(php-mysql)の実装を以下に示します。

<?php
if (!isset($_SESSION)) {
session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
   $_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['username'])) {  //from form username textbox
   $loginUsername=$_POST['username'];
   $password=$_POST['password'];
   $MM_fldUserAuthorization = "access_level"; // from db user access-level
   $MM_redirectLoginSuccess = "login_success_page.php";
   $MM_redirectLoginFailed = "login_failed_page.php";
   $MM_redirecttoReferrer = false;
   mysql_select_db($DB_NAME, $DB_LINK);

   $Login_query=sprintf("SELECT username,password, access_level FROM tbl_user WHERE username=%s AND password=%s",
   GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));

   $Login = mysql_query($Login_query, $DB_LINK) or die(mysql_error());
   $loginFoundUser = mysql_num_rows($Login);

   if ($loginFoundUser) {

      $loginStrGroup  = mysql_result($Login,0,'access_level');

      if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}

      $_SESSION['MM_Username'] = $loginUsername;
      $_SESSION['MM_UserGroup'] = $loginStrGroup;

      if (isset($_SESSION['PrevUrl']) && false) {
         $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
      }
      header("Location: " . $MM_redirectLoginSuccess );
   }
   else {
      header("Location: ". $MM_redirectLoginFailed );
   }
}
?>
于 2016-04-01T20:38:10.717 に答える