Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过管理页面创建新的登录帐户-表单数据保存到文本文件_Php - Fatal编程技术网

Php 通过管理页面创建新的登录帐户-表单数据保存到文本文件

Php 通过管理页面创建新的登录帐户-表单数据保存到文本文件,php,Php,正如您可能猜到的,我对学习PHP还不熟悉,有一项任务是创建一个页面,通过在表单字段中输入用户名和密码可以创建新的用户帐户,然后需要将其保存在文本文档中 我花了几个小时试图弄明白这一点,并尝试了我所看到的关于其他问题的建议。正如我之前提到的,我对这一点非常陌生,需要保持基本的东西 <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $newUsername = trim(htmlspecialchars($_POST["newuser

正如您可能猜到的,我对学习PHP还不熟悉,有一项任务是创建一个页面,通过在表单字段中输入用户名和密码可以创建新的用户帐户,然后需要将其保存在文本文档中

我花了几个小时试图弄明白这一点,并尝试了我所看到的关于其他问题的建议。正如我之前提到的,我对这一点非常陌生,需要保持基本的东西

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST")
{
    $newUsername = trim(htmlspecialchars($_POST["newuser"]));
    $newPassword = trim(htmlspecialchars($_POST["newpwd"]));
    $file = "user_accounts.txt";

    $openfile = fopen($file, "a") or die("Unable to open file");

    if($newUsername || $newPassword == ""){
        echo '<script language="javascript">';
        echo 'alert("Error: Please complete all fields")';
        echo '</script>';}

    else{
        fwrite ($openfile, "$newUsername \n $newPassword \n");
        fclose($openfile);}

}
?>

表单字段的名称分别为
user
pwd
。但是,在PHP代码中,您正在查找
newuser
newpwd

尝试使用
var\u dump($\u POST)来帮助调试像这样的小错误。:-)

这是:

if($newUsername || $newPassword == ""){
解析为:

if($newUsername || ($newPassword == "")){
                   ^--                ^--
归结起来就是

if (true/false || true/false)
如果填写了用户名,您将获得

if (true || whatever)
最后声称有错误

你想要

if (($newUsername == "") || ($newPassword == "")) {

相反,

表单中输入的名称转换为POST数组中的变量名称

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST")
{
    $newUsername = trim(htmlspecialchars($_POST["user"]));
    $newPassword = trim(htmlspecialchars($_POST["pwd"]));
    $file = "user_accounts.txt";

    $openfile = fopen($file, "a") or die("Unable to open file");

    //note how these have changed - each condition is separated by ()
    if(($newUsername == "") || ($newPassword == "")){
        echo '<script language="javascript">';
        echo 'alert("Error: Please complete all fields")';
        echo '</script>';
    } else {
        fwrite ($openfile, "$newUsername \n $newPassword \n");
        fclose($openfile);
    }

}
?>

$\u POST[“newuser”]和$\u POST[“user”]以及$\u POST[“newpwd”]和$\u POST[“pwd”]在php代码中。

代码的问题是:

如果($newUsername | |$newPassword==“”)
对于
$newUsername

另外,您的输入表单元素名称不匹配

$\u POST[“newuser”]
name=“user”
不匹配

$\u POST[“newpwd”]
name=“pwd”
不匹配

测试:

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST")
{
    $newUsername = trim(htmlspecialchars($_POST["newuser"]));
    $newPassword = trim(htmlspecialchars($_POST["newpwd"]));
    $file = "user_accounts.txt";

    $openfile = fopen($file, "a") or die("Unable to open file");

    if($newUsername == "" || $newPassword == ""){
        echo '<script language="javascript">';
        echo 'alert("Error: Please complete all fields")';
        echo '</script>';}

    else{
        fwrite ($openfile, "$newUsername \n $newPassword \n");
        fclose($openfile);}

}
?>

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">        
    Username: <input type="text" name="newuser"><br> 
    Password: <input type="password" name="newpwd"><br> 
    <input type="submit"> 
</form>

因为它在用户名的末尾和文件本身中每个密码的开头(和结尾)添加了一个空格(测试时),这可能会对字符匹配产生影响

fwrite ($openfile, "$newUsername \n $newPassword \n");
                                ^               ^
另一件事是,使用这种类型的系统被认为是不安全的,除非您将其正确地隐藏在公共领域之外和/或使用
.htaccess


使用DB更安全。

我遇到的问题是,它只是不断抛出错误,即使表单字段不是空的。
$var | |$var==”
不会像您想象的那样:它不是:(我试图确保它们不是空的。有更好的方法吗?你需要检查它们是否都不是空的
$newUsername==“”| |$newPassword==“”
@charlotterose23你这里有很多很好的答案…你在表单中使用了什么测试数据?任何奇怪的字符…多字节或非UTF-8?
htmlspecialchars()
如果字符集不稳定,将返回一个空白结果。啊,谢谢。我发现了这一点,并对其进行了更改,但在实时版本中没有。不过它仍然不起作用:(我也不确定var_dump的作用是什么?@charlotterose23
var_dump
将为您传递的内容提供纯文本表示。
$\u POST
是一个数组,因此它将向您显示所有数组键、数据类型和值的列表。这有助于检查是否按您的预期方式工作。谢谢。我(谢谢。我已经更改了我的代码,但由于某些原因它无法工作。即使代码不是空的,仍然会给我错误!!@charlotterose23-哪个错误?无法打开文件,或者错误:请填写所有字段?哦,是的,它工作了!而不是if($newUsername==“”)| |($newPassword==“”))){我使用了if($newUsername==“”| |$newPassword==“”){ D:谢谢你!非常欢迎。你看我的脚注了吗?@夏洛特洛斯23。当你测试的时候做了。不确定你是否想要它。还考虑点击白色的复选标记,直到它变成绿色,在我的答案旁边被标记为被解决。这样,它将不会保持未回答。(这也是一种表示感谢的方式);@charlotterose23干杯,谢谢。我刚刚进入文件,注意到了空格,并对其进行了更改,但也感谢您指出。现在要找到这个复选标记……萝莉知道它非常不安全——这是一个大学作业,这就是我被要求做的!
fwrite ($openfile, "$newUsername \n $newPassword \n");
fwrite ($openfile, "$newUsername\n$newPassword \n");
fwrite ($openfile, "$newUsername \n $newPassword \n");
                                ^               ^