2016-10-26 181 views
1

我一直在关注w3schools的php教程来生成一个表单。表单收集并显示数据,但没有任何错误检查正在工作。我已经通过lint运行php和html,没有错误,并且双重检查了我使用的引号。php函数没有被应用

具体而言,该脚本未应用htmlspecialchars,trimsplit。没有正在应用正则表达式检查,并且错误消息没有出现。我尝试用一​​个简单的if/not echo消息来替换错误消息,并且工作正常,尽管消息放置在网页的头部,而不是放在字段旁边。

我也正在执行以下内容。

注意:未定义指数:numChild在/volume1/homes/richard/www/action.php上线22

第22行是:

$totalGuests = $_POST['numAdults'] =+ $_POST['numChild']; 

这个和之间的差其他未定义的索引问题是函数'test_input'未被应用。我在下面包含了@Poiz建议,这解决了未定义的索引问题,但该函数现在仍在工作。


我的代码是:

<!DOCTYPE html> 
<html lang="en"> 

<head> 
<style> 
.error {color: #FF0000;} 
</style> 
</head> 
<body> 

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', TRUE); 
ini_set('display_startup_errors', TRUE); 

// define variables and set to empty values 
$guestName = $guestEmail = $guestPhone = $startDate = $endDate = $numAdults = $numChild = ""; 
$guestNameErr = $guestEmailErr = $guestPhoneErr = $startDateErr = $endDateErr = $numAdultsErr = $numChildErr = ""; 

$maxAllowed = 4; 
$totalGuests = $_POST['numAdults'] =+ $_POST['numChild']; 

if ($_SERVER['REQUEST_METHOD'] == "POST") { 

    if (empty($_POST['guestName'])) { 
    $guestNameErr = "guestName is required"; 
    } else { 
    $guestName = test_input($_POST['guestName']); 
    // check if name only contains letters and whitespace 
    if (!preg_match("/^[a-zA-Z ]*$/",$guestName)) { 
     $guestNameErr = "Only letters and white space allowed"; 
     } 
    } 

    if (empty($_POST['guestEmail'])) { 
    $guestEmailErr = "Email is required"; 
    } else { 
    $guestEmail = test_input($_POST['guestEmail']); 
    // check if e-mail address is well-formed 
    if (!filter_var($guestEmail, FILTER_VALIDATE_EMAIL)) { 
     $guestEmailErr = "Invalid guest email format"; 
     } 
    } 

    if (empty($_POST['guestPhone'])) { 
    $guestPhoneErr = "Phone number is required"; 
    } else { 
    $guestPhone = test_input($_POST['guestPhone']); 
    // check if phone number is UK format and valid 
    if (!preg_match("/^(\+44\s?7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3}$/",$guestPhone)) { 
     $guestPhoneErr = "Please enter a valid phone number"; 
     } 
    } 

    if (empty($_POST['startDate'])) { 
    $startDateErr = "Start date is required"; 
    } else { 
    $startDate = $_POST['startDate']; 
    } 

    if (empty($_POST['endDate'])) { 
    $endDateErr = "Start date is required"; 
    } else { 
     $endDate = $_POST['endDate']; 
     if ($_POST['endDate'] < $_POST['startDate']) { 
     $sendDateErr = "End date must be before start date"; 
     } 
    } 

    if ($totalGuests > $maxAllowed) { 
    $bookingErr = "A maximum of 4 guests can be accommodated at Mariner's Loft"; 
    } else { 
     $numAdults = ($_POST['numAdults']); 
     $numChild = ($_POST['numChild']); 
     } 
} 

function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 

?> 

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> 


    <br><input type="text" class="form-control" id="guestName" name="guestName" value="<?php echo $guestName;?>" placeholder="Full name" autofocus required> 
    <br> 
    <br><input type="email" class="form-control" id="guestEmail" name="guestEmail" value="<?php echo $guestEmail;?>" placeholder="email"> 
    <br> 
    <br><input type="phone" class="form-control" id="guestPhone" name="guestPhone" value="<?php echo $guestPhone;?>" placeholder="Phone number"> 

    <p><strong>How many guests?</strong></p> 

    <p>How many adults?</p> 
    <br><input type="text" class="form-control" id="numAdults" name="numAdults" value="<?php echo $numAdults;?>" placeholder="number of adults"> 
    <p>How many children?</p> 
    <br><input type="text" class="form-control" id="numChild" name="numChild" value="<?php echo $numChild;?>" placeholder="number of children"> 
    <br> 
    <br><input type="date" class="form-control" id="startDate" name="startDate" value="<?php echo $startDate;?>" placeholder="Arrival date"> 
    <br> 
    <br><input type="date" class="form-control" id="endDate" name="endDate" value="<?php echo $endDate;?>" placeholder="Leaving date"> 
    <br><br> 
    <input type="submit" name="submit" value= "Submit"/> 
    <br><br> 
    <input type="reset" name="submit" value="Cancel"/> 
</form> 

<?php 

    echo "<h2>Guest info:</h2>"; 
    echo $guestName; 
    echo "<br>"; 
    echo $guestEmail; 
    echo "<br>"; 
    echo $guestPhone; 
    echo "<br>"; 
    echo $totalGuests; 
    echo "<br>"; 
    echo $startDate; 
    echo "<br>"; 
    echo $endDate; 
?> 
</body> 
</html> 

任何帮助感激地接受。

+0

附注:如果你想添加并在同一时间分配,然后'= +'不符合你的期望。我认为你可能想''=' –

+0

@JeffPuckettII在这种情况下,它看起来像是将后置值转换为一个数字,这是'= + $ numericString'所能做的。虽然它可能不是意图。 – apokryfos

回答

1

守则$totalGuests = $_POST['numAdults'] =+ $_POST['numChild'];应移入条件块或重新声明有一个默认值:(1,例如)...

$maxAllowed = 4; 
    $totalGuests = (isset($_POST['numAdults']) && 
        isset($_POST['numChild'])) ? 
        ($_POST['numAdults'] + $_POST['numChild']) 
        :1; 
    if ($_SERVER['REQUEST_METHOD'] == "POST") { 
     // REST OF THE CODES 
    } 
+0

但是,如果你这样做,他会在第124行发生错误,因为$ totalGuests不存在('echo $ totalGuests;')。所以,保持变量初始化的位置,但给它的值“”“'。 –

+0

我应用了@Poiz建议,脚本运行时没有错误消息,totalGuests就像它应该显示的一样。验证函数'test_input'仍然不起作用。 – sidestrand