【问题标题】:Right Way to Save Array to MySQL From Ajax POST从 Ajax POST 将数组保存到 MySQL 的正确方法
【发布时间】:2016-12-23 09:30:39
【问题描述】:

我在这里有一个通过 Ajax POST 传递的数组:

Array ( 
[name_dependents] => 
    Array ( 
        [0] => asd 
        [1] => hfg 
    ) 
[age_dependents] => 
    Array ( 
        [0] => 6 
        [1] => 6 
    ) 
[dob_dependents] => 
    Array ( 
    [0] => 2010-07-25 
    [1] => 2010-07-02 
) 
[dataString] => firstname=a&lastname=a&username=a&mobile_number=09176229999&password=blah&birth_month=01&birth_day=1&birth_year=1937&email=a@gmail.com&sec_question_uuid=1a78e916f8a2affa1d1de00be7e41f91&sec_answer=a&civil_status=32899cec496b4b25c43c8c4444f24403-married&gender=male&command=signup 
)

这是将其发送到 php 文件的 ajax:

$.ajax({
        type: 'POST',
        url: 'functions.php',
        data: {name_dependents:name_dependent_array, age_dependents:age_dependent_array, dob_dependents:dob_dependent_array, dataString:dataString},
        success: function() {
            $("#message").html('success');
            window.setTimeout(function() {
                $(".alert").fadeTo(1500, 0).slideUp(500, function(){
                    $(this).remove(); 
                });
            }, 5000);
        }
      });

我的问题是,我似乎无法使我制作的循环将它们插入数据库:

$i = 0;
foreach($_POST['name_dependents]'] as $name_dependent){
    echo $name_dependent = $name_dependent."<br />";
    echo $age_dependent = $_POST['age_dependent'][$i]."<br />";
    echo $dob_dependent = $_POST['dob_dependent'][$i]."<br />--";
    //$AddQuery ="INSERT INTO db (name,training,amount)VALUES ($name,$training,$amount)";
    //mysql_query($AddQuery, $con);
    $i++;
}

我在这里错过了什么?

已解决:

感谢你们敏锐的目光。我现在能够回显正确的数据:

    $i = 0;
foreach($_POST['name_dependents'] as $name_dependent){
    echo $name_dependent = $name_dependent."<br />";
    echo $age_dependent = $_POST['age_dependents'][$i]."<br />";
    echo $dob_dependent = $_POST['dob_dependents'][$i]."<br />--";
    $i++;
}

请忽略上面的评论查询。请放心,我会听从您关于我的代码易受 SQL 注入攻击的建议。下面是我的工作查询的一个示例(现在从 SQL 注入中安全吗?):

mysqli_query($conn, 'INSERT INTO pmp_user (uuid, first_name, last_name, address, email, gender, password, date_registered) VALUES ( "'.md5(uniqid()).'", "'.$firstname.'", "'.$lastname.'", "'.$address.'", "'.$email.'", "'.$gender.'", "'.$password.'", "'.$date.'" )');

【问题讨论】:

  • 目前发生了什么?您的插入已被注释掉,看起来它还会生成无效且不安全的 SQL。
  • 应该mysql_* 切换,因为它已被 officially 弃用。使用mysqli_*PDO prepared statements
  • $_POST['[name_dependents]'] 应该是$_POST['name_dependents']
  • 我试图先回应它,以确保我得到的数据是正确的。但它没有显示任何东西。我只是在做print_r($_POST); 时看到数据
  • 在修复数组访问之后,您将需要引用那些 SQL 字符串。这也会让你接触到 SQL 注入。 (我也没有看到分配到任何地方的那些变量)

标签: php jquery mysql ajax foreach


【解决方案1】:

我认为这行的问题

foreach($_POST['[name_dependents]'] as $name_dependent){

你有一个额外的[]。试试这个

foreach($_POST['name_dependents'] as $name_dependent){

【讨论】:

    【解决方案2】:

    您可以轻松实现替换您的

        $i = 0;
    foreach($_POST['[name_dependents]'] as $name_dependent){
        echo $name_dependent = $name_dependent."<br />";
        echo $age_dependent = $_POST['age_dependent'][$i]."<br />";
        echo $dob_dependent = $_POST['dob_dependent'][$i]."<br />--";
        //$AddQuery ="INSERT INTO db (name,training,amount)VALUES ($name,$training,$amount)";
        //mysql_query($AddQuery, $con);
        $i++;
    }
    

    $i = 0;
    foreach($_POST['name_dependents'] as $name_dependent){
        echo $name_dependent = $name_dependent;
        echo "<br />".$age_dependent = $_POST['age_dependent'][$i];
        echo "<br />".$dob_dependent = $_POST['dob_dependent'][$i];
        echo ."<br />--";
        //$AddQuery ="INSERT INTO db (name,training,amount)VALUES ('$name','$training','$amount')";
        //mysql_query($con, $AddQuery);
        $i++;
    }
    

    之后你可以检查它:)

    【讨论】:

      猜你喜欢
      • 2015-12-05
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 2012-01-30
      相关资源
      最近更新 更多