[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: вывод данных из MySQL
Anton63
Помогите...
Никак не могу понять в чём проблема...
Это скрипт по выводу 5 сообщений на каждую страницу из БД.
Ошибок никаких не выводит, а вывод всё равно не тот...
Вот листинг
PHP
$db=mysql_connect('localhost''root''')  or die("Ошибка: ".mysql_error());
mysql_select_db('top10'$db)  or die("Ошибка: ".mysql_error());

$max=5;
$res=mysql_query("SELECT head FROM ansvers"$db)  or die("Ошибка: ".mysql_error());
//Создаём массив элементов БД
$row=mysql_fetch_array($res)  or die("Ошибка: ".mysql_error());
//Получаем количество элементов в массиве
$mass mysql_num_rows($res)  or die("Ошибка: ".mysql_error());
//Делим на количество отображаемых на странице изображений и округляем в большую сторону
$pages ceil($mass/$max);
//Принимаем входящую переменную, которая указывает номер страницы
$_p $_GET['page'];
//Создаем вспомогательные переменные для навигации, если переменная $_p не задана
if(!$_p OR $_p ==''){
//Нижний предел
$nmin 0;
//Верхний предел
$nmax=$max-1;
echo 
'Анкеты<BR>';
for(
$i=$nmin;$i<=$nmax;$i++){ // Выводим head по 5 штук на странице
    
if($row[$i]){
echo 
$row[$i]."<BR>";
}
}
}
else {
//Переменная $_p создана
$nmin = ($_p*$max)-$max ;
$nmax=($max*$_p)-1;
echo 
'Анкеты<BR>';
for(
$i=$nmin;$i<=$nmax;$i++){ // Выводим head по 5 штук на странице
    
if($row[$i]){
echo 
$row[$i]."c<BR>";
}
}
}
//Выводим номера страниц
echo "<br/><br/>";
for(
$n=1;$n<=$pages;$n++) {

if(
$_p != $n) {echo '<a href="ansver.php?page='.$n.'">['.$n.']</a>&nbsp;';}
if(
$_p == $n) {echo '['.$n.']&nbsp;';}
}


У меня выводятся номера страниц... а самих заголовков нет...



Спустя 26 минут, 47 секунд (21.07.2009 - 08:33) Wird_34 написал(а):
mysql_fetch_array() возвращает только один ряд результата запроса.

Спустя 3 минуты, 44 секунды (21.07.2009 - 08:36) Anton63 написал(а):
Цитата (Wird_34 @ 21.07.2009 - 05:33)
mysql_fetch_array() возвращает только один ряд результата запроса.

Понятненько...
Как же мне поступить... как осуществить вывод???

Спустя 18 минут, 7 секунд (21.07.2009 - 08:54) Wird_34 написал(а):
Первый вызов mysql_fetch_array() убери, а циклы перепиши в примерно такой вид:
PHP
for ($i = $nmin; $i <= $nmax; $i++)
    if($row = mysql_fetch_array($res))
        echo $row[0]."<br />";

Хотя у меня такое ощущение что можно как-то рациональнее это сделать...

Спустя 8 минут, 4 секунды (21.07.2009 - 09:02) Anton63 написал(а):
Wird_34, Спасибо... домой приду попробую... Но у меня такое чувство, что это то же самое, что и я делал...
Мне кажется, что нет необходимости при каждом витке цикла создавать новый массив... он же всегда одинаковый будет... или я не прав???

Спустя 3 минуты, 15 секунд (21.07.2009 - 09:06) Wird_34 написал(а):
При каждой итерации цикла будет считываться только одна строка из результата запроса и выводится значение его первого поля.

Спустя 49 минут, 39 секунд (21.07.2009 - 09:55) Kuliev написал(а):
Anton63

Вот посмотри пример, а то Ваш код очень не красив
PHP
$sql = ("SELECT head FROM ansvers");
$result mysql_query($sql)  or die ("Ошибка: ".mysql_error() ."<br/>"$sql);

while (
$row mysql_fetch_assoc($result))
{
    
     echo 
$row['head']."<br\>";


}


Спустя 7 минут, 16 секунд (21.07.2009 - 10:03) Anton63 написал(а):
Kuliev, Спасибо...

Спустя 1 минута, 43 секунды (21.07.2009 - 10:04) Wird_34 написал(а):
Kuliev, ваш код выводит заголовки всех сообщений, а ему вроде как только 5-и требуется.

Спустя 10 минут, 56 секунд (21.07.2009 - 10:15) Kuliev написал(а):
Wird_34
Я знаю, это пример как делать правильно и красивее чем у него, разве вы не согласны.

А если 5 строк вывести надо то LIMIT 5 добавить в запрос!

Спустя 9 минут, 6 секунд (21.07.2009 - 10:24) Anton63 написал(а):
Цитата (Kuliev @ 21.07.2009 - 07:15)
Wird_34
Я знаю, это пример как делать правильно и красивее чем у него, разве вы не согласны.

А если 5 строк вывести надо то LIMIT 5 добавить в запрос!

Это да, красотища...
А как сделать с LIMIT 5?
То есть как мне указать с какого элемента массива начать и каким закончить вывод... Чёт я по гуглу пробежался и ничего про LIMIT не нашол...

Спустя 2 минуты, 41 секунда (21.07.2009 - 10:27) sergeiss написал(а):
Цитата (Anton63 @ 21.07.2009 - 11:24)
Чёт я по гуглу пробежался и ничего про LIMIT не нашол...

А надо было не бегать, а спокойно читать. Например, вот так.

Спустя 6 минут, 1 секунда (21.07.2009 - 10:33) Anton63 написал(а):
Кстати, есть ещё вопрос... пытаюсь, при регистрации из логина удалить посторонние символы таким образом:
$text = preg_replace ("/@|#|$|%|^|&|*|+|=|<|>|?|\/|;|{|}|[|]|~|"|'|/", "", $text);
echo $text;
Это нормально? smile.gif
И ещё, если я сделаю проверку гостевой книги(хранится в mysql) через mysql_real_escape_string это будет безопасно? В плане js, иньекций и т.п.

Спустя 6 минут, 55 секунд (21.07.2009 - 10:40) Anton63 написал(а):
С LIMIT вроде понял. Делаем так:
$sql = ("SELECT head FROM ansvers LIMIT ".$nmin.", ".$max.");

Спустя 1 час, 50 минут, 20 секунд (21.07.2009 - 12:30) Nikitian написал(а):
Цитата (Anton63 @ 21.07.2009 - 07:33)
Кстати, есть ещё вопрос... пытаюсь, при регистрации из логина удалить посторонние символы таким образом:
$text = preg_replace ("/@|#|$|%|^|&|*|+|=|<|>|?|\/|;|{|}|[|]|~|"|'|/", "", $text);
echo $text;
Это нормально? smile.gif
И ещё, если я сделаю проверку гостевой книги(хранится в mysql) через mysql_real_escape_string это будет безопасно? В плане js, иньекций и т.п.

Зачем вы их удаляете?
Если сделаете прогон через mysql_real_escape_string(), то избавитесь от SQL-инъекций. JS надо чистить отдельно, как и проверять на xss

Спустя 28 минут, 35 секунд (21.07.2009 - 12:59) Anton63 написал(а):
Цитата (Nikitian @ 21.07.2009 - 09:30)
JS надо чистить отдельно, как и проверять на xss

То есть ещё добавляем htmlspecialchars();

Спустя 1 час, 9 минут, 36 секунд (21.07.2009 - 14:09) Nikitian написал(а):
Если теги не нужны, то именно так

Спустя 7 часов, 44 минуты, 36 секунд (21.07.2009 - 21:53) Soldier Ghost написал(а):
Простите что здесь не хотел создавать тему из-за пустяка!
В общем у меня проблема, есть пользователь у которого есть подпись поле подписи соответсвенно текстария при нажатии Enter в поле скрыто вставляется тэг <br /> в базе оно в таком виду пример:
моя подпись<br />
следущая строка<br />
Вот, у пользователя есть возможно редактировать свой профайл и когда заходиш в редактирование в поле текстария его подпись выглядит точно так же как и в базе т.е.
моя подпись<br />
следущая строка<br />
С брками я пытался писать замену перед выводом из базы str_replace(); к сожалению эта функция почемуто при выводе ничего не заменяет, а только добавляет в конце этих тэгов то на что я их меняю!
Хотел бы у вас спросить как мне избавится от этого может фунцкия такая есть?

Спустя 2 часа, 37 минут, 50 секунд (22.07.2009 - 00:31) Nikitian написал(а):
при сохранении в базу у вас где-то прогоняется через функцию nl2br() или её аналог, если конечно это обычный textarea. Как вариант прогонять через эту функцию при выводе, а не при сохранении в базу (так вообще-то правильнее)

Спустя 22 минуты, 3 секунды (22.07.2009 - 00:53) Soldier Ghost написал(а):
ага щас попробую

Спустя 9 часов, 34 минуты, 6 секунд (22.07.2009 - 10:27) Anton63 написал(а):
ОК, всем спасибо! Помогли, выводит, конечно криво, не по пять анкет на страницу, а то больше-то меньше...но алгоритм понятен и с функцией разобрался... дальше сам буду разбираться...
Теперь мучает вопрос безопасности. Вот примерчик:
PHP
//получаем логин, который ввёл пользователь
$text "\*vasia*/";
// проверяем полученные данные
if (preg_match("#^[a-zа-я0-9_]+$#i"$text)){
echo 
"Вы добавлены";}
else{
echo 
"Логин дожен содержать только символы a-z, A-Z, 0-9, - и _";}

В результате конечно нужно получить отказ в авторизации.
Если я всё правильно сделал, то объясните, пожалуйста, что именно я сделал smile.gif
Никак с маской "#^[a-zа-я0-9_]+$#i" разобраться не могу...
"+" считает совпадения... А что вот это "^" и "$" такое?
И почему он считает символы которые можно вводить, а не наоборот???
Объясните кому не лень...

Спустя 12 минут, 2 секунды (22.07.2009 - 10:39) Soldier Ghost написал(а):
Нет не работает всё равно с <br /> отображает.

Спустя 5 часов, 4 минуты (22.07.2009 - 15:43) Soldier Ghost написал(а):
Может подскажет ктонить?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.