我正在尝试从数据插入到数据库中,但是由于某种原因它无法正常工作。提交表单时,我一直收到以下错误:错误:INSERT INTO voorwerpenlijst(beschrijving,waar,wanneer,ophalen)值(' value ',' value ','值','值') 用户'id11961846_profielwerkstuk'@'%'对数据库'voorwerpenlijst'的访问被拒绝。当我省去$ sql部分时,我就可以连接到数据库,因此登录凭据正确。我在自己的PC上使用XAMPP和phpmyadmin运行了相同的PHP,效果很好。这为我确认了我的代码应该没问题,但是仍然不能与000webhost一起使用。我正在使用通过000webhosting获得的数据库,该数据库不允许我更改phpmyadmin中的任何特权。我尝试使用的任何SQL语句都会被阻止。 预先感谢
<html lang="nl">
<meta charset = "utf-8">
<head>
<link rel="stylesheet" href="profielwerkstukSTYLE.css">
<ul>
<li><a href="index.html">Home</a></li>
<li><a class="active" href="upload.php">upload voorwerp</a></li>
<li><a href="voorwerpenlijst.html">voorwerp lijst</a></li>
</ul>
</head>
<body>
<h3>Upload het door u gevonden voorwerp<h3><br>
<div>
<form action="upload.php" method="post" enctype="multipart/form-data">
Beschrijving:<br> <input type="text" name="beschrijving" placeholder="bijv. jas, airpods, sleutels etc."><br>
Waar:<br> <input type="text" name="waar" placeholder="bijv. lokaal 117"><br>
Wanneer:<br> <input type="text" name="wanneer" placeholder="bijv. 5e uur"><br>
ophalen waar:<br> <input type="text" name="ophalen" placeholder="bijv. bij de balie"><br>
<input type="submit" value="verzend" name="knop">
</form>
<div>
<?php
if(
isset($_POST["beschrijving"])&& $_POST["beschrijving"]!="" &&
isset($_POST["waar"]) && $_POST["waar"]!="" &&
isset($_POST["wanneer"]) && $_POST["wanneer"]!="" &&
isset($_POST["ophalen"]) && $_POST["ophalen"]!="")
{
$host="localhost";
$username="id11961846_profielwerkstuk";
$password="12345";
$dbname="voorwerpenlijst";
$conn= mysqli_connect("$host", "$username", "$password", "$dbname");
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$beschrijving=$_POST["beschrijving"];
$waar=$_POST["waar"];
$wanneer=$_POST["wanneer"];
$ophalen=$_POST["ophalen"];
$sql = "INSERT INTO voorwerpenlijst (beschrijving, waar, wanneer, ophalen)
VALUES ('$beschrijving', '$waar', '$wanneer', '$ophalen')";
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
}
else
{
if(isset($_POST["knop"]))
{
print("Vul A.U.B alles in");
}
}
?>
</body>
</html>
答案 0 :(得分:-1)
您的代码容易受到SQL注入的攻击-执行此插入操作的更好方法是使用prepared statement
〜它也可能有助于解决您的问题
<?php
$errors=[];
$args=array(
'beschrijving' => FILTER_SANTITIZE_STRING,
'waar' => FILTER_SANTITIZE_STRING,
'wanneer' => FILTER_SANTITIZE_STRING,
'ophalen' => FILTER_SANTITIZE_STRING,
'knop' => FILTER_SANTITIZE_STRING
);
foreach( array_keys( $args ) as $field ){
if( !isset( $_POST[ $field ] ) ) $errors[]=sprintf( 'The field "%s" is not set', $field );
}
foreach( $_POST as $field => $value ){
if( !in_array( $field, array_keys( $args ) ) )$errors[]=sprintf( 'Unknown field "%s"', $field );
}
if( empty( $errors ) ){
/* filter incoming POST array */
$_POST=filter_input_array( INPUT_POST, $args );
/* create variables */
extract( $_POST );
$host="localhost";
$username="id11961846_profielwerkstuk";
$password="12345";
$dbname="voorwerpenlijst";
$conn=new mysqli( $host, $username, $password, $dbname );
$sql='insert into `voorwerpenlijst` ( `beschrijving`, `waar`, `wanneer`, `ophalen` ) values (?,?,?,?)';
$stmt=$conn->prepare( $sql );
if( !$stmt )$errors[]='failed to prepare sql';
$stmt->bind_param( 'ssss', $beschrijving, $waar, $wanneer, $ophalen );
$res=$stmt->execute();
$stmt->close();
echo $res ? 'New record created successfully' : 'error';
} else {
/* display errors? */
}
?>