Из кода я бы сказал, что $data2
представляет данные 1 строки из БД.
Итак, это должно быть $data2
, которое содержит то, что вы хотите отобразить.
Ваш цикл foreach бесполезен: если вы хотите отобразить данные из 1 строки, вы можете просто использовать $data2
напрямую.
Если вы хотите идти построчно, вы не должны выполнять итерации по $ data2, а выполнять цикл, пока mysql_fetch_array возвращает данные.
Примерно так, я бы сказал:
$result2 = mysql_query("SELECT id,fp_thumb,title FROM media") or die(mysql_error());
while ($data2 = mysql_fetch_array($result2)) {
echo '<li><a href="media.php?id='.$data2['id'].'"><img src="'.$data2['fp_thumb'].'" alt="'.$data2['title'].'" /></a></li>';
}
Кроме того, вы можете захотеть избежать данных, которые вы выводите, чтобы убедиться, что у вас нет какой-либо инъекции HTML / javascript - по крайней мере, в src и title, я бы сказал; для этого вы можете использовать htmlspecialchars
Тогда ваше эхо будет выглядеть примерно так:
echo '<li><a href="media.php?id='
. $data2['id']
. '"><img src="'
. htmlspecialchars($data2['fp_thumb'])
. '" alt="'
. htmlspecialchars($data2['title'])
. '" /></a></li>';
(я считал, что id - это целое число, автоинкрементное или что-то в этом роде, так что нет особого риска)
Редактировать после просмотра комментария к другому ответу
То, что вы впервые использовали:
$ data2 - это ассоциативный массив, который выглядит следующим образом:
array
'id' => int 152
'title' => string 'this is the title' (length=17)
'fp_thumb' => string 'http://...../' (length=13)
Это означает, что foreach будет зацикливаться три раза, а $ val будет:
int 152
string 'this is the title' (length=17)
string 'http://...../' (length=13)
(одно значение для каждой итерации)
т.е. $ val не является массивом, является скалярным значением.
Когда вы делаете это:
$a = 152;
var_dump($a['id']);
вы получите
null
При выполнении
$a = 'this is the title';
var_dump($a['id']);
вы получите:
string 't' (length=1)
то есть, вы получаете только первый символ при использовании доступа к массиву в строке с ключом, который является строкой.
Обратите внимание, что доступ к массиву в строке с цифровым ключом используется для доступа к одному символу массива:
$a = 'this is the title';
var_dump($a[3]);
получает вас:
string 's' (length=1)
Для получения дополнительной информации см. Страницу руководства о строке, особенно Доступ к строке и ее модификация с помощью символа , в котором указано:
Символы в строках могут быть
доступ и изменение путем указания
смещение нуля желаемого
символ после строки с помощью
квадратные скобки, как в $ str [42].
Думайте о строке как о массиве
символы для этой цели.
А:
Нецелые типы преобразуются в
целое число.
И преобразование 'title' в целое число дает 0; Итак, вы получите первый символ строки.
Надеюсь, это поможет, и вы поняли «почему»; -)