#php
#php
Вопрос:
Я работаю над проектом, в котором мне нужно превратить текст в ячейке таблицы в динамическую ссылку, и я получаю сообщение об ошибке при переходе в HTML.
Вот строка кода, которую я пытаюсь превратить в ссылку. Это работает идеально, прежде чем я попытаюсь сделать это ссылкой.
echo "<td><a>" . (isset($resultSetArray[$x]["assessment"]["owner1"]) ?
ucwords(strtolower($resultSetArray[$x]["assessment"]["owner1"])) : '')
. "</a></td>";
Он возвращает имя из базы данных. Мне нужно, чтобы это имя было ссылкой на другую страницу с именем в URL.
Вот что я безуспешно пытался. Где я ошибаюсь?
echo "<td>" . "<a href="http://Company.com/secure/IndSearch?owner="
(isset($resultSetArray[$x]["assessment"]["owner1"]) ?
ucwords(strtolower($resultSetArray[$x]["assessment"]["owner1"])) : '')"/"
(isset($resultSetArray[$x]["assessment"]["owner1"]) ?
ucwords(strtolower($resultSetArray[$x]["assessment"]["owner1"])) : '') . "</a></td>";
Комментарии:
1. Какое сообщение об ошибке вы получаете во время выполнения?
2. Я единственный , кто испытывает желание провести рефакторинг этого дублирования кода ?
3. @Clement вот почему люди ненавидят PHP 🙁
4. @Ben на самом деле не имеет отношения к PHP. Любой язык допускает это, только OP не хотел отделять свой HTML от своего PHP и не хотел сохранять результат своего условия в промежуточной переменной.
5. @Clement очевидно, что подобный беспорядок может быть достигнут в RoR и др., хотя, похоже, это случается редко.
Ответ №1:
Я определил две из них с помощью вашего кода:
- Вы заключаете HTML в двойные кавычки, которые пытаетесь воспроизвести
- Вы используете тернарный оператор, который на первый взгляд сложно отладить
Есть способ написать этот код гораздо более приятным способом, чтобы вы могли сразу увидеть, где вы допустили ошибку (или добавить дополнительную HTML-разметку / переменные и т.д.).
Синтаксис цитирования строки называется HereDoc
$owner = '';
if(isset($resultSetArray[$x]["assessment"]["owner1"]))
{
$owner = $resultSetArray[$x]["assessment"]["owner1"];
}
$str = <<<EOF
<td><a href="http://Company.com/secure/IndSearch?owner=$owner">$owner</a></td>
EOF;
echo $str;
Как вы можете видеть, вам не нужно дважды проверять массив, чтобы подтвердить существование записи, и вам не нужно заключать его в кавычки, чтобы вы могли безопасно вставлять свой HTML-код без каких-либо забот, и вы также можете использовать переменные PHP.
Ответ №2:
Я думаю, вам не хватает некоторых точек конкатенации .
в вашем echo-операторе. Особенно. перед первым isset
вызовом функции.
кстати, ваш код нуждается в серьезном рефакторинге. Существует множество избыточных вызовов, которых вы можете избежать, сохранив возвращаемые значения в локальных переменных.
Ответ №3:
Вы пропустили точку при объединении строк:
echo "<td>" . "<a href="http://Company.com/secure/IndSearch?owner="
(isset($resultSetArray[$x]["assessment"]["owner1"]) ?
ucwords(strtolower($resultSetArray[$x]["assessment"]["owner1"])) : '') . "/"
// ^ missing one
....
Ответ №4:
ucwords(strtolower($resultSetArray[$x]["assessment"]["owner1"])) : '')"/"
Для
ucwords(strtolower($resultSetArray[$x]["assessment"]["owner1"])) : '')."/"
Вы пропустили точку.
Ответ №5:
У вас отсутствуют некоторые точки конкатенации, например, между первой строкой и первым isset
.
Ответ №6:
вам не хватает точек объединения в конце строки 1 и двух в строке 3