[ad_1]
ALOGIN フォームを作成し、データベースに正常に接続しましたが、正しい資格情報でログインしようとすると、ページにリダイレクトされて表示されます
Fatal error: Uncaught Error: Call to undefined function validate() in C:\xampp\htdocs\project\logtest.php:18
どうすれば解決できますか?
私が試したこと:
/*私のコード*/
<?php session_start(); include "db_conn.php"; if(isset($_POST['uname']) && isset($_POST['password'])) { function validate($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } } $uname = validate($_POST['uname']); $pass = validate($_POST['password']); if(empty($uname)) { header("location: loghome.php?error=User Name is Required"); exit(); } else if(empty($pass)) { header("location: loghome.php?error=password is Required"); exit(); } $sql = "SELECT * FROM users WHERE user_name='$uname' AND password='$pass'"; $result = mysqli_query($conn, $sql); if(mysqli_num_rows($result)===1) { $row = mysqli_fetch_assoc($result); if($row['user_name'] === $uname && $row['password'] === $pass) { echo "Logged IN"; $_SESSION['user_name'] = $row['user_name']; $_SESSION['name'] = $row['name']; $_SESSION['id'] = $row['id']; header("location:home1.php"); exit(); } else { header("location:loghome.php?error= Incorrect Username or password"); exit(); } } else { header("location: loghome.php"); exit(); }
PHP
<pre lang="PHP">
解決策 1
PHP はインタープリター型言語です。コードを実行するときだけ何かを行います。
の中で関数を定義すると、 if
条件が true の場合にのみ定義されます。
したがって、テストが失敗すると、コードを定義する validate
決して実行されず、使用しようとすると失敗します。
どう思った? if
ブロックはどうするつもりだった?
解決策 2
検証関数は、次の行で始まるブロック内にのみ存在します。
PHP
if(isset($_POST['uname']) && isset($_POST['password']))
しかし、ブロックの外から呼び出そうとしています。 したがって、そのブロックの外に移動して、コードの他の部分からアクセスできるようにします。
PHP
function validate($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } $uname = ''; $pass = ''; if(isset($_POST['uname']) && isset($_POST['password'])) { $uname = validate($_POST['uname']); $pass = validate($_POST['password']); }
「PHP の変数と関数のスコープ」の主題について読む必要があります。
[ad_2]
コメント