Как POST формировать данные из динамически создаваемых входов? - PullRequest
1 голос
/ 01 апреля 2019

Я генерирую несколько динамических входов с foreach.Каждый вход получает свои name и id от циклического перебора массива из текстового файла.

Затем данные формы отправляются на другую страницу PHP для выполнения некоторых запросов к базе данных с помощью POST.

Проблема, с которой я сталкиваюсь, заключается в том, что каждое входное значение возвращает NULL.

Iне знаю, что происходит, потому что когда я смотрю в веб-консоли на вкладке Сеть, я вижу, что параметры собираются.

array.txt

first_name
last_name
occupation
company_name
industry
city
country
countryCode
phone
email
address
stateProvince
postalZipeCode

form.php

//get array of names and ids for inputs
$array = explode("\n", file_get_contents('array.txt'));


//loop through the array
echo '<form method="POST" action="insert.php">';
foreach($array as $input) {
    echo '<label>'.$input.'</label>'
       . '<input type="text" id="'.$input.'" name="'.$input.'" required="required" class="form-control" placeholder="'.$input.'">';  
    echo '<br>';
}
echo '<input type="submit" value="Submit">';
echo '</form>';

Сетевая вкладка (веб-консоль)

enter image description here

insert.php

if (!empty($_POST)) {

    //get variables
    if (isset($_POST['first_name'])) {
        $first_name= $_POST['first_name']; //1.
    }

    if (isset($_POST['last_name'])){
        $last_name=$_POST['last_name']; //2.
    }

    if (isset($_POST['occupation'])) {
        $occupation=$_POST['occupation']; //3.
    }

    if (isset($_POST['company_name'])) {
        $company_name=$_POST['company_name']; //4 
    }

    if (isset($_POST['industry'])){
        $industry = $_POST['industry']; //5
    }

    if (isset($_POST['city'])) {
        $city = $_POST['city']; //6
    }

    if(isset($_POST['country'])){
        $country=$_POST['country']; //7
    }

    if (isset($_POST['countryCode'])) {
        $countryCode = $_POST['countryCode']; //8
    }

    if (isset($_POST['phone'])) {
        $phone = $_POST['phone']; //9
    }

    if (isset($_POST['email'])) {
        $email = $_POST['email']; //10
    }

    if (isset($_POST['address'])) {
        $address = $_POST['address']; //11
    }

    if (isset($_POST['stateProvince'])) {
        $stateProvince = $_POST['stateProvince']; //12
    }

    if (isset($_POST['postalZipeCode'])) {
        $postalZipeCode = $_POST['postalZipeCode']; //13
    }

    // insert into table 
    $insertProspectQuery = $conn->prepare("INSERT INTO users (first_name, last_name, occupation, company,industry,city,country,countryCode,phone,email,address,stateProvince,postalZipeCode) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)");
    $insertProspectQuery->bind_param('sssssssssssss',$first_name,$last_name,$occupation,$company_name,$industry,$city,$country,$countryCode,$phone,$email,$address,$stateProvince,$postalZipeCode);        
    $insertProspectQuery->execute();
    $insertProspectQuery->close();
    $ok = 1;

    } else {
        //handle error
    }

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Проблема в том, что $input в вашем цикле foreach содержит пробел, который он, вероятно, получил из файла array.txt.

Чтобы избежать проблем в будущем, вам нужно просто обрезать $input:

foreach($array as $input) {
    $input = trim($input);

    // Proceed as normal
}

Вы можете попытаться исправить данные в array.txt, но если ошибка появится в будущем, ваше приложение перестанет работать, поэтому лучше всего применить trim() к элементу, полученному из вашего файла.

1 голос
/ 01 апреля 2019

Выводя переменные с помощью var_dump в соответствии с предложением MonkeyZeus, я обнаружил, что проблема создавалась с пустым пробелом в конце каждой переменной имени.

Это краткое резюме var_dump: array(19) { ["first_name "]=> string(6) "John" ["last_name "]=> string(8) "Doe"[.......].

Я не знаю, что создает пробел в именных переменных, возможно, тот факт, что переменные создаются из текстового файла, а текстовый файл добавляет пробел в конце каждой строки.

Так как это должно быть ["first_name"], а НЕ ["first_name"], $_POST не смог распознать переменные, размещенные в insert.php.

Это никогда не будетзапустите в этом неправильном сценарии использования:

if(isset($_POST["first_name"])){
$first_name = $_POST["first_name"];
}

Поскольку ["first_name"] != ["first_name "]

Я решил проблему, обрезав переменную names перед использованием их в foreach.

Быстрое решениеотделка:

form.php

//get array of names and ids for inputs
$array = explode("\n", file_get_contents('array.txt'));

//trim post variables
$trimmed_array=array_map('trim',$array);

//loop through the array

    echo '<form method="POST" action="insert.php">';
    foreach($trimmed_array as $input) {//pass the trimmed version of name variables
        echo '<label>'.$input.'</label>'
           . '<input type="text" id="'.$input.'" name="'.$input.'" required="required" class="form-control" placeholder="'.$input.'">';  
        echo '<br>';
    }
    echo '<input type="submit" value="Submit">';
    echo '</form>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...