PHP MySQL插入$ _REQUEST

时间:2017-12-07 15:02:51

标签: php mysql http-post

我试图将这个$ _REQUEST数据插入我的MySQL数据库。代码如下所示:

<Window
    x:Class="SortingAList.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:SortingAList"
    mc:Ignorable="d"
    Title="MainWindow"
    Height="350"
    Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <TextBox
            Text="{Binding NewJobType, Delay=1000}"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Width="200" />
        <ComboBox
            Grid.Row="1"
            ItemsSource="{Binding JobTypes}"
            SelectedItem="{Binding SelectedJobType}"
            DisplayMemberPath="Name"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Width="200" />
    </Grid>
</Window>

MySQL成功插入我的啤酒&#39;表,但也创建2个空记录。有没有理由发生这种情况?

2 个答案:

答案 0 :(得分:1)

因为$ _REQUEST是包含$ _GET,$ _POST和$ _COOKIE的关联数组,所以它们中的一些可能是空的,但无论如何都存在键。这就是为什么你要获得三条记录的原因。
我会添加条件if ($value!='') { ...insert... },但显然您仍然容易受到$ _GET包含的内容的影响,以防用户在网址中添加任何内容。

答案 1 :(得分:-1)

给它一个运行。您仍然容易受到可能的SQL注入攻击,但至少您会修剪您的值并且只尝试编写实际包含某些内容的值,再加上addslashes()您将帮助确保任何字符可能会破坏SQL被转义。

foreach ($_REQUEST as $key => $value) {

    if(trim($key) == 'beer') {
        if($beerid = trim($value)) {
            $sql = sprintf('INSERT INTO beer (b_beer) VALUES ("%s")',addslashes($beerid));

            if(mysqli_query($connection, $sql)){
                echo "Records added successfully.";
            } else {
                printf("ERROR: Could not able to execute %s -- %s\n",$sql,mysqli_error($connection));
            }
        }
    }
}

OR

由于您只处理一个请求,并且您知道该字段的名称为&#39; beer&#39;你可以这样:

if(isset($_REQUEST['beer']) {

   if($beerid = trim($_REQUEST['beer'])) {
        $sql = sprintf('INSERT INTO beer (b_beer) VALUES ("%s")',addslashes($beerid));

        if(mysqli_query($connection, $sql)){
            echo "Records added successfully.";
        } else {
            printf("ERROR: Could not able to execute %s -- %s\n",$sql,mysqli_error($connection));
        }
    }
}