$db = mysql_connect('localhost','login','password'); /*Подключаемся к MySQL серверу*/
mysql_select_db('test', $db); /*Выбираем базу данных*/
$result = mysql_query("SELECT * FROM test.test ORDER BY id"); /*Получаем результат в буфер*/
function my($limit, $result) { /*Функция выводит данные из БД по 5 записей*/
$i = 0; /*Счетчик, предназначенный для подсчета повторов цикла while*/
while($i<$limit and $myrow = mysql_fetch_array($result)) { /*Делай, пока цикл while не прошел 5 повторений и пока в базе данных не закончились записи*/
echo '<br/>'.$myrow['name'].'<br/>';
$i++;
};
}
while(/*Тут какие-то условия*/) {
my(5, $result);
}
/*Задача. Запустить функцию my() через цикл while таким образом, что бы информация выводилась из БД строго по порядку и до тех пор, пока не кончатся записи в БД*/
Задача описана в коде скрипта. Так же хочется отметить, что этот пример - упрощенный вид более сложной программы, над которой я сейчас работаю, по этому этот скрипт надо выполнить именно так, как описано в задаче - запускать функциюь my() через цикл while. Если удастся понять, как работает этот простой скрипт, то и более сложные программы на этой основе будут удаваться. Заранее спасибо.
Спустя 20 минут, 35 секунд (14.04.2010 - 09:03) sergeiss написал(а):
Цитата (Гость @ 14.04.2010 - 09:42) |
Задача. Запустить функцию my() через цикл while таким образом, что бы информация выводилась из БД строго по порядку и до тех пор, пока не кончатся записи в БД |
Не надо ничего придумывать, всё уже придумано давно

Вот тут читай: http://phpforum.ru/index.php?showtopic=21916
И еще. Используй тэги оформления кода! Удобнее же читать... Сейчас я отредактировал твой пост - видишь разницу?
Спустя 21 минута, 14 секунд (14.04.2010 - 09:24) Гость написал(а):
Ссылка на ваш материал мне никак не помогла. Есть конкретная задача - запустить функцию my() через цикл while и в вашем примере я не заметил ничего подобного.
Спустя 3 минуты, 23 секунды (14.04.2010 - 09:27) sergeiss написал(а):
Сделай сначала БЕЗ функции. Просто в цикле вывод. Или просто подумай, как это сделать.
А потом вынеси нужную тебе часть в отдельную функцию... Или я просто не понимаю, что тебе не понятно?
А потом вынеси нужную тебе часть в отдельную функцию... Или я просто не понимаю, что тебе не понятно?
Цитата (Гость @ 14.04.2010 - 10:24) |
Есть конкретная задача... |
Вполне естественно, что именно такой задачи не будет по какой-то ссылке

