进度在PHP文件(vip_reg.PHP)的站点上生成了一个500内部服务器错误,我简化并删除了一些多余的代码/注释,但仍然得到了500错误。一旦我制作了无效的数据(无效的电话号码/无效的电子邮件格式)并发布到服务器,它就什么都不显示,并在php页面上停止了。mysqli语句会使程序崩溃,还是HTML结构不好?
我是PHP和mysqli的初学者,如果这是一个愚蠢的问题,我很抱歉。因此,任何提示或建议都将不胜感激。谢谢大家。
HTML文件:
......<div class='rows'>
<div class='col_left'>
<img src='imageabc.jpg' id='left_img' alt='test'>
</div>
<form action="vip_reg.php" method="POST"><!--Post data to PHP-->
<div class='col_right'>
<p><span class="txtDesc">Your Name</span><span class="txtField"><input type='text' name='vipName' id='vipName' size='40' autocomplete="off" /></span></p> <?php echo $errorMsg; ?><br/><br/>
<p><span class="txtDesc">Phone Number</span><span class="txtField"><input type='tel' name='telNum' id='telNum' size='40' maxlength='8' autocomplete="off"/></span></p><?php echo $errorTel; ?><br/><br/>
<p><span class="txtDesc">Email Address </span><span class="txtField"><input type='text' name='email' id='email' size='40' autocomplete="off"/></span></p><?php echo $errEmail; ?><br/><br/>
<p><span class="txtDesc">Car Number</span><span class="txtField"><input type='text' name='carNum' id='carNum' size='40' autocomplete="off"/></span></span></p><?php echo $errCarNum; ?><br/><br/>
<p><span class="txtDesc">Verification</span><span class="txtField"><span class='g-recaptcha' data-sitekey='xxxxxxxx Google recaptcha-secret-key'></span></span></p><?php echo $errorMsg; ?><br/>
</div>
</div>
<div class='rows'>
<div class='button_Style'>
<input type="image" name="submit" id="submit"src="image/submit_btn.jpg" alt="submit" />
</div>
</form>......
PHP文件:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if(!empty($_POST['vipName'])&& !empty($_POST['telNum'])&& !empty($_POST['email']&& !empty($_POST['carNum']))){
if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){ //detect user clicks recaptcha or not
$recaptcha=$_POST['g-recaptcha-response'];
include("getCurlData.php");
$google_url="https://www.google.com/recaptcha/api/siteverify";
$secret='google-secret-key';
$ip=$_SERVER['REMOTE_ADDR'];
$url=$google_url."?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip;
$res=getCurlData($url);
$res= json_decode($res, true);
if($res['success']){ //Get POST Data
$name_vip = htmlspecialchars($_POST['vipName']);
$telNumber = htmlspecialchars($_POST['telNum']);
$email = htmlspecialchars($_POST['email']);
$carNum = htmlspecialchars($_POST['carNum']);
//validation
$result = mysqli_query($con, "SELECT car_num FROM vip_register WHERE username='$carNum'");
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);
if(mysqli_num_rows($result)==1){ //unique
$errorCarNum = "The Car Plate Number is existed, please check.";
return true;
}elseif(strlen($telNumber)!=8){
$errTel = "Telephone number must be 8 digits.";
return false;
}elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)) { //validate email
$errEmail = "The format of Email address is invalid.";
return false;
}else{ //success
echo "OK";
$vip = mysqli_real_escape_string($_POST['$name_vip']);
$tel = mysqli_real_escape_string($_POST['telNumber']);
$emailAddress = mysqli_real_escape_string($_POST['$email']);
$carNumber = mysqli_real_escape_string($_POST['$carNum']);
//insert into DB
$sql_vip="INSERT INTO `vip_register` (`name`, `tel`, `email`, `car_num`) VALUES ('$vip', '$tel', '$emailAddress', '$carNumber')";
$uploadSQL = $dbConn->prepare($sql_vip);
$uploadSQL->execute();
//clear the error msg
$name_vip = $telNumber = $email = $carNum = "";
$errorMsg = $errTel = $errEmail = $errCarNum = "";
//turn it to success page
//header("Location:xxx.php");
}
}
}else{
$errorMsg = $errTel = $errEmail = $errCarNum = "It should not be blank.";
return false;
}
}
您需要查看PHP错误日志,查找代码中的特定错误。
一般来说,在编码时,这是一个很好的实践。
您可以添加PHP函数:
error_reporting(E_ALL);
到PHP文件的顶部。。。
或者(对于生活环境来说,这是更好的选择)。。。进入服务器的命令行(如果您可以访问命令行),然后键入以下命令:
grep error_log /etc/php.ini
这将在命令提示符中输出PHP错误日志的位置。
找到该文件并下载/打开该文件,查看您收到的最新错误。将该错误粘贴到此处,我们都可以帮助您更好地解决该错误。
500服务器错误来自Apache,而不是PHP。这意味着"服务器配置错误"。根据我的经验,这总是由于.htaccess文件中的某些内容导致的,而您的Apache版本并不理解这些内容。
使用文本编辑器并对.htaccess文件中的所有行进行注释,等待片刻并测试脚本。如果有效,请开始取消对.htaccess文件中的行的注释,每次一节,直到再次出现500错误。
请注意,有些web主机似乎没有立即看到.htaccess文件中的更改。