php: объединить str var и str literal в качестве ключа для значения POST

#php #concatenation

#php #конкатенация

Вопрос:

Возникли проблемы с этим. Я хочу ссылаться на суперглобальный post, используя ключ, который генерируется путем конкатенации строкового литерала и строковой переменной.

 $guests = array();
$guest_data = $this->compile_guests_for_hcp('g1');
array_push($guests, $guest_data($hcp_id));

function compile_guests_for_hcp($guest_identfier){
    return function($hcp_id) use ($guest_identfier){
        $guest = array(
            'fname' => $_POST["fname_$guest_identifier"],
            'lname' => $_POST["lname_$guest_identifier"],
            'city' => $_POST["city_$guest_identifier"],
            'state' => $_POST["state_$guest_identifier"],
            'degree' => $_POST["degree_$guest_identifier"],
            'zip' => $_POST["zip_$guest_identifier"],
            'specialty' => $_POST["specialty_$guest_identifier"],
            'email' => $_POST["email_$guest_identifier"],
            'phone' => $_POST["pref_phone_$guest_identifier"],
            'job_title' => $_POST["job_title_$guest_identifier"],
            'office_addr_line_1' => $_POST["office_addr_line_1_$guest_identifier"],
            'office_addr_line_2' => $_POST["office_addr_line_2_$guest_identifier"],
            'hcp_data_idhcp_data' => $hcp_id
        );
        return $guest;
    };
}
 

PHP выдает ошибки неопределенной переменной, поскольку он пытается ссылаться, например $_POST["fname_"] , и $_POST["guest_identifier"]

Я пытаюсь получить доступ к $_POST[«fname_g1»] и т.д.

Ответ №1:

Во-вторых, проверить, установлена ли переменная с помощью isset() , прежде чем пытаться получить доступ к ее значению. Вы даже можете быть более прямолинейными в своем синтаксисе и записать конкатенацию строк в:

 $var = isset( $_POST[ 'fname_' . $guest_identifier]) ? 
           $_POST[ 'fname_' . $guest_identifier] : 'default_value'
 

В вашем сообщении звучит так, будто PHP пытается получить доступ к двум отдельным переменным $_POST["fname_"] и $_POST[«$guest_identifier»], чего не должно быть, особенно с приведенным выше синтаксисом.

Ответ №2:

Просто используйте оператор, подобный: $_POST["fname_".$guest_identifier]

Ответ №3:

Я думаю, что ваш подход немного слишком сложен, но ваша проблема не в конкатенации индексов массива: в вашем коде нет синтаксических ошибок, как вы его представили.

Например, это работает как шарм:

 $a = array("foo"=>1); 
$o = "o"; 
print $a["fo$o"]; // prints 1
 

Ваша проблема в том, что $guest_identifier значение задается неправильно, поэтому вы ищете индексы POST, которых просто нет.

Есть несколько разных способов обойти это. Моим первым предложением было бы просто проверить, что идентификатор существует для начала, прежде чем вызывать эту функцию. Если это не вариант, то я бы, вероятно, создал помощника:

 function ifInPost($val, $default = NULL){
    if( isset( $_POST[ $val ] ) ) return $_POST[ $val ];
    return $default;
}
 

Затем вы можете просто заменить $_POST["fname_$guest_identifier"] на ifInPost("fname_$guest_identifier")

Комментарии:

1. Я вижу при отладке, прямо перед возвращением массива $guest, что $guest_identifier и $ hcp_id установлены правильно. Кроме того, я вижу, что все значения POST, на которые я пытаюсь ссылаться, установлены., но все, что содержит массив $ guest, — это последняя запись ‘hcp_data_idhcp_data’ => 100

2. Что произойдет, если вы распечатаете $guest_identifier строку сразу после return function($hcp_id) use ($guest_identfier){ ?

Ответ №4:

ПОНЯЛ! (Фейспалм)

Простая орфографическая ошибка в моем аргументе, поэтому он не был передан. У меня был identfier. Отсутствует i. Я должен уделять больше внимания проверке орфографии в браузере при публикации кода, хахаха!

 function compile_guests_for_hcp($guest_identfier){
return function($hcp_id) use ($guest_identfier){
 

Ответ №5:

Это поможет вам выполнить динамическую вставку n количества продуктов.

 $loopLength=$_POST['ProudctSize'];

for ($i=1; $i <=$loopLength; $i  ) 
{
    $productid=$_POST['P'.$i];
    $quatity=$_POST['Q'.$i];
    $rate=$_POST['R'.$i];

   $Insert=mysql_query("INSERT INTO saledisplay ( `saleid`, `productid`, `quantity`, `rate`) 
                    VALUES('$oid','$productid','$quatity','$rate')");
}
 

Ответ №6:

Замените все вызовы на $_POST[... с @$_POST[... , чтобы устранить ошибки.

Или проверьте значение, прежде чем использовать его подобным isset($_POST[...]) ? $_POST[...] образом…

Или подавить предупреждения PHP, вызвав error_reporting(E_ALL ^ E_NOTICE)

Комментарии:

1. Моя проблема в том, что я хочу получить доступ к $ _POST[«fname_g1»], объединив часть «fname_» с (str) $guest_identifier, который равен «g1»