1

.htmlと.phpを使用しています。default.htmlでは、ユーザーはいくつかの情報を入力する必要があり、ボタンがクリックされると、htmlはdefault2.phpに投稿します。default2.phpでは、データがチェックされ、正しい場合はユーザーを別のページにリダイレクトします。私が抱えている問題は、入力されたデータが間違っている場合です。ここで2つの問題が発生しています。

  1. データが間違っている場合は、ユーザーをdefault.htmlにリダイレクトします。これを行わないと、データはdefault2.phpのままになり、default2.phpはユーザーにとって重要なものではないためです。これがこれを行うための最良の方法であるかどうかはわかりません。
  2. 入力したデータが間違っている場合、default.htmlでユーザーにエコーメッセージを送りたいです。しかし、default2.phpからこれをトリガーする方法がわかりません。

これらの2つの問題をどのように解決できますか?ありがとう...


default.html:

<!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>
<script type="text/javascript">

</script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP4</title>
<style type="text/css">
body {
    background-color: #CCC;
}
</style>
</head>

<body>


<p>&nbsp;</p>

<form id="form1" name="form1" method="post" action="default2.php">
  <p>
    <label for="textfield1">User Name</label>
    <input type="text" name="username" id="username" />
  </p>
  <p>
    <label for="textfield2">Password</label>
    <input type="password" name="password" id="password" />
  </p>
  <p>
    <input type="submit" name="button1" id="button1" value="Submit"  />
    <br />
    <br />
  <label id="label1">
  </label></p>
  <p>&nbsp;</p>  
</form>
<p>&nbsp;</p>


</body>
</html>

default2.php:

<?php
require 'connection.php';

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

    $username_v = $_POST['username'];
    $password_v = $_POST['password'];

    // Then you can prepare a statement and execute it.    
    $stmt = $dbh->prepare("CALL login(?, ?)");
    $stmt->bindParam(1, $username_v, PDO::PARAM_STR); 
    $stmt->bindParam(2, $password_v, PDO::PARAM_STR); 

    // call the stored procedure
    $stmt->execute();

    if ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) 
    {
          header("Location: main.php");
    }
    else
    {
        header("Location: default.html");
    }

  }
?>
4

3 に答える 3

2

パラメータを追加するだけです

header("Location: default.html?test=failed");

また、htmlでは、Javascriptを使用して、変数テストが失敗に設定されている場合に適切なものを表示します。ここで、javascriptを使用してurlパラメータの値を取得する方法のチュートリアルを見つけることができます。

お役に立てば幸いです。

それ以外は、ページを離れたり検証エラーを強調表示したりせずに検証を実行するように要求することもできPHPます。default.htmlAJAX

于 2012-05-16T19:54:47.597 に答える
1

default.htmlをPHPファイルにした場合、URLを介して変数を渡すことができます。これにより、この変数がを使用して渡されたかどうかを確認し$_GET[]、ユーザーにメッセージを表示できます。

たとえば、ユーザーをに転送した場合

default.php?error = 1

デフォルトのページでは、次のようなコードのセグメントを持つことができます

if (isset($_GET['error'])) {
echo "Show user a message here";
}
于 2012-05-16T19:55:52.170 に答える
1

個人的には、クエリ文字列を使用して「エラー」「無効」などの状態をユーザーに公開するのは好きではありません。この状況では、2つのファイルを1つのPHPファイルにマージし、PHPコードを上部に、HTMLコードを下部に配置します。

ifPHPコードのステートメントは次のようになります。

if ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) 
{
    header("Location: main.php");
    exit;
}
else
{
    $error = true;
}

そして、メッセージを表示したいHTMLで、次のようにします。

<?php

if( isset( $error ) && $error )
    echo 'You have entered the wrong data!';

?>

もちろん、form要素では、を削除する必要がありますaction="default2.php"

ロジックとマークアップを分離したい場合はdefault.html、たとえばに変更してtemplate.php、コントローラーのphpファイルの最後に含めることができます。

リダイレクターとしてのみ機能するコンテンツがない追加のページのアイデアは好きではありません。

于 2012-05-16T20:21:48.817 に答える