修复“错误500:页面无法正常工作”错误PHP

时间:2019-10-08 21:13:45

标签: php mysql sql

这是我正在学习的PHP课程的作业。我们在mySQL中创建了一个数据库,并且正在致力于创建一个网站来查看/插入/更新/删除数据库中的信息。现在,运行if语句以查看ID#是否已存在于数据库中时,出现“页面无法工作”错误。

我已经尝试注释掉部分代码以确定问题所在,并且我很确定这是我的“数据库连接”注释下面的代码存在问题。这是一个初学者的课程,我正在看教授的演练视频以进行作业,但是我无法弄清楚自己做错了什么。

<?php 
session_start(); //starts the session

//Set all variables
$uniqueid = $_POST["uniqueid"];
$breed = $_POST["breed"];
$color = $_POST["color"];
$furlength = $_POST["furlength"];
$dogweight = $_POST["dogweight"];

//test if variables come in correctly
//echo "variables: " . $uniqueid . $breed . $color . $furlength . $dogweight;

//test if all fields filled
if (($uniqueid == "") || ($breed == "") || ($color == "") || ($furlength == "") || ($dogweight == "")) {
    $_SESSION["errormessage"] = "You must complete all fields!"; //error message if any field is empty
    header("Location:insert.php");
    exit;
}
else { //if all fields filled
    $_SESSION["errormessage"] = ""; //no error message
}

//database connections -- THIS IS PROBABLY WHERE THE ISSUE IS
include("includs/openDBConn.php"); //include the database
//check that # adding isn't already part of database
$sql="SELECT UniqueID FROM Dogs WHERE UniqueID=".$uniqueid;
$result=$conn->query($sql);

if($result->$num_rows > 0) { //make sure database loads the rows
    echo("num rows= ".$result->$num_rows); //echo the number of rows
}
else { //if there are no rows
    echo("No data found"); //give error message
}
?>

在另一页上,有一些字段供我键入UniqueID,品种,颜色等。此页应检查所有字段是否已填写(该部分有效),然后检查是否已存在具有我键入的UniqueID的行。如果存在,则应回显使用该UniqueID找到的行数(应为1)。

我对PHP还是很陌生,所以如果我缺少任何基本信息,请告诉我。我感谢任何建议!

2 个答案:

答案 0 :(得分:1)

您的代码充满了漏洞。容易出现sql注入,xss攻击,csrf,html注入。

为了避免大多数此类问题,我已对其进行了重新编写。

1。)现在可以使用准备查询减轻SQL注入

2。)使用整数值的intval和字符串的strip_tags可以减轻HTML注入。您可以在php中阅读有关数据验证和清理的更多信息,以查看更多可用选项

3。)xss攻击已通过 htmlentities()缓解。您还可以使用 htmlspecialchars()。阅读有关所有这些内容的更多信息

请参阅下面的更安全的密码

请尽可能放置您的数据库凭据 我不知道您的唯一ID是字符串还是整数(数字)

// if UniqueID is integer or number use i parameter
$stmt->bind_param("i", $UniqueID);

// if UniqueID is a string use s parameter
$stmt->bind_param("s", $UniqueID);

这是代码

    <?php

    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "ur dbname";

    // Create connection
    $connect = new mysqli($servername, $username, $password, $dbname);

    // Check connection
    if ($connect->connect_error) {
        die("Connection to db failed");
    }

session_start(); //starts the session

    // ensure that the Id is integer using intval
    //$uniqueid = intval($_POST["uniqueid"]);


    // sanitize your data against xss and html injection
    $uniqueid = strip_tags($_POST["uniqueid"]);
    $breed = strip_tags($_POST["breed"]);
    $color = strip_tags($_POST["color"]);
    $furlength = strip_tags($_POST["furlength"]);
    $dogweight = strip_tags($_POST["dogweight"]);

    //test if all fields filled
    if (($uniqueid == "") || ($breed == "") || ($color == "") || ($furlength == "") || ($dogweight == "")) {
        $_SESSION["errormessage"] = "You must complete all fields!"; //error message if any field is empty
        header("Location:insert.php");
        exit();
    }

    //Avoid sql injection using prepared statement

    $stmt = $connect->prepare("SELECT UniqueID FROM Dogs WHERE UniqueID = ?");

    // UniqueID is integer or number use i parameter
    $stmt->bind_param("i", $UniqueID);

    // if UniqueID is a string use s parameter
    //$stmt->bind_param("s", $UniqueID);

    $stmt->execute();
    $stmt -> store_result(); 
    $stmt -> bind_result($UniqueID); 

    if ($stmt->num_rows >= "1") {
    while ($stmt -> fetch()) { 

    // ensure that xss attack is not possible using htmlentities
    // fetch UniqueID

        echo "your UniqueID: .htmlentities($UniqueID). <br>"; 


    }
    }else{

       echo "No data found";
    }

    $stmt->close();
    $connect->close();
    ?>

答案 1 :(得分:1)

您在$result->$num_rows上遇到语法错误,应该是$result->num_rows,没有第二个美元符号,

当然,这里的示例具有一些安全漏洞,您也需要解决这些漏洞,但这不是您的问题