По указанной мной ссылке четко расписаны основы вывода данных из БД. Основы! На базе которых уже можно (и нужно) делать что-то своё.
Спустя 8 минут, 59 секунд (14.04.2010 - 09:36) Гость написал(а):
Скорее всего вы не понимаете, что мне нужно. ) Я знаю, как получить данные из БД без функции и знаю как получать их до тех пор, пока они есть в БД. Но, повторяю, этот код - упрощенный пример более сложной программы! Если бы нужно было просто вытащить информаию из БД я бы даже не полез на форум в поисках ответов. В более сложном примере в функцию my() переносится множество аргументов, благодаря чему она становится универсальной функцией.
Но на самом деле я уже нашел решение данной задачи методом тыка.
Но на самом деле я уже нашел решение данной задачи методом тыка.
$db = mysql_connect('localhost','login','password'); /*Подключаемся к MySQL серверу*/
mysql_select_db('test', $db); /*Выбираем базу данных*/
$result = mysql_query("SELECT * FROM test.test ORDER BY id"); /*Получаем результат в буфер*/
function my($limit, $result) { /*Функция выводит данные из БД по 5 записей*/
$i = 0; /*Счетчик, предназначенный для подсчета повторов цикла while*/
while($i<$limit and $myrow = mysql_fetch_array($result)) { /*Делай, пока цикл while не прошел 5 повторений и пока в базе данных не закончились записи*/
echo '<br/>'.$myrow['name'].'<br/>';
$i++;
};
}
while(my(5, $result)) {
}
/*В качестве условия нужно указать саму функцию, а тело цикла while оставить пустым*/
Спустя 7 минут, 11 секунд (14.04.2010 - 09:43) sergeiss написал(а):
Цитата (Гость @ 14.04.2010 - 10:36) |
Но на самом деле я уже нашел решение данной задачи методом тыка. |
Решение (теоретически) хорошее, но (практически) не рабочее. Потому что подразумевается, что функция возвращает значение (логическое), а она нифига не возвращает.
Спустя 17 минут, 25 секунд (14.04.2010 - 10:01) Гость написал(а):
Вы совершенно правы! Я не указал, что нужно возвращать из функции. Вот пример рабочего кода:
Если можете, прокомментируйте этот код. Т. е. я его сделал, но не совсем понимаю, как он работает. В этом минус метода тыка.
Не совсем понятно, что будет возврящать функция my(), когда информация в БД закончится и $myrow['name'] ничему не будет равен. Может она будет возвращять false?
Так же не ясно, на чем строится условие цикла while. Т. е., если описывать его работу русским языком, то получится: "Если функция my() выполняется, то выполнить её еще раз и так до тех пор, пока она не перестанет выполнятся". Или как?
<?php
$db = mysql_connect('localhost','admin','112233'); /*Подключаемся к MySQL серверу*/
mysql_select_db('test', $db); /*Выбираем базу данных*/
$result = mysql_query("SELECT * FROM test.test ORDER BY id"); /*Получаем результат в буфер*/
function my($limit, $result) { /*Функция выводит данные из БД по 5 записей*/
$i = 0; /*Счетчик, предназначенный для подсчета повторов цикла while*/
while($i<$limit and $myrow = mysql_fetch_array($result)) { /*Делай, пока цикл while не прошел 5 повторений и пока в базе данных не закончились записи*/
echo $myrow['name'].'<br/>';
$i++;
};
return $myrow['name']; /*Функция возвращает полученные данные из БД*/
}
while(my(5, $result)) {
}
?>
Если можете, прокомментируйте этот код. Т. е. я его сделал, но не совсем понимаю, как он работает. В этом минус метода тыка.
Не совсем понятно, что будет возврящать функция my(), когда информация в БД закончится и $myrow['name'] ничему не будет равен. Может она будет возвращять false?
Так же не ясно, на чем строится условие цикла while. Т. е., если описывать его работу русским языком, то получится: "Если функция my() выполняется, то выполнить её еще раз и так до тех пор, пока она не перестанет выполнятся". Или как?
Спустя 3 минуты, 10 секунд (14.04.2010 - 10:04) Dezigo написал(а):
чем тебе
не устраивает?
LIMIT 5
SELECT * FROM test.test ORDER BY id LIMIT 5
не устраивает?
LIMIT 5
Спустя 4 минуты, 56 секунд (14.04.2010 - 10:09) Гость написал(а):
Dezigo
Да, при помощи LIMIT 5 можно получить из БД только 5 записей, но это простая версия более сложного скрипта. В реальных условиях значение переменной $limit постоянно меняется, благодаря чему в разные участки кода мы можем вставлять разное количество записей.
Да, при помощи LIMIT 5 можно получить из БД только 5 записей, но это простая версия более сложного скрипта. В реальных условиях значение переменной $limit постоянно меняется, благодаря чему в разные участки кода мы можем вставлять разное количество записей.
Спустя 7 минут, 58 секунд (14.04.2010 - 10:17) twin написал(а):
Выбросить нужно функцию мю, а не комментировать. )))
Для чего вытаскивать из базы всю таблицу, что бы потом ограничить вывод в цикле?
Но начнем не с этого. А вот с этого:
Это рабочий вариант конечно, но какой то кривоватый. Для остановки цикла обычно используется break.
И использовать лучше mysql_fetch_assoc()
Дальше. Возвращает функция при таком раскладе единственное значение, а именно содержимое ячейки `name` последней строки. А до этого зачем то отправляет все в поток...
А самое главное, лимит нужно подставлять прямо в запрос и не выдумывать всяческих функций:
Для чего вытаскивать из базы всю таблицу, что бы потом ограничить вывод в цикле?
Но начнем не с этого. А вот с этого:
while($i<$limit and $myrow = mysql_fetch_array($result))
Это рабочий вариант конечно, но какой то кривоватый. Для остановки цикла обычно используется break.
while($myrow = mysql_fetch_array($result)) {
if($i >= $limit)break;
И использовать лучше mysql_fetch_assoc()
Дальше. Возвращает функция при таком раскладе единственное значение, а именно содержимое ячейки `name` последней строки. А до этого зачем то отправляет все в поток...
echo $myrow['name'].'<br/>';
А самое главное, лимит нужно подставлять прямо в запрос и не выдумывать всяческих функций:
$result = mysql_query("SELECT * FROM test.test ORDER BY id LIMIT ". $limit);
Спустя 47 минут, 32 секунды (14.04.2010 - 11:05) Гость написал(а):
twin
В начале хочется отметить, что данный код используется для постраничной разбивки данных из таблицы test, написанной на JS. Функцией my() мы извлекаем информацию из БД в разные участки кода JS и таким образом получаем постраничную разбивку. Тут нет смысла выкладывать пример кода JS. При необходимость сделать постраничную разбивку вы сможете написать его самостоятельно или найти соответствующие темы на форумах.
В начале хочется отметить, что данный код используется для постраничной разбивки данных из таблицы test, написанной на JS. Функцией my() мы извлекаем информацию из БД в разные участки кода JS и таким образом получаем постраничную разбивку. Тут нет смысла выкладывать пример кода JS. При необходимость сделать постраничную разбивку вы сможете написать его самостоятельно или найти соответствующие темы на форумах.
Цитата |
Для чего вытаскивать из базы всю таблицу, что бы потом ограничить вывод в цикле? |
Что бы получить информацию из БД строго по порядку и потом использовать для постраничной разбивки.
Цитата |
И использовать лучше mysql_fetch_assoc() |
Согласен, если использовать эту функцию, сервер будет менее загружен.
Цитата |
Дальше. Возвращает функция при таком раскладе единственное значение, а именно содержимое ячейки `name` последней строки. А до этого зачем то отправляет все в поток... |
Таким образом мы можем вставлять информацию в JS код. Т. е. мы просто указываем в нужном месте my(); и php размещает туда информацию из БД.
Цитата |
А самое главное, лимит нужно подставлять прямо в запрос и не выдумывать всяческих функций: |
Если делать так, как вы говорите, то информация будет извлекаться из БД не по порядку от начала до конца таблицы test, а только первые 5 строк. Но, что бы осуществить постраничную разбивку, нужны данные последовательно.