Reputation: 135
I want to save an array passed from Ajax to PHP to different columns of the table.
Here are the arrays that Ajax sends to PHP:
I get this on the browser network header after clicking the save button.
Form Data:
tableArray[0][]:awdawd
tableArray[0][]:awdawd
tableArray[0][]:Male
tableArray[0][]:<button class='delete'>Delete</button>
tableArray[1][]:awdaw
tableArray[1][]:awdwa
tableArray[1][]:Female
tableArray[1][]:<button class='delete'>Delete</button>
My problem is after clicking the save button it only saves the name part of the array to the table:
script:
$("#saveTable").click(function(){
$.ajax(
{
url: "saveTable.php",
type: "POST",
data: { tableArray: dataSet},
success: function (result) {
}
});
});
saveTable.php
<?php
error_reporting(-1);
ini_set('display_errors', 'On');
$host = "localhost";
$user = "root";
$pass = "";
$db = "test";
$dbc = new PDO("mysql:host=" . $host . ";dbname=" . $db, $user, $pass);
$dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$tableArray = $_REQUEST['tableArray'];
foreach( $tableArray As $v){
$sql = "INSERT INTO viewTables (name, age, gender, action) VALUES ('$v[0]','$[1]','$[2]','$[3]')";
$query = $dbc->prepare($sql);
$query->execute();
}
?>
Upvotes: 0
Views: 1154
Reputation: 71422
@Sadiq pointed out the problem, which is simply a typo. Let me suggest however that you actually use prepared statements in a better manner, by only preparing the statement once and using parameters to prevent against SQL injection.
$sql = "INSERT INTO viewTables (name, age, gender, action) VALUES (:name, :age, :gender, :action)";
try {
$sth = $dbc->prepare($sql);
foreach( $tableArray As $v){
// bind parameter values
$sth->bindValue(':name', $v[0], PDO::PARAM_STR);
$sth->bindValue(':age', $v[1], PDO::PARAM_STR);
$sth->bindValue(':gender', $v[2], PDO::PARAM_STR);
$sth->bindValue(':action', $v[3], PDO::PARAM_STR);
$sth->execute();
}
} catch (PDOException $e) {
// something went wrong
// log an error or whatever
}
Upvotes: 1
Reputation: 2289
$sql = "INSERT INTO viewTables (name, age, gender, action) VALUES ('$v[0]','$[1]','$[2]','$[3]')";
should be
$sql = "INSERT INTO viewTables (name, age, gender, action) VALUES ('$v[0]','$v[1]','$v[2]','$v[3]')"; // Added array name for the last three values
Upvotes: 1