POST,isset和变量

时间:2019-01-04 07:48:53

标签: php html

我想出了解决问题的方法,但我真的需要理解为什么我要从一开始就解决问题。

发布表单时,我想设置变量并根据是否设置了变量进行显示。因为整页很长,所以我做了一个测试代码。 测试代码可以正常工作,但无法在页面上显示。

第一个无法在我的页面上运行但测试正常的代码是这样的:

<?php
$itype=0;
if (isset($_POST['itype'])) {
$itype=strip_tags($_POST['itype']); 
}
?>
<!DOCTYPE html>
<html lang="en">
<form action="test.php?<?php echo time(); ?>" method="post"><input class="invisible" type="radio" name="itype" checked="checked" value="Weapon" /><input class="small" type="submit" value="Weapons" /></form>
<?php
if ($itype==0) {
echo $itype;
}
else {
echo $itype;
}
?>

将其添加到页面时会中断。使它在页面上起作用的唯一方法是将预设变量$ itype从0更改为'All'。我需要了解为什么我必须在整个页面上使用字符串而不是测试脚本吗?

这里是整页,我将其冗长不明确,但是我不知道哪个代码是相关的。粘贴到这里太长了,因此这里是链接: inventory

我在自学,从来没有任何课堂经验。我确实想了解这一点,即使这不是我项目的紧迫问题。起初我以为'type'是一个禁止的变量,所以我将其更改为'itype'。然后,我认为这与数字与字符串有关,但那不可能,因为它在简短的测试脚本中可以正常工作。我已经搜索了手册和本网站,但找不到答案,或者至少找不到我理解的答案。

编辑 这是我认为将其应用于页面时最相关的代码:

    <?php
    $itype='All';
    if (isset($_POST['itype'])) {
    $itype=strip_tags($_POST['itype']); 
    }
    if ($itype=='All')
    {
    $stmt = $db->prepare("SELECT * FROM inventory WHERE charname=:charname and keep>0 and itemtype != 'Food' ORDER BY equipable desc, itemtype desc, weapontype, itemlevel desc, itemrarity");
                    $stmt->execute(array(':charname' => $charname));
    while($row = $stmt->fetch())
    {
    include ('../includes/displayinv.php');
    }
    }
    else
    {
    $stmt = $db->prepare("SELECT * FROM inventory WHERE charname=:charname and keep>0 and itemtype = :type order by weapontype, itemlevel desc, itemrarity");
                    $stmt->execute(array(':charname' => $charname,
                    ':type' => $itype
                    ));
    while($row = $stmt->fetch())
    {
    include ('../includes/displayinv.php');
    }
    }
    ?>
<form action="inventory.php?<?php echo time(); ?>" method="post"><input class="invisible" type="radio" name="itype" checked="checked" value="Weapon" /><input class="small" type="submit" value="Weapons" /></form>

这是一个库存菜单。我想显示所有项目,除非用户选择一个按钮以按项目类型显示库存,例如武器与装甲。该类型是我查询mysql库存项目表以显示所需项目的方式。 当我用0而不是“ All”作为预设变量实现代码时,表单分解并继续显示所有项目,按钮不再起作用,仅显示所选项目。这是停止工作的带有0的代码:

<?php
        $itype=0;
        if (isset($_POST['itype'])) {
        $itype=strip_tags($_POST['itype']); 
        }
        if ($itype==0)
        {
        $stmt = $db->prepare("SELECT * FROM inventory WHERE charname=:charname and keep>0 and itemtype != 'Food' ORDER BY equipable desc, itemtype desc, weapontype, itemlevel desc, itemrarity");
                        $stmt->execute(array(':charname' => $charname));
        while($row = $stmt->fetch())
        {
        include ('../includes/displayinv.php');
        }
        }
        else
        {
        $stmt = $db->prepare("SELECT * FROM inventory WHERE charname=:charname and keep>0 and itemtype = :type order by weapontype, itemlevel desc, itemrarity");
                        $stmt->execute(array(':charname' => $charname,
                        ':type' => $itype
                        ));
        while($row = $stmt->fetch())
        {
        include ('../includes/displayinv.php');
        }
        }
        ?>
    <form action="inventory.php?<?php echo time(); ?>" method="post"><input class="invisible" type="radio" name="itype" checked="checked" value="Weapon" /><input class="small" type="submit" value="Weapons" /></form>

1 个答案:

答案 0 :(得分:0)

当您将字符串与数字进行比较时,php会将字符串转换为数字并进行比较。 将此代码更改为:

.gitignore