#php #url
#php #url
Вопрос:
Для определенных продуктов в моей базе данных название продукта будет обрезано между <a href=" RIGHT HERE "> </a>
Он будет корректно отображаться с помощью визуальной стороны HTML. Но ссылка иногда отображает сокращенное имя.
У кого-нибудь есть идеи, почему это может быть?
Кажется, я даже не могу подумать, в чем может быть проблема?
$result = mysql_query($query);
while($row = mysql_fetch_row($result))
{
$namelink = str_replace(" ","_",$row[1]);
print <<< PRODUCT_RESULTS
<table cellpadding="5" cellspacing="5" id="vProducts">
<tr>
<td><img src="$row[3]"/></td>
<td id="productTitle"><a href="/view_product1.php?name=$namelinkamp;model=$row[0]">$row[1]</a><br />
<li>Model: $row[0]</li>
</td>
</tr>
</table>
<div style="width:749px; height:1px; background:#CCC;"></div>
PRODUCT_RESULTS;
}
Структура таблицы:
CREATE TABLE `products` (
`modelNumber` varchar(100) NOT NULL DEFAULT '',
`name` varchar(400) DEFAULT NULL,
`shortDescription` varchar(500) DEFAULT NULL,
`image` varchar(400) DEFAULT NULL,
`largeImage` varchar(400) DEFAULT NULL,
`url` varchar(400) DEFAULT NULL
)
Комментарии:
1. Некоторый код и структура таблицы были бы хороши
2. Это 2011 год? Расширение mysql вышло из моды полдесятилетия назад, используйте mysqli или PDO, оба имеют подготовленные инструкции, и поэтому вы можете избежать атак с использованием SQL-инъекций. Использование $row [1] гарантирует место в конкурсе на обфускацию — используйте имена столбцов для удобства чтения. Наконец, сброс подобных данных без перехода в HTML также является особенно хорошей идеей.
3. @chx Спасибо за ваш совет. Программируя совсем недолго, я все еще изучаю игру.
4. Возможно ли, что в ваших именах есть специальные символы, которые нужно экранировать с помощью
urlencode()
, прежде чем помещать их в URL? Просмотр выходного исходного кода также был бы полезен.5. @chx Послушай, я не говорю, что считаю это хорошей идеей. Черт возьми, это откровенно раздражает, но я сталкивался со случаями, когда PHP 5 был доступен, но только с базовой функциональностью MySQL. Лично меня активно беспокоит то, что я единственный в своей компании, кто настаивает на PDO для PHP 5.x…
Ответ №1:
Это может показаться сумасшедшим, но есть ли у вас >
, "
или какой-либо другой символ, который сделал бы недопустимым HTML в этой записи? Что происходит, когда вы используете «просмотр исходного кода»? Он все еще отключен?
Кстати, я не знаю, осознаете ли вы это, но вы выполняете двойной поиск по этим переменным. Это не только медленнее, но и сложнее в отладке. Вместо того, чтобы делать это:
<td id="productTitle">
<a href="/view_product1.php?name=$namelinkamp;model=$row[0]">
$row[1]
</a>
<br />
<li>Model: $row[0]</li>
Установите переменные перед печатью, эквивалентной каждому из индексов массива, а затем выведите этот результат.
Вы также могли бы избавиться от вызова print и просто использовать ?> <?php
. Очевидно, что вам нужно будет вывести содержимое переменных вручную, как только вы это сделаете, но это, возможно, было бы чище и понятнее.
Комментарии:
1. Причина, по которой здесь используются числовые индексы, заключается в том, что OP использовал числовые индексы.
Ответ №2:
Измените $row[3]
на $row[image]
и $row[0]
на $row[modelNumber]
и т.д. И если это не сработает, мне нужно будет просмотреть запрос $ .
Редактировать: Krinkle (комментарий ниже) предлагает использовать $row["image"]
и $row["modelNumber"]
, что является лучшей практикой.
Комментарии:
1. Не меняйте их на
$row[image]
, но на$row["image"]
(обратите внимание на кавычки), иначе вы будете ссылаться на глобальные константы.2. Спасибо за ваш комментарий, и да, использование кавычек — более правильная практика, как в
$row["image"]
, но я почти уверен, что$row[image]
будет функционировать без проблем (хотя и выдаст уведомление), если оно не используется в качестве константы.