【问题标题】:000webhosting database won't let me send values to phpmyadmin000webhosting 数据库不允许我向 phpmyadmin 发送值
【发布时间】:2020-04-09 03:24:27
【问题描述】:

我正在尝试将数据插入到我的数据库中,但由于某种原因它无法正常工作。提交表单时,我不断收到以下错误:Error: INSERT INTO voorwerpenlijst (beschrijving, waar, wanneer, ophalen) VALUES ('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>

【问题讨论】:

  • 只需授予用户权限参见dev.mysql.com/doc/refman/8.0/en/grant.html 或使用具有权限的用户
  • 通过 000webhosting 使用 phpmyadmin 时,我不能更改任何权限或用户。当我运行 sql 它只是说“访问被拒绝用户:'id11961846_profielwerkstuk'@'%' 到数据库'id11961846_voorwerpenlijst'
  • 您必须以 root 身份登录并授予链接中描述的权限。
  • 我不确定我是否能够。据我所知,您从 000webhosting 获得的用户名是您可以登录的唯一用户名
  • 然后联系支持,他们犯了一个错误,没有授予权限。并请检查答案,因为sql注入stackoverflow.com/questions/60174/…

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


【解决方案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? */
    }
?>

【讨论】:

    猜你喜欢
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 2018-10-23
    • 2017-03-02
    • 1970-01-01
    • 2011-07-28
    • 2014-04-20
    相关资源
    最近更新 更多