Атрибуты скрытых полей не добавляются в таблицу mysqli из файла PHP - PullRequest
0 голосов
/ 13 октября 2018

Мне необходимо отправить данные из атрибутов скрытых полей в файле HTML в таблицу SQL mysqli mariadb.По какой-то причине данные не отправляются в таблицу.Вот код PHP-файла, который должен отправлять данные в таблицу:

require_once ("settings.php");
    $conn = @mysqli_connect($host,
    $user,
    $pwd,
    $sql_db
);

if (!$conn){
    echo $errMsg = $errMsg. "<p>Database connection failure</p>";
} 
    $sql_table="orders";
    $fname = trim($_POST["fname"]);
    $lname = trim($_POST["lname"]);
    $email = trim($_POST["email"]);
    $address = trim($_POST["address"]);
    $suburb = trim($_POST["suburb"]);
    $state = trim($_POST["state"]);
    $postcode = trim($_POST["postcode"]);
    $mobile = trim($_POST["mobile"]);
    $prefContact = trim($_POST["contact"]);
    $plan = trim($_POST["plan"]);
    $option = trim($_POST["option"]);
    $months = trim($_POST["months"]);
    $install = trim($_POST["install"]);
    $creditName = trim($_POST["creditName"]);
    $creditNumber = trim($_POST["creditNumber"]);
    $creditExpiry = trim($_POST["creditExpiry"]);
    $CVV = trim($_POST["CVV"]);

    $query = "INSERT INTO `orders`(`first_name`, `last_name`) VALUES ('testName2', $lname)";
    $result = mysqli_query($conn, $query);
    if(!'result'){
        echo "<p class=\"wrong\">Something is wrong with ", $query, "</p>";
    } else {
        echo "<p class=\"ok\">Succesfully added a new order to records</p>";
        //header('Location: receipt.php');
    }
mysqli_close($conn);

Я ввожу следующие значения: 1) тестовая строка, чтобы проверить, правильно ли я получаю переменныеи 2) попытка вставить другую переменную.

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

В исходном коде было несколько ошибок (выделено в комментариях), и он не был действительно хорошим способом для действий при манипулировании содержимым базы данных с использованием 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

0 голосов
/ 13 октября 2018

Используйте вот так ...

$query = "INSERT INTO заказы SET имя_символа ='".$testName2."', фамилия_символа ='".$lname."'"; $result = mysqli_query($conn, $query);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...