Forum Webscript.Ru

Программирование => PHP => Тема начата: m0zg от 30 Августа 2004, 10:36:41

Название: Помогите со скриптом для новостей
Отправлено: m0zg от 30 Августа 2004, 10:36:41
Вобщем, написал такой скрипт (он добавляет новость в базу: заголовок, статья и автор):

if (!$header || !$stuff || !$author) {
  echo "Что-то забыл?";
  exit;
}
@ $db = mysql_connect("localhost", "root");
if (!$db) {
  echo "не могу соединиться с базой!";
  exit;
}
mysql_select_db("news");
$query = "insert into news values
(\'".$header."\', \'".date("Y-m-d")."\', \'".$stuff."\', \'".$author."\')";
$result = mysql_query($query);
if ($result)
echo mysql_affected_rows()." новость была добавлена в базу.";
?>

А вот этот скрипт считывает информацию из базы:

@ $db = mysql_connect("localhost", "news");
if (!$db) {
  echo "Не могу соединиться с базой!";
  exit;
}
mysql_select_db("news");
$query = "select * from news";
$result = mysql_query($query);
$num_results = mysql_num_rows($result);
for ($i=0; $i<$num_results; $i++) {
  $row = mysql_fetch_array($result);
  echo "
";
  echo "";
  echo "
";
  echo "";
  echo $row["header"]."
   ";
  echo "";
  echo $row["date"]."

";
  echo $row["stuff"]."

";
  echo "posted by  ";
  echo $row["author"]."
 ";
  echo "
";
}
?>

Вопрос такой:
Как мне сделать так, чтобы последние занесённые новости отображались сверху, как полагается, а не снизу?
Подскажите...
Название: Помогите со скриптом для новостей
Отправлено: Меняздесьдавнонет от 30 Августа 2004, 11:05:02
отсортировать запрос по убыванию.
Вообще-то, твой вопрос имеет отношение исключительно к mysql
тебе следует срочно что-нибудь почитать по базам данных.
Сейчас ты используешь ее как дикарь - микроскоп: для колки орехов.
База служит не только для того, чтобы в нее что-то положить, а потом достать.
С ее помощью можно делать совершенно фантастические вещи. сортировка - это просто мелочь.

$query = "select * from news order by date desc";
Название: Помогите со скриптом для новостей
Отправлено: Меняздесьдавнонет от 30 Августа 2004, 11:16:40
Вообще, у тебя много проблем в скрипте.
в-нулевых: http://phpfaq.ru/slashes
во-первых, для понимания логики программы была придумана такая удобнейшая штука, как отступы. Не стоит ими пренебрегать.
Во-вторых, ты ОЧЕНЬ затрудняешь себе задачу, расставляя в коде собак. Если ты это делаешь из правильных побуждений - чтобы юзер не видел системных сообщений об ошибках, то это надо делать правильно - в ОДНОМ месте написать error_reporting(0);
а не распихивать собак по всему коду. Если у тебя что-то не будет работать, ты не узнаешь - почему. Сообщения об ошибках ты ведь задавал собаками!
В-третьих, вместо трех строчек
Цитировать
$num_results = mysql_num_rows($result);
for ($i=0; $i<$num_results; $i++) {
  $row = mysql_fetch_array($result);

используется одна:
while($row = mysql_fetch_array($result)) {

В-четвертых,
Цитировать
if (!$header || !$stuff || !$author) {
  echo "Что-то забыл?";
  exit;
}

это, конечно, садизм.
Надо бы форму выводить снова, в которой заполнены незабытые поля. проще ведь ввести одно забытое, чем заново набивать по-новой.
в-пятых, вместо
Цитировать

@ $db = mysql_connect("localhost", "news");
if (!$db) {
  echo "Не могу соединиться с базой!";
  exit;
}

для пользователя правильнее писать
mysql_connect("localhost", "news") or die("ошибка базы данных");
- зачем юзеру зать, в чем конкретно ошибка - в коннекте ил в чем-то еще?
А для себя надо писать
mysql_connect("localhost", "news") or die(mysql_error()."
".$query);
чтобы иметь РЕАЛЬНОЕ сообщение об ошибке.
И в любом случае - делать это гораздо короче.
Название: Помогите со скриптом для новостей
Отправлено: Altaxar от 31 Августа 2004, 18:37:34
RomikChef прав во всем, но ещё одно замечание, некто ещё не отменял цыкл в обратную сторону если уз на то пошло
  for ($i=0; $i<$num_results; $i++)
 заменив на:
 for ($i=$num_results--; $i!=0; $i--)
 а лучше всего сразу писать грамотно, и учится грамотно работать с MySQL, как откаментировал RomikChef
Название: Помогите со скриптом для новостей
Отправлено: Меняздесьдавнонет от 01 Сентября 2004, 15:46:26
Kneaz
ты сам-то понимаешь, что сказал глупость?
Название: Помогите со скриптом для новостей
Отправлено: Altaxar от 02 Сентября 2004, 14:29:17
Извеняюсь, я не посмотрел что он использует msql_fetch_row(), после
$result = mysql_query($query);  
если уж и использовал цикл for то вывод делал так:
$result[$i]["header"] и так далие.
Название: Помогите со скриптом для новостей
Отправлено: Меняздесьдавнонет от 02 Сентября 2004, 14:32:06
Это опять глупость.
может быть, ты перестанешь изобретать велосипед, который, к тому же НЕ ЕЗДИТ?
Название: Помогите со скриптом для новостей
Отправлено: Altaxar от 02 Сентября 2004, 15:10:32
Ладно, может гдето и есть ошибка, но задача в том что у него уже создан отсортированый масив, только  проблема что он хранится задом на перед или выводится.
И мне совсем не нравится идея после каждого добавления сортировать таблицу.
Название: Помогите со скриптом для новостей
Отправлено: Меняздесьдавнонет от 02 Сентября 2004, 15:54:36
Цитировать
но задача в том что у него уже создан отсортированый масив

откуда ты это взял???
А, понял - из фантазий. А ну бегом читать ман!
Цитировать
Kneaz:
И мне совсем не нравится идея после каждого добавления сортировать таблицу.

Мне тоже. поэтому никто таблицу и не сортирует.
Название: Помогите со скриптом для новостей
Отправлено: Altaxar от 02 Сентября 2004, 17:07:03
Нет не из фантазии,
m0zg:
Вобщем, написал такой скрипт (он добавляет новость в базу: заголовок, статья и автор)
Если добавляет, значит с каждым добавлением id записи увеличивается на 1, и не кто не говорил что ее редактирует, значит в итоге получаем отсортировавую таблицу по id, и id как раз и указывает приоритет статьи над другой. Еше скажи что сдесь логики не какой нету.

$i=0;
while($row = mysql_fetch_array($result))
$mas[$i++]=$row;
array_reverse($mas);
foreach($mas as $row){

}
Название: Помогите со скриптом для новостей
Отправлено: Меняздесьдавнонет от 02 Сентября 2004, 17:26:10
подожди.
ты писал, что
Цитировать

но задача в том что у него уже создан отсортированый масив

А сейчас показываешь мне СВОЙ, который ты сам СПЕЦИАЛЬНО сейчас создал.
Тебе не кажется, что это попахивает враньем? Тебе знакомо значение этого слова?

Это не говоря о том, что такой массив АБСОЛЮТНО НЕ НУЖЕН. Ты можешь это понять? У тебя проблемы не только с письмом по-русски, но и с чтением?
Название: Помогите со скриптом для новостей
Отправлено: Altaxar от 02 Сентября 2004, 17:46:14
Проблема больше в транслите, извиняюсь я допустил описку за место \'масив\' хотел написать \'таблицу\'
Еше такой вопрос?
$result = mysql_query($query);
$result - какой тип представлеает?
P.S. ORDER BY имятвоегополя DESC -теперь понял можно и в запросе запросить в обратном порядке вывод.
Название: Помогите со скриптом для новостей
Отправлено: Меняздесьдавнонет от 02 Сентября 2004, 18:01:57
Цитировать
Kneaz:
Еше такой вопрос?
$result = mysql_query($query);
$result - какой тип представлеает?

ВОТ  С ЭТОГО ВОПРОСА И НАДО БЫЛО НАЧИНАТЬ!
ответ несложно посмотреть в документации, написав в браузере
http://php.net/ и сразу - имя функции.

Цитировать
Kneaz:
теперь понял можно и в запросе запросить в обратном порядке вывод.

не можно, а НУЖНО. именно для этого и придумана база.
машину тоже МОЖНО руками толкать. Но придумана она, чтобы это она тебя возила, а не наоборот.