我刚刚将if(empty($num1))
替换为if(!isset($num1))
,现在条件必需!通知可以正常运行。非常感谢所有参与者,我重新获得了一些已经失去的力量,我开始最终将它变成一个功能齐全的风格小部件:D有一个美好的一天/晚上!
我愚蠢地认为isset()仅适用于复选框... 我摆脱了通知:未定义的索引,但必需!的问题仍然存在......
我有以下问题,我已经为产品定价制作了一个计算器,但如果我第一次加载它,它就不会“识别”尚未填充的文本输入中的空值。我不确定我是否正确命名,在谈到PHP时我是个新手,刚刚开始学习......
表格一般完美无缺,我只是想摆脱这个小问题。
基本上,我有以下代码:
$num1 = (int)$_POST['number1'];
$num2 = (int)$_POST['number2'];
$ratio = 0.2;
$utw = 1;
if (! empty($num1) && ! empty($num2)) {
if ($num1 * $num2 <= 200) {
$ratio = 0.2;
}
elseif ($num1 * $num2 > 200 && $num1 * $num2 < 400) {
$ratio = 0.15;
}
elseif ($num1 * $num2 >= 400) {
$ratio = 0.1;
}
if (isset($_POST['condition'])) {
$utw = 1.8;
}
$price = $num1 * $num2 * $ratio * $utw;
}
else {
$price = 0;
}
和
<form method="post" action="">
<label for="number1">
<input type="text" name="number1" id="number1">
<?php if(empty($num1)) : ?><span style="color: red;">Required!</span><?php endif; ?>
<br />Label1
</label>
<label for="number2">
<br /><input type="text" name="number2" id="number2">
<?php if(empty($num2)) : ?><span style="color: red;">Required!</span><?php endif; ?>
<br />Label2
</label>
<label for="condition">
<br /><input type="checkbox" name="condition" name="condition">
Label3<br />
</label>
<input type="submit" value="Run">
<?php if($price > 0) : ?>
<p><?php echo "Price equals: $price"; ?></p>
<?php endif; ?>
</form>
当我第一次显示它时,我得到了
Notice: Undefined index: number1 in C:\wamp\www\calc\index.php on line 3
(第3行是因为我明显剥离了<!doctype html>
和<?php
如何避免它?此外,仅当用户单击提交按钮时,如何确保必需!通知才会出现?目前它是从头开始显示的,因为输入字段是空的......我不希望它们“空”我只想要它们,你知道...... 在视觉上为空或等于0 ...
我已经在这几个小时内完成了所有这些工作,找到了PHP调试通知的一些解决方案,但它主要涉及if (isset($var))
方法,假设我有一个复选框......好吧,我不知道t ...默认$_POST
值的另一种方法是实际替换
$num1 = (int)$_POST['number1'];
使用:
if ($_POST['number1'] == '') {
$num1 = '0';
else {
$num1 = $_POST['number1'] ;
}
嗯,通知仍然出现:(
有人可以帮助我吗?
答案 0 :(得分:2)
我相信isset实际上就是你想要的;与您正在使用的输入类型无关。您可以编写一个辅助函数,如:
function getPost($key, $default) {
if (isset($_POST[$key]))
return $_POST[$key];
return $default;
}
答案 1 :(得分:1)
在尝试处理变量之前,使用isset()或array_key_exists()检查变量是否存在。
答案 2 :(得分:1)
我建议使用filter_input()
而不是直接访问超全局。
$num1 = filter_input(INPUT_POST, 'number1', FILTER_SANITIZE_NUMBER_INT);
$num2 = filter_input(INPUT_POST, 'number2', FILTER_SANITIZE_NUMBER_INT);
答案 3 :(得分:0)
if($_SERVER['REQUEST_METHOD'] === 'POST'){
if ($_POST['number1'] == '') {
$num1 = '0';
else {
$num1 = $_POST['number1'] ;
}
}
然而,可能会以不同的方式看待您的代码。写的是“如果我什么都没有,我就会得到0.如果我有什么东西我会得到它。
因此,默认情况下将变量设置为0,然后如果值在$ _POST中可用则指定它
$num1 = 0;
if(isset($_POST['number1'])){
$num1 = $_POST['number1'];
}