php: объединяет str var и str литерал в качестве ключа для значения POST - PullRequest
0 голосов
/ 02 ноября 2011

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

$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"] и т. д.

Ответы [ 6 ]

2 голосов
/ 02 ноября 2011

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

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

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

0 голосов
/ 03 октября 2016

Это поможет вам сделать динамическую вставку 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')");
}
0 голосов
/ 02 ноября 2011

ПОЛУЧИЛ ЭТО!(Facepalm)

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

function compile_guests_for_hcp($guest_identfier){
return function($hcp_id) use ($guest_identfier){
0 голосов
/ 02 ноября 2011

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

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

$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")

0 голосов
/ 02 ноября 2011

Просто используйте оператор как: $_POST["fname_".$guest_identifier]

0 голосов
/ 02 ноября 2011

Замените все вызовы на $_POST[... на @$_POST[... для подавления ошибок.

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

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

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