【问题标题】:How to delete " from inserted data to MySQL database如何从插入的数据中删除“到 MySQL 数据库”
【发布时间】:2019-07-26 03:30:47
【问题描述】:

我有一个问题。

今天,我做了一个android应用程序,用于将数据插入MySQL数据库。

当我尝试插入 String 类型(例如:name)时,记录中会显示:"name"

如何从插入的字符串中删除"

这是我的 PHP 脚本:

<?php
require "connect.php";

$firstHash = substr(str_shuffle(str_repeat("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRSTUWYZX", 5)), 0, 5);
$secondHash = substr(str_shuffle(str_repeat("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRSTUWYZX", 5)), 0, 20);

$file_path_URL = "";

$id = "PRD-$firstHash-$secondHash";
$name = $_POST["name"];
$description = $_POST["description"];
$price = $_POST["price"];
$state = $_POST["state"];
$category = $_POST["category"];

$file_path = "uploads/";

$response = array();

if (isset($_FILES["upload_file"]))
{
    $target_file_name = $file_path .basename("$id.png");

    if(file_exists($target_file_name))
    {
        $success = false;
        $message = "Name already exist";
    }
    else
    {
        if (move_uploaded_file($_FILES["upload_file"]["tmp_name"], $target_file_name))
        {
            $photoPath = "$file_path_URL$id.png";
            $query = "INSERT INTO `produkty`(`ID`, `Nazwa`, `Opis`, `Cena`, `Stan`, `Zdjecie`, `Kategoria`) VALUES ('$id', '$name', '$description', $price, $state, '$photoPath', '$category')";

            $result = mysqli_query($conn, $query);

            if(!$result)
            {
                $success = false;
                $message = "Error on insert data";
            }
            else
            {
                $success = true;
                $message = "Add product successfuly";
            }
        }
    else
        {
            $success = false;
            $message = "Error while uploading";
        }

    }


}
else
{
    $success = false;
    $message = "Required Field Missing";
}

$response["success"] = $success;
$response["message"] = $message;

$json = json_encode($response);

echo ($json);
?>

Android中负责获取用户输入数据的方法:

    private void getValues()
{
    Log.v(TAG, "getValues(): init");

    EditText nameET = findViewById(R.id.nameET);
    EditText descriptionET = findViewById(R.id.descriptionET);
    EditText priceET = findViewById(R.id.priceET);
    EditText categoryET = findViewById(R.id.categoryET);
    CheckBox stateCHB = findViewById(R.id.checkBox);

    String name = nameET.getText().toString();
    String description = descriptionET.getText().toString();
    Float price = Float.valueOf(priceET.getText().toString());
    String category = categoryET.getText().toString();
    boolean state;

    if (stateCHB.isChecked())
    {
        state = true;
    }
    else
    {
        state = false;
    }

    sendDataToServer(name, description, price, state, category, imagePath);

    Log.v(TAG, "getValues(): end");

}

我把它像字符串一样发布到 PHP 中。这是一个错误?

我第一次从 Android 应用程序插入 MySQL 数据库。 请帮帮我!

【问题讨论】:

  • 使用。参数化。查询。 您对数据库的所有担忧都将结束!现在,你的代码乞求黑客通过SQL注入窃取你的所有数据
  • 我是使用 MySQL 数据库的初学者。我以后会学习数据库的安全性,但是感谢您对此的关注。
  • 没有。如果您告诉自己将来会学习它,那么您将永远不会学习它。另外:没有任何单一的理由 使用参数化查询。它们性能更好,更具可读性,使您免受大量潜在错误的影响,并完全保护您免受 SQL 注入攻击。相信我:现在就以正确的方式去做,或者永远以错误的方式去做。
  • 好的,谢谢您的建议

标签: php android mysql


【解决方案1】:

我没有立即看到报价的来源。也许在“sendDataToServer”内部,但一种解决方案是替换

$name = $_POST["name"];

$name = str_replace( '"', '', $_POST["name"]);

在您的 PHP 代码中删除 POST 请求到达时的引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 2021-08-31
    • 2014-08-08
    • 1970-01-01
    • 2020-05-01
    • 2012-11-16
    • 2021-09-09
    相关资源
    最近更新 更多