【问题标题】:Why am getting Internal Server Error?为什么会出现内部服务器错误?
【发布时间】:2023-04-01 17:06:01
【问题描述】:

我正在处理会员注册/加入表格。表单数据在按下提交按钮时提交到另一个名为 join.php 的页面我收到内部服务器错误消息。有人可以帮我找出编码中的原因/错误吗?虽然数据已成功输入数据库。

    <?php
    // file name : join.php

    $con = mysqli_connect("$DBHOST", "$DBUSER", "$DBPASS","$DBNAME");
    // Check connection
    if (mysqli_connect_errno($con))
    {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    $name   =   $_POST['name'];
    $phone  =   $_POST['phone'];
    $email  =   $_POST['email'];
    $city   =   $_POST['city'];
    $state  =   $_POST['state'];
    $ip =   $_SERVER['REMOTE_ADDR'];

    $name  = mysqli_real_escape_string($con,$name); 
    $email = mysqli_real_escape_string($con,$email);
    $phone = mysqli_real_escape_string($con,$phone);
    $city  = mysqli_real_escape_string($con,$city);
    $state = mysqli_real_escape_string($con,$state);

    $check = "SELECT COUNT(*) FROM `members` WHERE phone=".$phone." 
    OR  email=".$email." Limit 1";
    if (mysqli_query($con,$check)>=1){
    echo ("The phone number <strong>".$phone."</strong> or email <strong>
     ".$email."  </strong> address is already registered with us.");
    }else{
    $query = mysqli_query($con,"INSERT INTO `members` 
        (`name`,`email`, `phone`, `city`, `state`,`ip`, `regdate`)       
    VALUES('".$name."','".$email."','".$phone."','".$city."',
           '".$state."','".$ip."', NOW('') )") 
    or die("MYSQL ERROR :".mysqli_error($con));

    /* PREPARE MESSAGE FOR EMAIL TO NEW MEMBER */
    header("Refresh=07;URL=./index.php");


    $headers4  = "<join@mydomain.com>"; 
    $headers  = "Reply-to: $headers4\n";
    $headers .= "From: $headers4\n";
    $headers .= "Errors-to: $headers4\n";
    $headers .= "Content-Type: text/html; charset=utf-8\n";

    $message  = "<br>Dear ".$name." <br><br>";
    $message .= "Thanks for joining.<br> Your details are";
    $message .= "<br>Name - ".$name." <br>Mobile No. - ".$phone."<br>";
    $message .= "Email - ".$email."<br>City, State - ".$city.",".$state."<br>";
    $message .= "<br>Regards,<br>Name";

    mail("".$email."", "Thanks for Joining", "".$message."", "".$headers."");


    echo "<p>Congratulations!<br>IP-".$ip."<br>Your data has been added 
    into our membership database.<br><strong>Thank you for joining.</strong>";

   }

   mysqli_close($con);
   ?> 

【问题讨论】:

  • 1 = $con = mysqli_connect($DBHOST, $DBUSER, $DBPASS,$DBNAME); 你也是从哪里得到的值?
  • 你服务器的错误日志是怎么说的?
  • 设置 ini_set("display_errors",1);在您的文件中并检查它。
  • 由于是内部服务器错误,我猜是header("Refresh=07;URL=./index.php");给你带来了问题。

标签: php forms mysqli internal-server-error


【解决方案1】:

其中有很多错误.. 改进您的代码样式以提高其质量。

从修正引号开始,非常误导:

mail("".$email."", "Thanks for Joining", "".$message."", "".$headers."");

应该是

mail($email, 'Thanks for Joining', $message, $headers);

$check = "SELECT COUNT(*) FROM `members` WHERE phone=".$phone." 
OR  email=".$email." Limit 1";

也缺少引号,我不认为电子邮件和电话是数字。

$check = "SELECT COUNT(*) FROM `members` WHERE phone='".$phone."' 
OR  email='".$email."' Limit 1";

没有名为 Refresh 的标头,这有点 Javascript 风格,但你需要 HTTP:

header("Refresh=07;URL=./index.php");

固定:

header("Location: index.php");

最后启用错误报告以查看真正的错误。

【讨论】:

  • 好的,我在这里执行了专家建议的更正,现在出现此错误:注意:类 mysqli_result 的对象无法在第 35 行的 /home/public_html/join.php 中转换为 int .. if(mysqli_query($con,$check)>=1){ 电话号码 1234567890 或电子邮件 tester@mydomain.com 地址已经在我们这里注册。数据未添加到 mysql 数据库表中。
  • 哦! @DanFromGermany 提出了一个错误的建议,即在 where ='".$phone."' 行中添加引号,但所有其他建议都很有帮助。我删除了额外的报价,现在它工作正常。谢谢大家。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 2021-04-06
相关资源
最近更新 更多