2009-11-17 79 views
0

我有以下形式,它允许用户选择一个酒店预订日期/房间。将表单变量传递到一个URL与PHP

<form action="booking-form.php" method="post"> 
    <fieldset> 
    <div class="select-date"> 
     <label>Arrival Date</label> 
     <select name="arrd" class="day"> 
     <option value="1" >1</option> 
     ... snip ... 
     <option value="24" selected="selected">24</option> 
     </select> 

     <select name="arrm" class="month"> 
     <option value="01" >January</option> 
     ... snip ... 
     <option value="11" selected="selected">November</option> 
     </select> 
     <select name="arry" class="year"> 
     <option value="2009" selected="selected">2009</option> 
     ... snip ... 
     </select> 
    </div> 
    <div class="more"> 
    <div class="info"> 
     <label>Days</label> 
     <select name="days"> 
     <option value="1">01</option> 
     ... snip ... 
     <option value="7" selected="selected">07</option> 
     </select> 
    </div> 
    <div class="info"> 
     <label>Rooms</label> 
     <select name="rooms"> 
     <option value="1">01</option> 
     ... snip ... 
     </select> 
    </div> 
    </div> 
    <input type="submit" value="Check availabilty"/> 
    <input type="hidden" name="submitted" value="TRUE"/> 
    </fieldset> 
</form> 

这是应该处理从表单传递的变量并将它们通过url传递给预订提供程序的php。 当表单仅提交一个没有错误的白色屏幕时,没有任何反应。

<?php 

ini_set ('display_errors',1); 
error_reporting (E_ALL & ~ E_NOTICE); 

if (isset($_POST['submitted'])){ 

    $errors = array(); 

    // A bunch of if's for all the fields and the error messages. 


    if (empty($_POST['arrd'])) { 
    $errors[] = 'Please select a day'; 
} else{ 
    $arrd = ($_POST['arrd']); 
} 

if (empty($_POST['arrm'])) { 
    $errors[] = 'Please select a month'; 
} else{ 
    $arrm = ($_POST['arrm']); 
} 

if (empty($_POST['arry'])) { 
    $errors[] = 'Please select a year'; 
} else{ 
    $arry = ($_POST['arry']); 
} 

if (empty($_POST['non'])) { 
    $errors[] = 'Please choose a number of nights'; 
} else{ 
    $non = ($_POST['non']); 
} 


if (empty($_POST['norooms'])) { 
    $errors[] = 'Please choose a number of rooms'; 
} else{ 
    $norooms = ($_POST['norooms']); 
} 


if (empty($errors)){ 
$arrdate = $arrd . " " . $arrm ."" . $arry; 

$url ="https://portals.uk.rezlynx.net/DHPPORTAL/wfrmpakquery.aspx?SiteID=DHOLDHALL&arrdate=$arrdate&non=$non&norooms=$norooms"; 
header('Location: $url'); 
exit(); 

} 

else{ 
foreach($errors as $msg){ 

echo"-msg<br/>\n"; 
} 

} 

?> 

任何人都可以看到我失踪了吗?

在此先感谢..

+0

尝试var_dump($ _ POST); – Greg 2009-11-17 12:26:32

回答

1

如果通过PHP的皮棉检查(PHP -l)运行你的代码,你会看到你在62行(最后一行)语法错误

你简直想念大括号,需要关闭最初的“if”语句。

+0

谢谢,这也有帮助! – 2009-11-17 12:36:56

3

线

header('Location: $url'); 

应该是

header("Location: $url"); 

变量不单引号内进行评价。

+0

从我+1,但我只有一分钟左右,想要+1我:p – Lizard 2009-11-17 12:34:36

+0

感谢这有助于! – 2009-11-17 12:36:20

0

的问题可能是

header('Location: $url'); 
exit(); 

可尝试

header('Location: '.$url); 
exit(); 

header("Location: $url"); 
exit(); 
# using the double quotes will parse the $url variable 
0

你就不能使用该网址在表单的action属性和方法设置成GET

<form action="https://portals.uk.rezlynx.net/DHPPORTAL/wfrmpakquery.aspx?SiteID=DHOLDHALL" method="get"> 
    [...] 
</form> 
+0

我从来没有想到这一点! - 我试了一下,得到了一个Apache错误页面。提供程序声明url必须采用以下格式: https://portals.uk.rezlynx.net/DHPPORTAL/wfrmpakquery.aspx?SiteID=DHOLDHALL&arrdate=12/11/2009&non=2&norooms=3 any ideas ? – 2009-11-17 12:42:44

+0

“错误”的URL究竟是什么样的?我想他们要么与相关的附加URL字段不一致(这是没有意义的),要么浏览器使用第一个参数而不是'&'的问号,这会导致问题,因为存在动作URL中已经有一个参数。在后一种情况下,将以下字段添加到URL: '' – Franz 2009-11-17 14:05:20

+0

PS:并明显从操作URL中删除参数... – Franz 2009-11-17 14:05:52