在Safari 5.1中需要字段

时间:2013-07-02 23:43:28

标签: php html forms security validation

如上所述here,HTML5中的required属性在Safari中不起作用。我有PHP检查是否填写了必填字段。当用户提交表单(contact-us类型表单)时,action=""设置为同一页面,以便PHP运行。它会向电子邮件发送信息并重定向到主页(我告诉用户在页面底部)。

但是,我听说人们可以更改页面的HTML而不需要字段。虽然表单只是一个联系表单,并且没有理由让任何人经历修改代码的麻烦,但我对Web开发和编程比较陌生,而且我想知道如何防止这种情况发生。我将来的项目工作需要这么多的安全性。

所以,无论如何,如果没有填写所需信息,PHP成功 在没有所需信息后,我如何使用PHP保持在同一页面?我知道我可以使用JavaScript,而且我可能除了PHP之外,但是因为它们可以关闭它,所以它并不完全安全。同样,我知道我的情况并不需要这么多的安全性,但对我来说这对初学者来说是个好习惯。这是我到目前为止所做的:

<?php
if (isset($_POST['email']) && isset($_POST['address']) && isset($_POST['floors'])) {
$name          = $_POST['name'];
$lotSize       = $_POST['lotSize'];
$lotSize2       = $_POST['lotSize2'];
$age           = $_POST['age'];
$taxes         = $_POST['taxes'];
$notes         = $_POST['notes'];
$email         = $_POST['email'];
$address       = $_POST['address'];
$floors        = $_POST['floors'];
$bedrooms      = $_POST['bedrooms'];
$bathroomsFull = $_POST['bathroomsFull'];
$bathroomsHalf = $_POST['bathroomsHalf'];
if (isset($_POST['basement'])) {
    $basement = "Yes";
} else {
    $basement = "No";
}

if (!(empty($email) && empty($address) && empty($floors) && is_numeric($floors))) {
    if ((strlen($name) < 101) && (strlen($email) < 255) && (strlen($address) < 51) && (strlen($lotSize) < 8) && (strlen($floors) < 4) && (strlen($age) < 4) && (strlen($taxes) < 8) && (strlen($notes) < 481)) {
        $message = "You have received information about a listing!<hr/><br/>
                    <table style='border:1px solid black;padding:3px'>
                    <tr style='padding:5px'><td><strong>Name:</strong></td><td>" . $name . "</td></tr>
                    <tr style='padding:5px'><td><strong>Email:</strong></td><td>" . $email . "</td></tr>
                    <tr style='padding:5px'><td><strong>Address:</strong></td><td>" . $address . "</td></tr>
                    <tr style='padding:5px'><td><strong>Lot&nbsp;size:</strong></td><td>" . $lotSize . " × " . $lotSize2 . " sq. ft. (" . ($lotSize*$lotSize2) . " sq. ft.)</td></tr>
                    <tr style='padding:5px'><td><strong>Floors:</strong></td><td>" . $floors . "</td></tr>
                    <tr style='padding:5px'><td><strong>Bedrooms:</strong></td><td>" . $bedrooms . "</td></tr>
                    <tr style='padding:5px'><td><strong>Full&nbsp;Baths:</strong></td><td>" . $bathroomsFull . "</td></tr>
                    <tr style='padding:5px'><td><strong>Half&nbsp;Baths:</strong></td><td>" . $bathroomsHalf . "</td></tr>
                    <tr style='padding:5px'><td><strong>House&nbsp;Age:</strong></td><td>" . $age . " years</td></tr>
                    <tr style='padding:5px'><td><strong>Taxes:</strong></td><td>$" . $taxes . " / Yr.</td></tr>
                    <tr style='padding:5px'><td><strong>Basement:</strong></td><td>" . $basement . "</td></tr>
                    <tr style='padding:5px'><td><strong>Notes:</strong></td><td>" . $notes . "</td></tr>";
        mail("****@****", "Listing Inquiry", $message, "Content-Type: text/html; charset=ISO-8859-1\r\n");
        header('Location: sellRedirect.php');
    }
}
}
?>

谢谢!

1 个答案:

答案 0 :(得分:0)

要检查字段是否已发送,您应使用isset()功能。 例如:

if(isset($_POST['name'])) {
    // The field has been sent
} else {
    die('Something is wrong!');
}