我正在尝试将我们的网站迁移到使用PHP5的新主机。以前我们在PHP4上。
我有一个表单在用户填写之前在php4上运行的调查后没有提交并重定向到thankyou页面。我确信这可能是我想念的东西,但我不明白为什么它不起作用。
当我点击提交时,调查页面会重新加载,网址会被添加到“结尾”,并且电子邮件不会发送给我。
我们的survey.php中的代码如下所示,其中包含我的电子邮件地址,并删除了大部分HTML表格。有人能指出我正确的方向吗?
谢谢!
<?
$APP_ROOT = "../";
$FILE = __FILE__;
$TITLE="Service Survey";
if(!isset($submit)) {
include($APP_ROOT."include/header.php");
include($APP_ROOT."include/nava.php");
?>
<div class="bodymargin">
<img src="<?=$WEB_ROOT;?>images/titles/<?=$SECTION."_".$FILE;?>.gif" width="400" height="36"><br>
<br>
<form method="POST" action="<?=$FILE;?>.php?submit=t">
<?
if(isset($error)) {
while(list($key, $value) = each($HTTP_GET_VARS)) {
$$key = stripslashes($value);
}
print("<p class=\"alert\">". urldecode($error) . "</p>\n");
}
?>
<input type="text" name="name" value="<?=$name;?>">
</form>
<?
include($APP_ROOT."include/navb.php");
include($APP_ROOT."include/footer.php");
} else {
include_once($APP_ROOT . "functions/index.php");
include_once($APP_ROOT . "functions/form_validation.php");
$CONTINUE = TRUE;
$valid = new Validation($HTTP_POST_VARS);
if($CONTINUE = $valid->success) {
$to = "myemailaddress";
$subject = "Service Survey";
$from_email = $to;
$from_name = "mysite.com";
$headers = "From: $from_name<$from_email>\n";
$headers .= "Reply-To: <$email>\n";
$headers .= "Return-Path: <$from_email>\n";
$body = "The following information was just posted \n";
unset($HTTP_POST_VARS['required_fields']);
reset($HTTP_POST_VARS);
while(list($key, $value) = each($HTTP_POST_VARS)) {
if(!empty($value)) {
$body .= proper_form($key) . ": " . stripslashes($value) ."\n";
}
}
$body .= "\nThis is an automated message, please do not respond.";
mail($to,$subject,$body,$headers);
$URL = $WEB_ROOT . "/customer/thanks.php?form=" . $FILE;
server_redirector($URL);
} else {
while(list($key, $value) = each($HTTP_POST_VARS)) {
$rebound .= "&$key=" . urlencode(stripslashes($value));
}
$URL = $WEB_ROOT . "customer/survey.php?error=". urlencode(nl2br($valid->errors)) . $rebound;
server_redirector($URL);
die();
}
}
?>
答案 0 :(得分:1)
regsiter_globals
在较新的PHP版本中无效。
因此,您必须使用if(!isset($submit))
而不是if(!isset($_GET['submit']))
。对于发布的值,您使用$_POST['parameter']
。
答案 1 :(得分:0)
__FILE__
常量可能不会返回您的预期,或者不会返回它之前的内容。来自the docs
自PHP 4.0.2起,__ FILE__始终包含已解析符号链接的绝对路径,而在旧版本中,它在某些情况下包含相对路径。
所以你现在可能会得到一条绝对的道路,而不是相对的道路。
同时检查新安装是否允许short_open_tags
为explained in the docs
答案 2 :(得分:0)
$ HTTP_POST_VARS是deprecated。您需要将其替换为$ _POST。
或者,您只需添加$ HTTP_POST_VARS = $ _POST;在脚本的开头避免编辑每一行(不是真的推荐)。