这是我正在学习的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还是很陌生,所以如果我缺少任何基本信息,请告诉我。我感谢任何建议!
答案 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
,没有第二个美元符号,
当然,这里的示例具有一些安全漏洞,您也需要解决这些漏洞,但这不是您的问题