我正在为我的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>';
};
}