我的网站中有不同的表单,我想将数据保存在不同的数据库表中。我的表单使用ajax发送要插入数据库的所有值。
var myData = {event_type: 'bike', user_id: mUserId, country: mCountry, city: mCity, state: mState, addressMap: mAddressMap, location: mLocation, zip: mZip,lat : latPos, lng: lngPos , distance : mDistance, unitDistance: mUnitDistance, rideType : mType, pace: mPace, event_type: eventType }; //post variables
$.ajax({
type: "POST",
url: "/processNewRide.php",
data: myData,
success:function(data){
replaceWin.html(data); //replace info window with new html
Marker.setDraggable(false); //set marker to fixed
Marker.setIcon('pin_blue.png'); //replace icon
$('.addEventPop').fadeOut('slow');
$('#mask').fadeOut('slow');
infowindow.open(map,Marker); // show the marker
},
error:function (xhr, ajaxOptions, thrownError){
alert(thrownError); //throw any errors
}
});
由于processNewRide.php
必须处理未知数量的值和不同的列名,我设法使用以下方法将它们插入到数据库中:
$key_value_array = $_POST;
$eventType = filter_var($_POST["event_type"], FILTER_SANITIZE_STRING);
$table = $eventType;
$sql = 'INSERT INTO ' . $table . ' ';
$columns = '(';
$values = '(';
foreach ($key_value_array as $k => $v) {
$columns .= '`' . $k . '`, ';
$values .= "'" . $v . "', ";
}
$columns = rtrim($columns, ', ') . ')';
$values = rtrim($values, ', ') . ')';
$sql .= $columns . ' VALUES ' . $values;
$q = $mysqli->prepare($sql);
$q->execute();
这只有在我传递了确切数量的值并且数组中的键等于我的列名时才有效。问题是我想在通用表调用country, city, state, city, addressMap, location, zip, lat, lng
中添加一些值(即Event
)(所有不同形式都通用),而另一些表中更具体(即{{1} }})。既然我知道要将哪些参数插入到Event中,是否可以从数组distance, rideType, ridePace
中删除这些值?
更新:
根据建议,我必须使用$key_value_array
所以我解决了这个问题:
unset()