无法在php中使用$\u post值作为mysql的表名

无法在php中使用$\u post值作为mysql的表名,php,html,mysql,Php,Html,Mysql,我现在正在写一个博客,目的是只向它所属的人显示消息,所以我有一个select-in-html,人们可以在其中选择一个人,然后将其发送到MySQL中的那个表 我现在在index.html中拥有的内容: <form action="post.php" method="post"> <label>Naam:</label> <input type="text" name="name" placeh

我现在正在写一个博客,目的是只向它所属的人显示消息,所以我有一个select-in-html,人们可以在其中选择一个人,然后将其发送到MySQL中的那个表

我现在在index.html中拥有的内容:

<form action="post.php" method="post">
                <label>Naam:</label>
                <input type="text" name="name" placeholder="Naam" class="form-control">
                <label>Voor wie is dit bericht bestemd?</label>
                <select name="portal" class="form-control">
                    <option id="0">Selecteer</option>
                    <option id="1">Leerlingen</option>
                    <option id="2">Docenten</option>
                    <option id="3">Ouders</option>
                    <option id="4">Bedrijven</option>
                </select>
        </div>
        <div class="paper col-sm-6">
                <label>Email:</label>
                <input type="email" placeholder="Email" class="form-control">
                <label>Onderwerp:</label>
                <input type="textarea" class="form-control" placeholder="Onderwerp" name="subject"/>
        </div>
        <div class="paper col-sm-12">
                <label>Korte informatie:</label>
                <input class="form-control" type="textarea" name="short"/>
                <label>Volledige informatie</label>
                <textarea class="form-control" rows="4" cols="50" name="long"></textarea>
        </div>
        <div class="paper col-sm-12 text-center">
                <div class="col-xs-12" style="height:25px;"></div>
                <button class="btn btn-default">Verstuur!</button>
            </form>
谢谢

编辑:

谢谢大家的帮助

这段代码最终对我起了作用:

<?php
    $servername = "localhost";
    $username = "a1070rik";
    $password = "";
    $dbname = "portals";
    $title = $_POST['subject'];
    $by_information = $_POST['name'];
    $short = $_POST['short'];
    $long_information = $_POST['long'];
    $portal = $_POST['portal'];

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "INSERT INTO  $portal (`id`, `title`, `info_bys`, `info_shorts`, `info_longs`) VALUES ('', '$title', '$by', '$short', '$long')";

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>
$\u POST的工作原理类似于数组,因此您需要通过其索引从$\u POST中获取值,例如在您的案例中,主题、名称等。因此,在将值分配给变量时,请删除

$title = $_POST['subject'];
$by = $_POST['name'];
$short = $_POST['short'];
$long = $_POST['long'];
$portal = strtolower($_POST['portal']);
注意:名称“by,long”是MySQL保留的关键字。所以,改变他们

从更新SQL

 $sql = "INSERT INTO $portal (id, title, by, short, long) VALUES ('', '$title', '$by', '$short', '$long')";

您的sql易受攻击,因此请使用

// prepare and bind
$stmt = $conn->prepare("INSERT INTO  $portal (`title`, `info_bys`, `info_shorts`, `info_longs`) VALUES (?, ?, ?, ?)");
$stmt->bind_param($title, $by, $short, $long);
$stmt->execute();

不要将变量用作字符串。保持它的条理性和防愚性:


"(主题),;是文本字符串“$\u POST[subject]”;实际上,请注意,在插入之前必须引用字符串。所有这些,如果你仍然想有不安全和易受攻击的查询,当然这个设计是危险的破坏!如果继续沿着这条路走下去,您将很容易受到SQL注入攻击。我的意思是,为什么你有多个结构完全相同的数据库表?它就像是一个为老师、学生、家长等写的博客。所以家长的帖子对学生来说是看不见的。谢谢,它起了作用,但现在我有一个新的错误,您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在第1行使用near'by,short,long value,awcacawdca,acawcac,adawdad,dadaddwd',祝您好运,一旦有人在标题字段中输入一个',此解决方案仍处于危险状态!如果有人在输入中输入一个's',那么他们仍然可以突破预期的SQL并执行任意SQL命令。使用适当的转义机制,如mysqli_real_escape_string或prepared语句。此外,用户不可能提供表名。这在各方面都是危险的。返回并重新思考您的设计和数据验证。@RikNijdeken它不起作用,它只是给了您一个您期望的结果。世界是不同的。此代码仍被破坏。祝您好运,一旦有人在标题字段中输入“a”,此解决方案仍处于危险的破坏状态!如果有人在输入中输入一个's',那么他们仍然可以突破预期的SQL并执行任意SQL命令。使用适当的转义机制,如mysqli_real_escape_string或prepared语句。此外,用户不可能提供表名。这在各方面都是危险的。回顾并重新思考您的设计和数据验证他问如何使其工作,查看HTML这是一个受控制的环境,为了使其安全,他应该使用转义字符串,但我怀疑他是否知道它是什么,这将使它变得很难这不是借口。不管是正确地做还是根本不做,给人们提供可能导致危险行为的解决方案对任何人都没有帮助。
 $sql = "INSERT INTO $portal (id, title, by, short, long) VALUES ('', '$title', '$by', '$short', '$long')";
 $sql = "INSERT INTO  $portal (`id`, `title`, `info_bys`, `info_shorts`, `info_longs`) VALUES ('', '$title', '$by', '$short', '$long')";
// prepare and bind
$stmt = $conn->prepare("INSERT INTO  $portal (`title`, `info_bys`, `info_shorts`, `info_longs`) VALUES (?, ?, ?, ?)");
$stmt->bind_param($title, $by, $short, $long);
$stmt->execute();