2

現在、登録とログインページを作成中です。最初のページでは、アカウントを作成するかログインするかを尋ねられます。私たちがしなければならないことは、ユーザーが情報を入力するフォームから情報を取得し、それをテキスト ファイルに配置することです。私はこれを大まかに動作させています。セキュリティ上の理由からこれが適切でないことは理解していますが、これはクラスの課題であり、テキスト ファイルに情報を入力する必要があります。テキスト ファイルに情報が入っていますが、投稿されたユーザー名をデータベース内のすべてのユーザー名と比較するのに問題があります。これは、newaccount.html ページのコードと、フォームが送信される register.php ファイルです。

newaccount.html

<html>
<head>
</head>
<body>

<h3>Hello new user! Choose a user name and password ^_^</h3><br>

<form action = "register.php" method = "POST" >
Username: <input type = "text" name = "username"><br><br>
Password: <input type = "password" name = "pass"><br>
<input type = "submit" value = "Create Account" name = "submit"><br>
</form>
<form method = "LINK" action = "Proj2_practice.html">
<input type = "submit" value = "Home Page" name = "submit2">
</form>

</body>  
</html>

register.php

<?php

$username = $_POST['username'];
$password = $_POST['pass'];

$userAndPass = $username.",".$password;

$userNames = 'usernames.txt'." ";
$passwords = 'passwords.txt'." ";

$fh_users = fopen($userNames, 'a+')or die("sorry, we couldnt open the file");
$fh_passwords = fopen($passwords, 'a+')or die("sorry, we couldnt open the file");

fwrite($fh_users, $username." ");
fwrite($fh_passwords, $password." ");

$allUserNames = fread($fh_users, filesize('usernames.txt'));

echo $allUserNames;

?>

ユーザー名とパスワードはテキスト ファイルに正しく送信されています。コードの最後では、変数がエコーされていません。現時点では、テキスト ファイルに情報がありません。それが原因で何もエコーされていないかどうかはわかりません。ここで私のアプローチは正しいですか?ここでやろうとしているのは、それぞれの名前とパスワードをユーザー名とパスワードのテキスト ファイルに送信することです。

これらの各テキスト ファイルをスペースで分解します。そのため、テキスト ファイルに書き込んだ後にテキスト ファイルを追加し、ユーザー名とパスワードをそれぞれの配列要素で比較します。私は自分が思っているほどこれを複雑にしすぎていますか? コメントを残してください、私はただ改善しようとしています^_^

前もって感謝します!

4

2 に答える 2

3

「a+」フラグを付けてファイルを開くと、ファイル ポインタがファイルの末尾に配置されます。したがって、読んでいるときは、すでにファイルの最後にいるため、何も得られません。

読む前にファイルの先頭に戻るだけです

fseek ($fh_users, 0);

または、フラグ「r」を使用して閉じてから再度開きます

$fh_users = fopen($userNames, 'r')

または単に行う

$dataString = file_get_contents($userNames);

また

$dataArray = file($userNames);
于 2012-11-30T16:25:32.430 に答える
0

これがクラスの課題である場合、方法と解決策を提案できますか?

このようなことがうまくいかない場合は、やろうとしていることの複雑さを減らし、段階的に構築してみてください。あなたは自分のファイルが空だと言います。空の場合、そこから読み取ることができないため、最初の問題は、ファイルに正しく書き込み、そこから何かを読み取る方法を理解することです。残りのタスクはすべて忘れて、最初に集中してください。

現在、リソース (ファイルなど) を開いた場合、必要がなくなったら再度閉じる必要があります。したがって、最初に必ず fopen / fclose のペアが必要です。

$username = "Penguin";
$userNames = 'usernames.txt'; // Why did you have a space after this?
$fh_users = fopen($userNames, 'a+');
fwrite($fh_users, $username." ");
fclose($userNames);

これはテストしていませんが、この時点で「Penguin」を含むファイルが作成されているはずです。コードを複数回実行すると、ファイルの内容が大きくなるはずです。

このファイルから何かを読み返したい場合は、読み書きする場所を決定するファイル ポインターがあることに注意してください。ファイル ポインタが前面に移動されるように (したがって、必要なものを読み取ることができるように) ファイルを再度開くか、 または を使用して明示的に前面に戻すことができfseekますrewind

この書き込みと読み取りが機能するようになったら、フォームなどを処理するコードを追加します。

于 2012-11-30T16:52:35.920 に答える