|
|
|
| Народ подскажите что делать то..
Было все норм, а потом из базы стали выводится все строки кроме одной... Как это убрать подскажите плиз, мне нужно чтобы все выводилось из базы
<?php
if ($_GET['id']){
$result = mysql_query("SELECT * FROM products WHERE id='$_GET[id]'");
$myrow = mysql_fetch_array($result);
//print_r($myrow);
//echo "$myrow[text]";
print <<<HERE
<div id="content">
$myrow[text]
</div>
HERE;
}
elseif (isset($_GET['hpu'])){
$result = mysql_query("SELECT * FROM products WHERE hpu='$_GET[hpu]'");
$myrow = mysql_fetch_array($result);
//print_r($myrow);
//echo "$myrow[text]";
if (mysql_fetch_array($result) > 0) {
echo "<div style='text-align:centre;'>";
echo "<table align='center' cellspacing='0' cellpadding='0'>";
echo "<tr>";
$i=0;
while ($myrow = mysql_fetch_array ($result))
{
echo ($i % 3 == 0 ? "</tr><tr>" : "");
echo "<td style='padding:16px;'>
<p><img src='$myrow[img]'/><br/>
<a href='/shop.php?hpu=$myrow[hpu]&id=$myrow[id]'>$myrow[title]</a><br/>
$myrow[settings]<br/>
$myrow[price] рублей за 1 метр</p>
</td>";
++$i;
}
echo "</tr>";
echo " </table>";
echo "</div>";
}
else {echo "<p style='font-size:19px; font-wieght:bold; color:red;'>Данного товара пока что нет!</p>";}
}
?>
|
| |
|
|
|
|
|
|
|
для: Habl
(23.08.2013 в 11:01)
| | Потому, что каждый запрос mysql_fetch_array смещает указатель на следующую позицию ресурса. А вы такие запросы делаете до цикла, и не понятно для чего.
mysql_fetch_array - в данном случае используете вы его неоправданно.
hpu='$_GET[hpu]', id='$_GET[id]' - так делать нельзя, да и кавычки не нужны здесь, по крайней мере во втором случае. | |
|
|
|
|
|
|
|
для: confirm
(23.08.2013 в 11:13)
| | Ну допустим мне надо вывести meta на страницу для этого не нужен ведь цикл...
Хорошо, тогда что сделать чтобы выводились все записи... Перенести запрос после цикла?
hpu='$_GET[hpu]', id='$_GET[id]' - так делать нельзя, да и кавычки не нужны здесь, по крайней мере во втором случае.
Тогда как лучше это сделать? | |
|
|
|
|
|
|
|
для: Habl
(23.08.2013 в 11:24)
| | Мне неизвестно что вам надо вывести, но ваш единственный запрос возвращает также единственный ресурс, в котором вы смещаете указатель до цикла дважды. Думайте, ваши данные, вам виднее. Например, это что вы хотите узнать mysql_fetch_array($result) > 0 ? Можете объяснить?
http://www.php.net/manual/ru/security.database.sql-injection.php | |
|
|
|
|
|
|
|
для: confirm
(23.08.2013 в 11:39)
| | оооу это ошибочка!
mysql_fetch_row там было, ошибся, но mysql_fetch_row тоже не работает... | |
|
|
|
|
|
|
|
|
для: confirm
(23.08.2013 в 11:49)
| | mysql_fetch_row проверяю есть ли в базе строки, если нет то в каталоге на сайте вывожу сообщение, что товаров в данной категории нет | |
|
|
|
|
|
|
|
для: Habl
(23.08.2013 в 12:13)
| | Вы читали внимательно? Видимо нет, ибо все эти три функции возвращают ряд результата запроса в виде массива, а ни как не число строк который вернул запрос. Кроме этого mysql_fetch_array возвращает либо ассоциативный массив, либо численный массив или оба вместе. Вы используя эту функцию без второго аргумента получаете два одинаковых набора данных, один представленный ассоциативным массивом, другой индексным. А работаете вы в дальнейшем с ассоциативными данными. Спрашивается, а зачем вы тянете лишнее?
Вы своим условием фактически проверяете if(Array) - то есть пустой массив или нет. Дугой информации любая из этих функций вам не вернет, так как, ни mysql_fetch_row ни две другие не возвращают количество строк в результата запроса. А есть ли такая функция? Если прочесть анонсы функций - http://www.php.net/manual/ru/ref.mysql.php, можно ли среди них найти то, что нужно? | |
|
|
|
|
|
|
|
для: confirm
(23.08.2013 в 11:49)
| | Хорошо, понял что вот из-за этого у меня не выводилась одна строка из базы
if (mysql_fetch_row($result) > 0) {
}
Что то еще мешает выводу еще одной строки | |
|
|
|
|
|
|
|
для: Habl
(23.08.2013 в 12:28)
| | У вас и до этого есть смещение указателя, сразу после второго запроса у вас - $myrow = mysql_fetch_array($result);, 100% пустое действие, так как далее до второго бесполезного if (mysql_fetch_row($result) > 0) вы не используете $myrow.
Число строк в ресурсе возвращенном запросом получает функция http://www.php.net/manual/ru/function.mysql-num-rows.php
$myrow[text] - это не ошибка, но писать так не стоит, и об этом предупреждают разработчики. Просто в данном случае РНР выполнит бесполезное действие - будет искать такую константу, и не найдя ее, поймет, что вы ошиблись, а значит это строковое значение, то есть $myrow['text']. Это не страшно, лишь впустую потраченное время, но если разработчик зарезервирует это имя, тогда труба - вы не получите ожидаемого. | |
|
|
|
|
|
|
|
для: confirm
(23.08.2013 в 12:37)
| | Хорошо, понял что вот из-за этого у меня не выводилась одна строка из базы
if (mysql_fetch_row($result) > 0) {
}
Что то еще мешает выводу еще одной строки
Думаю можно заменить этим mysql_ num_ rows | |
|
|
|
|
|
|
|
для: Habl
(23.08.2013 в 12:40)
| |
<?
$q = mysql_query(...);
if(mysql_num_rows($q)) {
while($row = mysql_fetch_assoc($q)) {
//гарантированный вывод всех рядов полученных запросом
}
}
|
Что еще объяснить, если вы до цикла дважды сместили указатель? Функция mysql_fetch_assoc, как и другие функции получения ряда автоматически смещают указатель ресурса, то есть действие наподобие foreach(). Это и есть причина. | |
|
|
|
|
|
|
|
для: confirm
(23.08.2013 в 12:46)
| | ясно, спасибо что все растолковали, если что обращусь к вам | |
|
|
|