В исходном коде было несколько ошибок (выделено в комментариях), и он не был действительно хорошим способом для действий при манипулировании содержимым базы данных с использованием user supplied input
- Подробнее о внедрении SQL см. Здесь
Хотя я не могу сказать, что то, что следует, является окончательным методом, который следует использовать (далеко не так), он должен дать вам хорошее представление о том, как вы могли бы действовать, и в целом сделать ваш код более надежным и безопасным.
<?php
try{
/*
An array of expected fields in the POST array
with the appropriate filter type ~ see the
manual for more detail
http://php.net/manual/en/filter.filters.sanitize.php
http://php.net/manual/en/function.filter-input.php
http://php.net/manual/en/function.filter-input-array.php
*/
$args=array(
'fname' => FILTER_SANITIZE_STRING,
'lname' => FILTER_SANITIZE_STRING,
'email' => FILTER_SANITIZE_EMAIL,
'address' => FILTER_SANITIZE_STRING,
'suburb' => FILTER_SANITIZE_STRING,
'state' => FILTER_SANITIZE_STRING,
'postcode' => FILTER_SANITIZE_STRING,
'mobile' => FILTER_SANITIZE_STRING,
'contact' => FILTER_SANITIZE_STRING,
'plan' => FILTER_SANITIZE_STRING,
'option' => FILTER_SANITIZE_STRING,
'months' => FILTER_SANITIZE_STRING,
'install' => FILTER_SANITIZE_STRING,
'creditName' => FILTER_SANITIZE_STRING,
'creditNumber' => FILTER_SANITIZE_STRING,
'creditExpiry' => FILTER_SANITIZE_STRING,
'CVV' => FILTER_SANITIZE_STRING
);
/*
Permit only those form fields that appear in the
above array - unknown fields will cause an
exception
*/
foreach( $_POST as $param => $value ){
if( !in_array( $param, array_keys( $args ) ) ) throw new Exception( sprintf( 'Invalid/unknown parameter: %s ', $param ) );
}
/*
Filter the form data according to rules above
*/
filter_input_array( INPUT_POST, $args );
/*
remove empty fields from the POST array
*/
$_POST = array_filter( $_POST );
/*
Extract the params/values to variables
ie: will produce variables of same name as field
*/
extract( $_POST );
require_once( "settings.php" );
$conn = new mysqli($host,$user,$pwd,$sql_db);
/*
if these two fields were populated in the POST data
they should be available here as variables of the
same name
*/
if( $fname && $lname ){
$sql = "insert into `orders` ( `first_name`, `last_name` ) values (?,?);";
$stmt= $conn->prepare( $sql );
if( !$stmt ) throw new Exception('Failed to prepare sql query');
$stmt->bind_param('ss', $fname, $lname );
$result = $stmt->execute();
$stmt->close();
$conn->close();
$message = $result ? '<p class="ok">Succesfully added a new order to records</p>' : sprintf('<p class="wrong">Something is wrong with %s</p>', $sql );
/*
redirect? display $message?
*/
} else {
throw new Exception('Bad Foo!');
}
}catch( Exception $e ){
exit( $e->getMessage() );
}
?>
Ссылки с сайта PHP