Создание управляемой данными многоуровневой инструкции if в PHP с использованием if & elseif - PullRequest
1 голос
/ 11 декабря 2011

Это довольно сложная проблема, поэтому я сделаю все возможное, чтобы правильно ее объяснить.

Я разрабатываю шаблон электронной почты в формате HTML, который будет загружен в веб-приложение на основе flex, но я попытаюсь использовать общие переменные в моем примере.

Issue: У меня есть вариант изображения, где пользователь может выбрать из библиотеки изображений для своего шаблона. Когда пользователь выбирает изображение, есть 3 атрибута, которые будут загружаться в зависимости от выбранного изображения, мы будем называть их X, Y, Z. Доступно только шесть изображений, и у меня есть все их URL-адреса, как таковые:

$image_1 = '.../image1.jpg';
$image_2 = '.../image2.jpg';
$image_3 = '.../image3.jpg';

и т. Д. Со всеми жестко закодированными URL-адресами, представленными определенной переменной.

Мой код выглядит примерно так:

// Здесь изображение будет напечатано после выбора и отображения страницы.

<img src="<?=$fields['mainImage']?>" /> //Pre-selection, and post image selection that <?=$fields['mainImage']?> will be the URL.

// Здесь я пытаюсь добавить немного логики прямо под тем местом, где загружается изображение. Этот оператор if фактически вызовет переменную для сканирования определенного массива данных и печати определенных данных, которые соответствуют выбранному изображению (X, Y, Z, как указано выше). Но чтобы не только упростить его и проверить функциональность исходной логики, я просто повторю три отдельных утверждения в этом примере.

<?
$fields['mainImage'] = $mainImage;

if ($mainImage = $image_1){

echo 'The first one works';

}
elseif ($mainImage = $image_2){

echo 'Yay the second data string loads!';

}
else 

echo 'O fart';

?>

Результат: В приведенном выше примере, выбирает ли пользователь 1-е изображение или 3-е изображение, которое он загружает, «первое работает» так, как будто он не может обработать какую-либо информацию, кроме моей первоначальной инструкции if. Возможно, есть синтаксическая ошибка, о которой я не знаю? Или может быть ошибка в моей логике? Это довольно простой пример стандартного оператора if, но я довольно озадачен тем, почему он работает не так, как должен, и хотел бы получить совет или отзыв.

Ответы [ 2 ]

3 голосов
/ 11 декабря 2011
1 голос
/ 11 декабря 2011

Вы используете оператор присваивания (=), когда вы действительно хотите использовать оператор сравнения, ==.

Оператор присваивания присваивает значение операнда в правой части аргумента переменной в левой части. Например, вы делаете это:

if ($mainImage = $image_1){ // do stuff }

Это скопирует содержимое $ image_1 в $ mainImage. Затем $ mainImage оценивается на истинность - при условии, что задано подходящее значение (ненулевое целое число, непустая строка или логическое значение TRUE), будет введен первый блок. Это эквивалентно написанию if ($image_1).

То, что вы на самом деле хотите, это:

if ($mainImage == $image_1){ // do stuff }

Это позволит правильно проверить равенство $ mainImage и $ image_1, как вы пытаетесь сделать выше.

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