我是初学者php程序员,iv一直试图创建一个小程序,从论坛获取输入,然后提交后我希望它打印在屏幕上。简单易行我想,iv一直在尝试和怀疑它似乎工作正常1文本字段,当我添加剩余的2个文本字段称为[fam] [用户]我的代码停止将内容返回到屏幕。我也开始收到一个unindex数组的错误,因此我不得不使用isset来解决这个问题,而且,为什么我的代码会调用析构函数,尽管我从不隐式设置我的析构函数。我不知道如何提出这些问题,因为错误并不一致。
<form class="nameform" action="book.php" method="post">
<input type="text" name="Name" value="1">
<input type="text" name="Fam" value="2">
<input type="text" name="User" value="3">
<input type="button" name="submit" value="Submit">
</form>
private $name; private $familyName; private $userName;
function __construct($names,$familyNames,$userNames)
{
$this->name = $names;
$this->familyName = $familyNames;
$this->userName = $userNames;
}
function getName()
{
return $this->name;
}
function getFamilyName()
{
return $this->familyName;
}
function getUserName()
{
return $this->userName;
}
public function __destruct()
{
echo "destroyed again";
$this->name;
$this->familyName;
$this->userName;
}
}
if(!isset( $_POST["Name"])||!isset($_POST["Fam"])||!isset($_POST["User"]))
{
echo "Please fill in the data";
} else {
$p1 = new Person($_POST["Name"],$_POST["Fam"],$_POST["User"]);
print $p1->getName();
print $p1->getFamilyName();
print $p1->getUserName();
print_r($_POST);
}
// $n = $_POST["Name"];
// $f = $_POST["Fam"];
// $u = $_POST["User"];
// $p1 = new Person($_POST["Name"],$_POST["Fam"],$_POST["User"]);
?>
代码不打印我的[名称] [来自] [用户]
你永远不会从析构函数中回应它们
public function __destruct()
{
echo "destroyed again";
$this->name; //<---- does nothing
$this->familyName;
$this->userName;
}
所以我不确定应该做什么。你把它们放在底部
print $p1->getName();
print $p1->getFamilyName();
print $p1->getUserName();
但是你从破坏方法中得到的唯一的东西是
"destroyed again"
如果表单中的所有内容都已设置,您将只看到它。提交表单时始终如此,因为类型text
始终以其表单提交。
这让我想到这一点,你应该检查empty
而不是那里的isset
if ('POST' === $_SERVER['REQUEST_METHOD']) { //check if POST
if(empty($_POST["Name"])||empty($_POST["Fam"])||empty($_POST["User"])){
echo "Please fill in the data";
} else {
$p1 = new Person($_POST["Name"],$_POST["Fam"],$_POST["User"]);
print $p1->getName();
print $p1->getFamilyName();
print $p1->getUserName();
print_r($_POST);
}
}
请注意,任何虚假的东西都是空的,false
,[]
,''
,0
,'0'
,null
等。
我不知道这是否解决了所有问题,但这些事情可能会产生你正在经历的一些行为。
检查这些的另一种更先进的方法是这样的:
if ('POST' === $_SERVER['REQUEST_METHOD']) { //check if POST
$post = array_filter( $_POST, function($item){
return strlen($item); //any thing of a length of 0 is removed
});
if(count($post) != count($_POST)){
foreach(array_diff_key( $_POST, $post) as $missing=>$empty) {
echo "Please fill in $missing\n";
}
}else{
$p1 = new Person($_POST["Name"],$_POST["Fam"],$_POST["User"]);
print $p1->getName();
print $p1->getFamilyName();
print $p1->getUserName();
print_r($_POST);
}
}
产量
Please fill in Name
Please fill in Fam
你可以在线测试Here
干杯!