Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Неожиданная ошибка
 
 автор: Habl   (23.08.2013 в 11:01)   письмо автору
 
 

Народ подскажите что делать то..
Было все норм, а потом из базы стали выводится все строки кроме одной... Как это убрать подскажите плиз, мне нужно чтобы все выводилось из базы


<?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 == "</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>";}
}
?>

  Ответить  
 
 автор: confirm   (23.08.2013 в 11:13)   письмо автору
 
   для: Habl   (23.08.2013 в 11:01)
 

Потому, что каждый запрос mysql_fetch_array смещает указатель на следующую позицию ресурса. А вы такие запросы делаете до цикла, и не понятно для чего.
mysql_fetch_array - в данном случае используете вы его неоправданно.
hpu='$_GET[hpu]', id='$_GET[id]' - так делать нельзя, да и кавычки не нужны здесь, по крайней мере во втором случае.

  Ответить  
 
 автор: Habl   (23.08.2013 в 11:24)   письмо автору
 
   для: confirm   (23.08.2013 в 11:13)
 

Ну допустим мне надо вывести meta на страницу для этого не нужен ведь цикл...
Хорошо, тогда что сделать чтобы выводились все записи... Перенести запрос после цикла?

hpu='$_GET[hpu]', id='$_GET[id]' - так делать нельзя, да и кавычки не нужны здесь, по крайней мере во втором случае.
Тогда как лучше это сделать?

  Ответить  
 
 автор: confirm   (23.08.2013 в 11:39)   письмо автору
 
   для: Habl   (23.08.2013 в 11:24)
 

Мне неизвестно что вам надо вывести, но ваш единственный запрос возвращает также единственный ресурс, в котором вы смещаете указатель до цикла дважды. Думайте, ваши данные, вам виднее. Например, это что вы хотите узнать mysql_fetch_array($result) > 0 ? Можете объяснить?

http://www.php.net/manual/ru/security.database.sql-injection.php

  Ответить  
 
 автор: Habl   (23.08.2013 в 11:46)   письмо автору
 
   для: confirm   (23.08.2013 в 11:39)
 

оооу это ошибочка!
mysql_fetch_row там было, ошибся, но mysql_fetch_row тоже не работает...

  Ответить  
 
 автор: confirm   (23.08.2013 в 11:49)   письмо автору
 
   для: Habl   (23.08.2013 в 11:46)
 

Читайте:
http://www.php.net/manual/ru/function.mysql-fetch-array.php - и обратите внимание что эта функция возвращает.
http://www.php.net/manual/ru/function.mysql-fetch-assoc.php
http://www.php.net/manual/ru/function.mysql-fetch-row.php

Только читать внимательно. Прочли? Теперь объясните, что данным условием вы пытаетесь выяснить?

  Ответить  
 
 автор: Habl   (23.08.2013 в 12:13)   письмо автору
 
   для: confirm   (23.08.2013 в 11:49)
 

mysql_fetch_row проверяю есть ли в базе строки, если нет то в каталоге на сайте вывожу сообщение, что товаров в данной категории нет

  Ответить  
 
 автор: confirm   (23.08.2013 в 12:26)   письмо автору
 
   для: Habl   (23.08.2013 в 12:13)
 

Вы читали внимательно? Видимо нет, ибо все эти три функции возвращают ряд результата запроса в виде массива, а ни как не число строк который вернул запрос. Кроме этого mysql_fetch_array возвращает либо ассоциативный массив, либо численный массив или оба вместе. Вы используя эту функцию без второго аргумента получаете два одинаковых набора данных, один представленный ассоциативным массивом, другой индексным. А работаете вы в дальнейшем с ассоциативными данными. Спрашивается, а зачем вы тянете лишнее?

Вы своим условием фактически проверяете if(Array) - то есть пустой массив или нет. Дугой информации любая из этих функций вам не вернет, так как, ни mysql_fetch_row ни две другие не возвращают количество строк в результата запроса. А есть ли такая функция? Если прочесть анонсы функций - http://www.php.net/manual/ru/ref.mysql.php, можно ли среди них найти то, что нужно?

  Ответить  
 
 автор: Habl   (23.08.2013 в 12:28)   письмо автору
 
   для: confirm   (23.08.2013 в 11:49)
 

Хорошо, понял что вот из-за этого у меня не выводилась одна строка из базы
if (mysql_fetch_row($result) > 0) {

}
Что то еще мешает выводу еще одной строки

  Ответить  
 
 автор: confirm   (23.08.2013 в 12:37)   письмо автору
 
   для: 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']. Это не страшно, лишь впустую потраченное время, но если разработчик зарезервирует это имя, тогда труба - вы не получите ожидаемого.

  Ответить  
 
 автор: Habl   (23.08.2013 в 12:40)   письмо автору
 
   для: confirm   (23.08.2013 в 12:37)
 

Хорошо, понял что вот из-за этого у меня не выводилась одна строка из базы
if (mysql_fetch_row($result) > 0) {

}
Что то еще мешает выводу еще одной строки

Думаю можно заменить этим mysql_ num_ rows

  Ответить  
 
 автор: confirm   (23.08.2013 в 12:46)   письмо автору
 
   для: Habl   (23.08.2013 в 12:40)
 

<?
$q 
mysql_query(...);
if(
mysql_num_rows($q)) {
   while(
$row mysql_fetch_assoc($q)) {
       
//гарантированный вывод всех рядов полученных запросом
   
}
}

Что еще объяснить, если вы до цикла дважды сместили указатель? Функция mysql_fetch_assoc, как и другие функции получения ряда автоматически смещают указатель ресурса, то есть действие наподобие foreach(). Это и есть причина.

  Ответить  
 
 автор: Habl   (23.08.2013 в 12:48)   письмо автору
 
   для: confirm   (23.08.2013 в 12:46)
 

ясно, спасибо что все растолковали, если что обращусь к вам

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования