000webhosting数据库不会让我将值发送到phpmyadmin

时间:2019-12-16 16:18:59

标签: php mysql database error-handling sql-insert

我正在尝试从数据插入到数据库中,但是由于某种原因它无法正常工作。提交表单时,我一直收到以下错误:错误: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>

1 个答案:

答案 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? */
    }
?>