0

I have an array passed through Ajax POST here:

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 protected]&sec_question_uuid=1a78e916f8a2affa1d1de00be7e41f91&sec_answer=a&civil_status=32899cec496b4b25c43c8c4444f24403-married&gender=male&command=signup 
)

This is the ajax that's sending it to a php file:

$.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);
        }
      });

My problem is, I can't seem to make the loop I made work to insert them to the database:

$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++;
}

What am I missing here?

SOLVED:

Thank you guys for your keen eyes. I was able to echo the right data now:

    $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++;
}

Please disregard the commented query above. Rest assured that I will follow your suggestion regarding my code being vulnerable to SQL injection. One example of my working query below(is it safe now from SQL injections?):

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.'" )');
6
  • What happens currently? Your insert is commented out, also looks like it'd generate invalid and insecure SQL. Commented Aug 16, 2016 at 21:09
  • You should switch from mysql_* as it has been officially deprecated. Use mysqli_* or PDO with prepared statements. Commented Aug 16, 2016 at 21:11
  • 4
    $_POST['[name_dependents]'] should be $_POST['name_dependents'] Commented Aug 16, 2016 at 21:11
  • I'm trying to echo it first to make sure that I'm getting the data right. But it's not showing anything. I just get to see the data when i do print_r($_POST); Commented Aug 16, 2016 at 21:11
  • Well after fixing the array accessing you're going to need to quote those SQL strings. That also is going to open you to SQL injections. (I also don't see those variables assigned anywhere) Commented Aug 16, 2016 at 21:12

2 Answers 2

5

I think the issue in this line

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

You have an extra []. Try this

foreach($_POST['name_dependents'] as $name_dependent){
Sign up to request clarification or add additional context in comments.

Comments

1

You can easily achieve with replace your

    $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++;
}

to

$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++;
}

After that you can check it :)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.