张贴到自己的页面不提交信息的文本文件


Posting to own page not submitting info to text document

我正在为我的11年级作业创建一个网站,我们打算发布到一个单独的页面"订阅时事通讯",并将名称和电子邮件发送到文本文档中,但我决定进一步将其发布到它自己的页面。然而,它不会设置'$ok = TRUE',即使它是'TRUE',除非另有说明。当提交按钮被按下时,它总是说"发生错误。"你还没有被订阅。"

我把所有的if语句放在函数中,如果我没有,它会显示所有可能的错误代码,因为输入字段默认为空。

下面是我的代码:
  <div class="form">
    <form action="" method="post">
        <p>Name: <input type="text" name="name" size="20"></p>
        <p>Email: <input type="text" name="email" size="20"></p>
        <p>Confirm email: <input type="text" name="email2" size="20"></p>
        <input type="submit" name="submit" value="Submit">
    </form>
</div>
<?php
    //Converts data into string
    $name = $_POST['name'];
    $email = $_POST['email'];
    $email2 = $_POST['email2'];
    $ok = TRUE; 
    function fp() {
        if($fp = fopen('nameemail.txt', 'a+')) {
            $ok = TRUE;
            print '<p>fp true</p>';
        }else{
            $ok = FALSE;
            print '<p>fp false</p>';
        };
    }
    function emptyname() {
        if (empty($_POST['name'])){
            print'<font color="red"><p>You did not enter your name</p></font>';
            $ok = FALSE;
        };
    }
    function emptyemail() {
        if (empty($_POST['email'])){
            print'<font color="red"><p>You did not enter an email</p></font>'; 
            $ok = FALSE;
        };
    }
    function emptyemail2() {
        if (empty($_POST['email2'])){
            print'<font color="red"><p>You did not enter a confirm email</p></font>'; 
            $ok = FALSE;
        };
    }
    function emailemail2() {
        if ($_POST['email'] != $_POST['email2']){
            print'<font color="red"><p>Your emails did not match</p></font>';  
            $ok = FALSE;
        };
    }
    function ifok() {
        if($ok == TRUE) {
            fwrite($fp, "{$_POST['name']} - {$_POST['email']}'r'n");
            fclose($fp);
            print "<p><strong>You have been sucessfully subscribed</strong></p>";
            print "<p>Name: $name</p>";
            print "<p>Email: $email</p>";
        }elseif($ok == FALSE){
            print '<p>An error occurred. You have not been subscribed.</p>';
        };
    }
    function okfalse() {
        if($ok == FALSE){
            '<p>Ok is false</p>'; 
        }else{
            '<p>Ok is true</p>';
        };
    }
    if(isset($_POST['submit'])){
        $name = $_POST['name'];
        $email = $_POST['email'];
        $email2 = $_POST['email2'];
        $ok = TRUE;
        fp();
        emptyname();
        emptyemail();
        emptyemail2();
        ifok();
        okfalse();
    }   
?> 

您可以完成所有这些,而无需尝试使函数工作的复杂性。它可以用函数来完成,但你需要在函数中添加全局变量或状态变量,例如函数示例($ok)等。此外,使用这些函数的布局比实际需要的要复杂得多,无论是否填充了所有字段,发布的布局都将不断调用isok()函数。要做你想做的事情,你可以把代码改成如下:

<?php
if(isset($_POST['submit'])){
    $filename='nameemail.txt';
if (file_exists($filename)) {
    $ok = TRUE;
}else{
    $ok = FALSE;
}
if (empty($_POST['name'])){
    print'<font color="red"><p>You did not enter your name</p></font>';
    $ok = FALSE;
}
if (empty($_POST['email'])){
    print'<font color="red"><p>You did not enter an email</p></font>'; 
    $ok = FALSE;
}
if (empty($_POST['email2'])){
    print'<font color="red"><p>You did not enter a confirm email</p></font>'; 
    $ok = FALSE;
}
if ($_POST['email'] != $_POST['email2']){
    print'<font color="red"><p>Your emails did not match</p></font>';  
    $ok = FALSE;
}
    $name = $_POST['name'];
    $email = $_POST['email'];
    $email2 = $_POST['email2'];
if($ok == TRUE) {
$filename='./nameemail.txt';
$fp = fopen($filename, 'a+');
fwrite($fp, "{$_POST['name']} - {$_POST['email']}'r'n");
fclose($fp);
print "<p><strong>You have been sucessfully subscribed</strong></p>";
print "<p>Name: $name</p>";
print "<p>Email: $email</p>";
}elseif($ok == FALSE){
print '<p>An error occurred. You have not been subscribed.</p>';
} 
}
?>
<div class="form">
<form action="" method="post">
<p>Name: <input type="text" name="name" size="20"></p>
<p>Email: <input type="text" name="email" size="20"></p>
<p>Confirm email: <input type="text" name="email2" size="20"></p>
<input type="submit" name="submit" value="Submit">
</form>
</div>

我选择向您展示这个方法,因为您提到如果没有将请求添加到函数中会显示错误,这是因为您需要在if(isset($_POST['submit']))命令中包装大量内容,以确保代码在按下提交按钮之前不会运行。

你需要引用一些关于变量范围的东西。如果要更改$ok的值,则使用&$ok作为参数,或者将其放在类中,则使用$this->ok

$GLOBALS['ok']更改每个函数中的$ok…你不能在函数中直接引用全局变量。

的例子:

function ifok() {
    if($GLOBALS['ok'] == TRUE) {
        fwrite($fp, "{$_POST['name']} - {$_POST['email']}'r'n");
        fclose($fp);
        print "<p><strong>You have been sucessfully subscribed</strong></p>";
        print "<p>Name: $name</p>";
        print "<p>Email: $email</p>";
    }elseif($GLOBALS['ok'] == FALSE){
        print '<p>An error occurred. You have not been subscribed.</p>';
    };
}

或者,您可以在函数的开头添加global $ok,如

,从而节省大量时间。
function ifok() {
    global $ok;
    if($ok == TRUE) {
        fwrite($fp, "{$_POST['name']} - {$_POST['email']}'r'n");
        fclose($fp);
        print "<p><strong>You have been sucessfully subscribed</strong></p>";
        print "<p>Name: $name</p>";
        print "<p>Email: $email</p>";
    }elseif($ok == FALSE){
        print '<p>An error occurred. You have not been subscribed.</p>';
    };
}