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

Форум PHP

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

 

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

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

тема: Не могу найти ошибку в коде.
 
 автор: Revival1002   (04.07.2009 в 17:39)   письмо автору
 
 

Вопрос.
Есть форма:

<center>
Форма добавления новостей<br>
<form action="news.php" method="POST">
<table style="background-color: rgb(209,209,209)">
<tr>
<td>Заголовок новости: </td><td><input size="52" name="title"></td></tr>
<tr>
<td valign="top">Краткое описание:</td><td><textarea cols="40" rows="6"name="desсriрtion"></textarea></td></tr>
<tr><td valign="top">Текст статьи: </td><td> <textarea cols="40" rows="15"name="text"></textarea></td></tr>
</table>
<input type="submit" name="button" value="Разместить статью">
</form>


News.php

<?php
$title
=$_POST['title'];
$desсriрtion=$_POST['desсriрtion'];
$text=$_POST['text'];
$db=mysql_connect(localhost'root''');
mysql_select_db('rss'$db);
$ids mysql_query("SELECT id FROM 'news');
$id = mysql_result($ids, 0, 'id');
$id++;
mysql_query("
INSERT INTO news (id,title,desсriрtion,text
VALUES ('id','$title','$desсriрtion','$text')",$db);
mysql_close(
$db);
?>


Браузер выдает:

[quote]
Parse error: syntax error, unexpected T_STRING in Z:\home\RevivalCMS.ru\www\admin\news.php on line 10
[/quote]

  Ответить  
 
 автор: sl1p   (04.07.2009 в 17:44)   письмо автору
 
   для: Revival1002   (04.07.2009 в 17:39)
 

:D
вы тут в подсветке кода не видите не красивостей?)

  Ответить  
 
 автор: Trianon   (04.07.2009 в 17:45)   письмо автору
 
   для: Revival1002   (04.07.2009 в 17:39)
 

А по расцветке кода не видно?

  Ответить  
 
 автор: Revival1002   (04.07.2009 в 18:07)   письмо автору
 
   для: Trianon   (04.07.2009 в 17:45)
 


<?php
$title
=$_POST['title'];
$description=$_POST['description'];
$text=$_POST['text'];
$db=mysql_connect(localhost'root''');
mysql_select_db('rss'$db);
$ids mysql_query("SELECT id FROM 'news'");
$id mysql_result($ids1);
$id++;
mysql_query("INSERT INTO news (id,title,description,text) 
VALUES ('id','
$title','$description','$text')",$db);
mysql_close($db);
?>

Исправил, теперь выдает:
[quote]
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in Z:\home\RevivalCMS.ru\www\admin\news.php on line 8
[/quote]

  Ответить  
 
 автор: Trianon   (04.07.2009 в 18:10)   письмо автору
 
   для: Revival1002   (04.07.2009 в 18:07)
 

Вот и поглядите, каким символом начинается красный цвет, и каким заканчивается. Может тогда дойдет.

  Ответить  
 
 автор: Trianon   (04.07.2009 в 18:12)   письмо автору
 
   для: Revival1002   (04.07.2009 в 18:07)
 

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in Z:\home\RevivalCMS.ru\www\admin\news.php on line 8
Что - и теперь не можете найти?

  Ответить  
 
 автор: RESPONSOR   (05.07.2009 в 12:53)   письмо автору
 
   для: Trianon   (04.07.2009 в 18:12)
 

<?php 
$title
=$_POST['title']; 
$desсriрtion=$_POST['desсriрtion']; 
$text=$_POST['text']; 
$db=mysql_connect(localhost'root'''); 
mysql_select_db('rss'$db); 
$ids mysql_query("SELECT id FROM 'news';"); 
$id mysql_result($ids0'id'); 
$id++; 
mysql_query("INSERT INTO news (id,title,desсriрtion,text)  
VALUES ('id','
$title','$desсriрtion','$text');"),$db); 
mysql_close($db); 
?>


вот, попробуй так.

  Ответить  
 
 автор: Trianon   (05.07.2009 в 12:59)   письмо автору
 
   для: RESPONSOR   (05.07.2009 в 12:53)
 

>для: Trianon (04.07.2009 в 18:12)
>вот, попробуй так.

избави меня бог от таких решений.
автоинкрементный первичный ключ на поле и никаких предварительных селектов.

  Ответить  
 
 автор: RESPONSOR   (05.07.2009 в 13:29)   письмо автору
 
   для: Trianon   (05.07.2009 в 12:59)
 

может ему этот скрипт ктото дал, а он не работает, для той структуры бд которая сейчас у него стоит, вполне пододет это решение, конечно с ключами было бы намного проще.

  Ответить  
 
 автор: Revival1002   (05.07.2009 в 20:16)   письмо автору
 
   для: RESPONSOR   (05.07.2009 в 13:29)
 

выдает ошибку в 11 строке. скрипт мне никто не давал, писал сам.

  Ответить  
 
 автор: Trianon   (05.07.2009 в 20:20)   письмо автору
 
   для: Revival1002   (05.07.2009 в 20:16)
 

а посчитать скобки в этой строке?

Скрипт , который сейчас приведен в (04.07.2009 в 18:07) выглядит более корректно.
Основная Ваша проблема заключается в том, что Вы не проверяете, успешно выполнен запрос сервером БД или нет.
Если запрос завершился неудачей ($ids равно нулю) то надо смотреть текст диагностики (возвращается функцией mysql_error())

  Ответить  
 
 автор: tvv123456   (09.07.2009 в 19:16)   письмо автору
 
   для: Trianon   (05.07.2009 в 12:59)
 

Блин я не на этот коммент отвечал а на тот который выше, где говорилось о первичном ключе и auto_incriment только еще желательно тип поля интаджер(INT) выставить
Полностью согласен!
Revival1002, Накой хрен вы так обрабатываете поле id? Это чистой воды ламерство! И о каком программировании может идти речь если вы не можете отличить присвоение от сравнения.
Если вы желаете мучаться и страдать ерундой, то делайте так как я описал ниже(где-то в саомом конце) но все-таки бросте это глупое дело и обратитесь к профессионалам ссылку дал в превом комменте(но вдруг вы не заметите http://www.phpsite.z4.ru/zakaz.php

  Ответить  
 
 автор: bas01   (06.07.2009 в 00:11)   письмо автору
 
   для: Revival1002   (04.07.2009 в 17:39)
 

фигурные скобки для переменных надо поставить

  Ответить  
 
 автор: Trianon   (06.07.2009 в 00:40)   письмо автору
 
   для: bas01   (06.07.2009 в 00:11)
 

Эт еще зачем?

  Ответить  
 
 автор: Revival1002   (06.07.2009 в 14:31)   письмо автору
 
   для: Trianon   (06.07.2009 в 00:40)
 

Я то то тоже не понял зачем.

<?php
$title
=$_POST['title'];
$desсriрtion=$_POST['desсriрtion'];
$text=$_POST['text'];
$db=mysql_connect('localhost''root''');
mysql_select_db('rss'$db);
$ids mysql_query("SELECT id FROM news "$db);
if (
$ids=0) {echo mysql_error();}
$id mysql_result($ids0);
$id++;
mysql_query("INSERT INTO news (id,title,desсriрtion,text)VALUES ('$id','$title','$desсriрtion','$text')",$db);
mysql_close($db);
?>


Warning: mysql_result(): supplied argument is not a valid MySQL result resource in Z:\home\RevivalCMS.ru\www\admin\news.php on line 9
По моему что то не то получилось.

  Ответить  
 
 автор: sim5   (06.07.2009 в 14:59)   письмо автору
 
   для: Revival1002   (06.07.2009 в 14:31)
 

А $id у вас что строковое значение?

  Ответить  
 
 автор: Revival1002   (06.07.2009 в 19:17)   письмо автору
 
   для: sim5   (06.07.2009 в 14:59)
 

Разве это имеет значение в PHP. Изначально не строковое.

  Ответить  
 
 автор: Trianon   (06.07.2009 в 21:23)   письмо автору
 
   для: Revival1002   (06.07.2009 в 19:17)
 

Если оно не строковое, а числовое, то зачем Вы его берете в апострофы?

  Ответить  
 
 автор: Trianon   (06.07.2009 в 20:27)   письмо автору
 
   для: Revival1002   (06.07.2009 в 14:31)
 

if($ids=0) это вовсе не сравнение.
Это присваивание нуля этой переменной.

Кроме того Вы не сделали попытки проверить результат второго запроса.

  Ответить  
 
 автор: Revival1002   (06.07.2009 в 21:11)   письмо автору
 
   для: Trianon   (06.07.2009 в 20:27)
 

тогда как сравнить? if !($ids) ?

  Ответить  
 
 автор: Trianon   (06.07.2009 в 21:21)   письмо автору
 
   для: Revival1002   (06.07.2009 в 21:11)
 

if($ids == 0)

if(!$ids)

  Ответить  
 
 автор: Revival1002   (07.07.2009 в 16:28)   письмо автору
 
   для: Trianon   (06.07.2009 в 21:21)
 

переделал строчку так
$qu=mysql_query("INSERT INTO news (id,title,desсriрtion,text)VALUES ('$id','$title','$desсriрtion','$text')",$db);

$qu получается равным нулю, но место текста ошибки оно пишет "mysql_error". Значит ошибка в этой строчке.
---------
Написал запрос снова, уже все работает. Все большое спасибо!

  Ответить  
 
 автор: GeorgeIV   (07.07.2009 в 16:34)   письмо автору
 
   для: Revival1002   (07.07.2009 в 16:28)
 

Почему id текстовый?

  Ответить  
 
 автор: Trianon   (07.07.2009 в 16:38)   письмо автору
 
   для: Revival1002   (07.07.2009 в 16:28)
 

> но место текста ошибки оно пишет "mysql_error". Значит ошибка в этой строчке.

кто пишет mysql_error ? отсель непонятно.

  Ответить  
 
 автор: Revival1002   (08.07.2009 в 18:17)   письмо автору
 
   для: Trianon   (07.07.2009 в 16:38)
 

Блин, вчера код, работал, а сегодне, я ничего не изменял и уже не работает. ТУпой комп!

  Ответить  
 
 автор: Trianon   (08.07.2009 в 18:22)   письмо автору
 
   для: Revival1002   (08.07.2009 в 18:17)
 

спасибо, хоть, не форум...
С таким подходом даже за топор лучше не браться.

  Ответить  
 
 автор: Keyses   (08.07.2009 в 19:34)   письмо автору
 
   для: Revival1002   (08.07.2009 в 18:17)
 

Да, дружище ты совершенно прав! Просто программирование - это такая штука, как погода, то работает то нет.
Если потанцевать с бубном вокруг компьютера, то возможно и заработает ;)

Под фразой "потанцевать с бубном вокруг компьютера" имелось ввиду почитать литературу по корректному построению БД (Trianon (05.07.2009 в 12:59)). Ну и немного непонятно как можно кодить без знания оператора присваивания в PHP?

  Ответить  
 
 автор: neadekvat   (09.07.2009 в 02:56)   письмо автору
 
   для: Keyses   (08.07.2009 в 19:34)
 

<?php 
$title
=$_POST['title']; 
$desсriрtion=$_POST['desсriрtion']; 
$text=$_POST['text']; 
$db=mysql_connect('localhost''root'''); 
mysql_select_db('rss'$db); 
$ids mysql_query("SELECT id FROM news "$db);
if (
$ids == 0) {
echo 
'Записей нет';
} else {
$id mysql_result($ids);
$id++; 
mysql_query("INSERT INTO news (id,title,desсriрtion,text)VALUES ('$id','$title','$desсriрtion','$text')",$db); 
}
mysql_close($db); 
?>

По-моему, что-то такое должно быть.
Но вообще, то, что вы тут крутите - такие сомнительные действия…

  Ответить  
 
 автор: Trianon   (09.07.2009 в 02:58)   письмо автору
 
   для: neadekvat   (09.07.2009 в 02:56)
 

Не "записей нет" а "запрос не был выполнен"

  Ответить  
 
 автор: tvv123456   (09.07.2009 в 19:02)   письмо автору
 
   для: neadekvat   (09.07.2009 в 02:56)
 

Ну что за ерунду вы тут творите, если уж хочеться изобрести велосипед, то делайте это хоть по уму
 
<? 
$result 
mysql_query("select id from news order by id desc",$db); // вытаскиваем все поля id из базы в обратном порядке(чтобы потом последнее поле захватить

if (!$result//тут проверка прошел ли запрос
  
{
echo 
"<p>Возникла ошибка с базой данных. <strong>Сообщите администратору:****</strong></p>";
exit (
mysql_error());
  }
if(
mysql_num_rows($result) > 0// проверка вытащилось ли хоть 1 строчка из базы
{

$myrow mysql_fetch_array($result);  //вытаскивается первая строка из $result Так как мы сортировали в по полю id по убыванию то и ниже $id получиться самая большая что есть в базе
$id $myrow['id']; 
$id++; // вот и все 
$result mysql_query("INSERT INTO news (id,title,desсriрtion,text) VALUES 
('
$id','$title','$desсriрtion','$text')",$db);  // тут у вас скорей всего ошибка в том что нет подходящих полей в таблице news

if($result == true)//проверка успешности добавления информации
{exit("Все ок информация добавилась");} else {exit("Не обновилось, произошла ошибка!");} 
}
?>

К тому же mysql поддерживает собственный индекс, а так как вы никто не делает
И вообще,Revival1002, судя по всему вам еще рановато заниматься практикой, нужно сначала изучить теорию.
Если хотите обновить скрипт сайта или доработать его, то вот вам адрес, там вам помогут практически за копейки : http://www.phpsite.z4.ru/zakaz.php - тут есть и форум где вы можете оставить вопрос администратору и вам дадут профессиональную консультацию.

_______________________________
НУ КАК КРАСИВО ПОЛУЧИЛОСЬ?

  Ответить  
 
 автор: GeorgeIV   (09.07.2009 в 20:27)   письмо автору
 
   для: tvv123456   (09.07.2009 в 19:02)
 

Не совсем. Если требуется ОДНА запись, зачем тянуть ВСЕ? Использовать LIMIT 1 вера не позволяет?
К тому же вытаскивать ID из базы , чтобы вставить на 1 больший - это не верный подход. Одновременно могут быть два и более запроса, прочиавших один и тот же ID, и затем попытающихся записать снова один и тот же ID. Автоинкеремнтные поля не от лени придумывались.

  Ответить  
 
 автор: Trianon   (09.07.2009 в 20:30)   письмо автору
 
   для: GeorgeIV   (09.07.2009 в 20:27)
 

LIMIT 1 использовать не позволяет вера. А в запросе напрашивается SELECT MAX(id) . В том гипотетическом варианте, когда нужен MAX(id) . :)

  Ответить  
 
 автор: tvv123456   (09.07.2009 в 21:30)   письмо автору
 
   для: GeorgeIV   (09.07.2009 в 20:27)
 

Дак я об этом и говорю!!! Зачем вообще таким способом обрабатывать id! Ну раз человеку захотелось именно так вот я и привел ему более менее приличный пример, можно и limit можно и MAX(id), но все равно как ни крути место такому способу обработки индекса в мусорном баке! Думаю в этом вы со мной согласитесь?
У меня на хосте например, если не создашь нормальный индекс в БД, то сразу высвечивается замечание.

  Ответить  
 
 автор: GeorgeIV   (09.07.2009 в 21:54)   письмо автору
 
   для: tvv123456   (09.07.2009 в 21:30)
 

Улыбнуло, посмотрев Ваш суперпрофессиональный сайт, особенно дергающееся меню.
А насчет индексов Вы заблуждаетесь. Индексы ускоряют выборку и ничего более. Можно успешно работать и без них, особенно если в таблицу много пишется, и только изредка читается, ибо индекс перестраивается при каждой вставке.

  Ответить  
 
 автор: tvv123456   (09.07.2009 в 22:01)   письмо автору
 
   для: GeorgeIV   (09.07.2009 в 21:54)
 

Такое ощущение, что вы думаете - это я так id обрабатываю. Читайте внимательнее!

А так, Во всем с вами полностью согласен :)
Может был немножко резковат в комментах просто настроение никакое.
Классный форум нашел, пока искал ответы на свой вопрос(правда так и не нашел).
Как-нибудь еще загляну.

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

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