जैसा कि अन्य ने कहा है, इस बात की संभावना बनी रहती है कि कोई दुर्भावनापूर्ण उपयोगकर्ता DOM में फ़ील्ड के नाम संपादित कर सकता है, लेकिन कहा कि निम्नलिखित में रुचि हो सकती है।
$sql='insert into `claims_motor` (`'.implode( '`,`', array_keys( $_POST ) ) .'`) values (:'.implode(',:',array_keys( $_POST ) ).');';
foreach( $_POST as $field => $value ) $params[":{$field}"]=$value;
$statement = $pdo->prepare( $sql );
$statement->execute( $params );
इनपुट डेटा से नकली html को हटाने के बारे में आपके प्रश्न के उत्तर में, आप निम्न की तर्ज पर कुछ कोशिश कर सकते हैं:
$options=array( 'flags'=>FILTER_FLAG_NO_ENCODE_QUOTES | FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_ENCODE_LOW | FILTER_FLAG_ENCODE_HIGH | FILTER_FLAG_ENCODE_AMP );
function filterfield( $field ){
global $options;
return ":".strip_tags( filter_var( $field, FILTER_SANITIZE_STRING, $options ) );
}
function filtervalue( $field ){
global $options;
return strip_tags( filter_input( INPUT_POST, $field, FILTER_SANITIZE_STRING, $options ) );
}
function isfield( &$field, $key, $fields ){
$field=in_array( $field, $fields ) ? $field : false;
}
$sql='insert into `claims_motor` (`'.implode( '`,`', array_keys( $_POST ) ) .'`) values (:'.implode(',:',array_keys( $_POST ) ).');';
foreach( $_POST as $field => $value ) $params[ filterfield( $field ) ]=filtervalue( $field );
मैं यह सुझाव नहीं दे रहा हूं कि यह एक सही समाधान है लेकिन यह कमोबेश आपके मूल प्रश्न का उत्तर देता है। आप यहां फ़िल्टर के बारे में अधिक जानकारी प्राप्त कर सकते हैं
मैंने पीडीओ का उपयोग करके एक शामिल DROP
. के साथ यह कोशिश की मूल्य में बयान और वह ठीक था - स्ट्रिंग डेटा के रूप में डाला गया था। जब मैंने किसी फ़ील्ड नाम को संशोधित करने का प्रयास किया तो यह PDOException
. का कारण बनता है और कुछ नहीं किया....
आपके सुझाव के अनुसार कॉलम नाम प्राप्त करने के लिए आप निम्न प्रयास कर सकते हैं:-
$sql="select group_concat(`column_name`) as 'cols'
from `information_schema`.`columns`
where `table_schema`=database() and `table_name`=:table;";
$params=array(':table' => 'claims_motor');
$statement = $pdo->prepare( $sql );
$statement->execute( $params );
/* Process the recordset */
$cols=$rs->cols; /* or whatever method to access the record */
/* Filter fields that were not in form - if any */
$cols=explode( ',', $cols );
array_walk( $cols, 'isfield', array_keys( $_POST ) );
$fields = array_filter( $cols );
/* Prepare sql for the insert statment */
$sql_insert='insert into `claims_motor` (`'.implode( '`,`', $fields ) .'`) values (:'.implode( ',:', $fields ).');';
/* reset params array */
$params=array();
/* Construct new array of bound variables / params */
foreach( $_POST as $field => $value ) $params[ filterfield( $field ) ]=filtervalue( $field );
/* add the data to db */
$statement = $pdo->prepare( $sql );
$statement->execute( $params );