将两个数组以一种形式转换为mysql和php


two arrays in one form to mysql with php

我有一个带有两个字段集的表单,其中包含复选框:

<fieldset style="width:300px; height:200px; overflow:scroll;">
    <input type="checkbox" name="table[]" id="01" value='ado'> Adoption <br />
    <input type="checkbox" name="table[]" id="02" value='acc'> Accomodations <br />
    <input type="checkbox" name="table[]" id="03" value='ann'> Announcements <br />
    <input type="checkbox" name="table[]" id="04" value="bea"> Beauty/Fitness <br />
    <input type="checkbox" name="table[]" id="05" value="bus"> Business Oportunities    
</fieldset>

还有这个

<fieldset style="width:300px; height:200px; overflow:scroll;">
    <input type="checkbox" name="State[]" id="01" value='AL'> Alabama <br />
    <input type="checkbox" name="State[]" id="02" value='AK'> Alaska<br />
    <input type="checkbox" name="State[]" id="03" value='AZ'> Arizona<br />
    <input type="checkbox" name="State[]" id="04" value='AR'> Arkansas <br />
    <input type="checkbox" name="State[]" id="05" value='CA'> California <br />
</fieldset>

我用这个代码进入他们各自的表格

$table = $_POST['table'];  
$name = $_POST['name'];
$state = $_POST['State'];
if(is_array($table)){
  while(list($tables) = each($table)){
    $sql2 = "INSERT INTO tableName (name,table) VALUES ('$name','$tables')";
    $q2 = mysqli_query($db_conx,$sql2);
    }
}           
if(is_array($state)){
  while(list($key,$value) = each($state)){
   $sql3 = "INSERT INTO states (name,State) VALUES ('$name','$value')";
   $q3 = mysqli_query($db_conx,$sql3);
     }
}

当它被执行时,唯一输入的数据是状态我使用

echo "table; ".$table."<br /> State; ".$state;

得到

table; Array
State; Array012ALAKAZ

有人帮帮我!

您很容易受到sql注入攻击。

并且您的table查询使用了一个保留字,所以整个插入查询都失败了。由于您没有检查失败,只是假设成功,因此您永远不会看到任何错误消息。

在处理外部资源(尤其是数据库)时,永远不要想当然地认为成功。查询成功的途径只有一种,失败的途径几乎是无限的。然而,你似乎认为1:无穷大的几率真的很好。

$sql2 = "INSERT INTO tableName (name,`table`) VALUES ('$name','$tables')";
                                     ^-----^---you need these
$q2 = mysqli_query($db_conx,$sql2) or die(mysqli_error($db_conx));
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---you also need this

这里有一个只进行2个查询而不是20个左右查询的解决方案:

$tables = $_POST['table'];  
$name = $_POST['name'];
$states = $_POST['State'];
$states_values = '';
$tables_values = '';
$i = 0;
foreach($states as $state)
{
    $i++;
    $last = $i == count($states) ? true : false;
    $states_values .= '(' . $name . ', ' . $state . ')' . ($last ? '' : ',');
}
$i = 0;
foreach($tables as $table)
{
    $i++;
    $last = $i == count($tables) ? true : false;
    $tables_values .= '(' . $name . ', ' . $table . ')' . ($last ? '' : ',');
}
mysqli_query($db_conx, 'INSERT INTO states (name, State) VALUES ' . $states_values;
mysqli_query($db_conx, 'INSERT INTO tableName (name, table) VALUES ' . $tables_values;

正如马克所说,你应该逃避你的投入。