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

Форум MySQL

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

 

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

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

тема: редактирование Гостевой
 
 автор: 10100100   (08.11.2005 в 12:53)   письмо автору
 
 

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

это файл gb.sql


CREATE TABLE 'soob' (
'id_soob' INT NOT NULL AUTO_INCREMENT ,
'name' TINYTEXT,
'email' TINYTEXT,
'homepage' TINYTEXT,
'gorod' TINYTEXT,
'soob' TINYTEXT,
'comment' TINYTEXT,
'time' DATETIME DEFAULT NULL ,
PRIMARY KEY (id_soob)
) TYPE = MYISAM;


этот файл отвечает за редактирование сообщений: redact.php


<?php
include 'config.php';
$query "SELECT * FROM soob ORDER BY id_soob DESC"
$ath = @mysql_query($query); 
$t1 "<table border=1 width=50%><tr><td width=100% align=center valign=middle><table border=1 width=90%><tr><td><table border=0 cellspacing=0 cellpading=0 width=100%><tr><td><table><tr><td>";
$t2 "</td></tr></table></td><td align=right>";
$t3 "</td></tr></table></td></tr></table><table border=1 width=90%><tr><td><table border=0 cellspacing=0 cellpading=0 width=100%><tr><td align=left>";
$t4 "</td><td align=right>";
$t5 "</td></tr></table></td></tr></table><table border=1 width=90%><tr><td valign=top><table border=0 cellspacing=0 cellpading=0><tr><td>";
$t6 "<br><br></td></tr></table></td></tr></table></td></tr></table>";
$spec_tab_1 "<tble cellspacing=0 cellpading=0 border=0><tr><td>";
$spec_tab_2 "</td><td>";
$spec_tab_3 "</td></tr>";
$spec_tab_4 "<tr><td>";
$spec_tab_5 "</td><td>";
$spec_tab_6 "</td></tr></table>";
$submit "<input style='font-size:10;height:17;width:70' type=submit value=отправить><br />";
$refresh "<input style='font-size:10;height:17;width:70' type=reset value=стереть>";
$oform "<form name=gb method=post action=gb_update.php>";
$cform "</form>";   
if(
$ath

    while(
$msg mysql_fetch_array($ath)) {
echo 
$oform;
echo 
$t1 ;
echo (
"<textarea ROWS=1 name=name>");
echo 
$msg['name'];
echo (
"</textarea>");
echo 
"<br />";
echo 
$msg['email'];
echo 
$t2 ;
echo (
"<textarea ROWS=1 name=homepage>");
echo 
$msg['homepage'];
echo (
"</textarea>");
echo 
$t3 ;
echo (
"<textarea ROWS=1 name=gorod>");
echo 
$msg['gorod'];
echo (
"</textarea>");
echo 
$t4 ;
echo (
"<textarea ROWS=1 name=gorod>");
echo 
$msg['time'];
echo (
"</textarea>");
echo 
$t5 ;
echo 
$spec_tab_1;
echo (
"<textarea ROWS=10 COLS=40 name=soob>");
echo 
$msg['soob'];
echo (
"</textarea>");
echo 
$spec_tab_2;
echo 
"$submit";
echo 
"$refresh";
echo 
$spec_tab_3;
echo 
$spec_tab_4;
echo (
"<textarea ROWS=4 COLS=40 name=comment></textarea>");
echo 
$spec_tab_5;
echo 
$spec_tab_6;

echo 
$t6;
echo 
$cform;
    } 

else 

  echo 
"<p><b>Error: ".mysql_error()."</b></p>"
  exit(); 

?> 


Вэтом коде закосячена функция reset там по идее должна быть немного другая вещь - эта кнопочка должна удалять из базы данных выбранное сообщение, получается нужно оформить пееход на страницу с функцией DELETE?

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

   
 
 автор: WebTech   (08.11.2005 в 13:38)   письмо автору
 
   для: 10100100   (08.11.2005 в 12:53)
 

Форма передает управление скрипту gb_update.php. Похоже в нем и есть delete. А reset только чтобы форму очистить можно было. Выложи gb_update.php, посмотрим.

   
 
 автор: 10100100   (08.11.2005 в 14:07)   письмо автору
 
   для: WebTech   (08.11.2005 в 13:38)
 

вот он, дело как раз в том что я не совсем понимаю что в нём писать, чтобы он и обновлял нужную инфу и удалял ненужную...


<? 
header
("location:http://localhost/gb_on_db/redact.php");
include 
"config.php";
  
$query "INSERT INTO soob VALUES (NULL,'$name','$email','$homepage','$gorod','$soob',NOW())"


  if(!
mysql_query($query)) 
  { 

    exit(
"Ошибка - ".mysql_error()); 
  } 
?> 

   
 
 автор: WebTech   (08.11.2005 в 16:33)   письмо автору
 
   для: 10100100   (08.11.2005 в 14:07)
 

Я так понял, что у тебя все сообщения из гостевухи выводятся оптом. Потом какое-нибудь сообщение можно подправить и записать его снова. Еще ты хочешь, чтобы ненужное сообщение можно было удалить. Но, все очень запутано и удаление записи придется делать отдельно. Но все уж больно у тебя запутано :-( Сейчас подумаю, как можно переписать твои скрипты, если подождешь немного.

   
 
 автор: 10100100   (08.11.2005 в 17:26)   письмо автору
 
   для: WebTech   (08.11.2005 в 16:33)
 

ну что ж, буду благодарен.
то что запутано - эт я знаю! :)
то что отдельно делать удаление - тож знаю :) в общем буду очень благода.

   
 
 автор: WebTech   (08.11.2005 в 17:35)   письмо автору
 
   для: 10100100   (08.11.2005 в 17:26)
 

Итак, твой redact.php напишем так.


<?php
include ('config.php');
$query 'SELECT * FROM soob ORDER BY id_soob DESC';
$ath mysql_query($query);

if (
$ath)
{
// цикл сделаем с помощью for (ну, не люблю я while :-))
$recs mysql_num_rows($ath); // количество записей в базе
for ($i=1$i<$recs$i++)
{
// далее будем выводить каждую запись в форме. В форме сделаем скрытое поле 
// и в нем будем передавать id_soob, 

// с помощью которого потом определим какую запись обновить. Или удалить.
// Обновление и удаление записи будут выполнять разные скрипты
// Обновление gb_update.php, удаление записи, например, msg_delete.php
// И придется написать две формы: одну для удаления, и одну для обновления
// Да, еще. Сделаем все через через input, а soob и comment через textarea

$msg mysql_fetch_array($ath);

echo 
'<form action=gb_update.php method=post>';
echo 
'<input type=text name=name value='.$msg['name'].'><br />'
echo 
'<input type=text name=email value='.$msg['email'].'><br />'
echo 
'<input type=text name=homepage value='.$msg['homepage'].'><br />'
echo 
'<input type=text name=gorod value='.$msg['gorod'].'><br />'
echo 
'<input type=text name=time value='.$msg['time'].'><br />'
echo 
'<textarea ROWS=10 COLS=40 name=soob>'
echo 
$msg['soob'];
echo 
'</textarea>';
// Дальше вставим поле для comment 
echo '<textarea ROWS=10 COLS=40 name=comment>'
echo 
$msg['comment'];
echo 
'</textarea>';
// теперь вставим скрытое поле с id_soob 
echo '<input type=hidden name=id_soob value='.$msg['id_soob'].'><br />';
echo 
'<input type=submit value="Обновить">'// это наша кнопочка "Обновить" 
echo '<input type=reset value="Очистить">';  // это кнопочка "Очистить" (поля в форме) 
echo '</form>'
// дальше пойдет форма для удаления записи. В ней будет только скрытое поле с id_soob 
// и кнопочка
echo '<form action=msg_delete.php method=post>';
echo 
'<input type=hidden name=id_soob value='.$msg['id_soob'].'><br />';
echo 
'<input type=submit value="Удалить">'// Здесь кнопочка будет "Удалить" 
echo '</form><br />'
}
}
else

  echo 
'Error: '.mysql_error().'; 
  exit(); 


?>

Дальше у нас пойдет gb_update.php



<?php
include ('config.php');

$id_soob $_POST['id_soob'];
$name $_POST['name'];
$email $_POST['email'];
$homepage $_POST['homepage'];
$gorod $_POST['gorod'];
$soob $_POST['soob'];
$comment $_POST['comment'];
$time $_POST['time']; 

// следующий запрос обновляет данные в записи с id_soob, которое мы передали из 
// redact'a. В том числе добавляет comment, если его не было. 
$query 'UPDATE soob SET id_soob="'.$id_soob.'", name="'.$name.'", email="'.$email.'", 
homepage="'
.$homepage.'" gorod="'.$gorod.'", soob="'.$soob.'", comment="'.$comment.'", time="'.$time.'" WHERE id_soob="'.$id_soob.'"';

$ath mysql_query($query);

if (!
$ath)
   {
   echo 
'Ошибка! Не удалось обновить данные';
   exit;
   }
header ('location: redact.php'); // перенаправляем на redact.php 

?>


Теперь msg_delete.php


<?php
include ('config.php');

$id_soob $_POST['id_soob']; // выбираем id_soob 

// следующий запрос удалит запись с id_soob, который мы передали из redact.php 
$query 'DELETE FROM soob WHERE id_soob="'.$id_soob.'"';
$ath mysql_query($query);

if (!
$ath)
   {
   echo 
'Ошибка! Не удалось удалить запись';
   exit;
   }
header ('location: redact.php'); // перенаправляем на redact.php 

?>

Ну, вот, собственно говоря, и все :-) Мелочи, типа подключения к базе, разметки страницы покрасивше, наверное

сам припишешь. Попробуй мои скрипты. Пиши, если что не пойдет.

   
 
 автор: 10100100   (08.11.2005 в 17:41)   письмо автору
 
   для: WebTech   (08.11.2005 в 17:35)
 

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

   
 
 автор: 10100100   (08.11.2005 в 18:06)   письмо автору
 
   для: WebTech   (08.11.2005 в 17:35)
 

тут чёт блин косяков много, или я опять напортачил!

он в текстарее КОММЕНТ пишет вот такую вот хрень!


<!--error--><br />
<b>Notice</b>:  Undefined index:  comment in <b>z:\home\localhost\www\gb_on_db\redact.php</b> on line <b>34</b><br />
<script language=JavaScript src='/errors__/phperror_js.php'></script>

   
 
 автор: WebTech   (08.11.2005 в 18:48)   письмо автору
 
   для: 10100100   (08.11.2005 в 18:06)
 

Странно! У меня этот скрипт работает нормально. Проверь все кавычки, скобочки и знаки. Проверь, чтобы поле comment было в бд и запрос был SELECT * FROM soob ORDER BY id_soob DESC
Кстати, нашел ошибку у себя, пардон!
Строчка с for должна быть

for ($i=1; $i<=$recs; $i++)

   
 
 автор: 10100100   (09.11.2005 в 18:42)   письмо автору
 
   для: WebTech   (08.11.2005 в 18:48)
 

угумс косячокс с for я уже испраил... :)
косячок с Комментом - это всеголишь Error_Reporting(E_ALL & ~E_NOTICE); , так что теперь всё пашет отлично, разве что одно НО!
При добавлении коммента к статье скрипт возвращает "Ошибка! Не удалось обновить данные". вот, в чём косяк найти пока что не могу.

   
 
 автор: WebTech   (10.11.2005 в 17:06)   письмо автору
 
   для: 10100100   (09.11.2005 в 18:42)
 

Опять пардон! Поторопился, когда писал. Была пропущена запятая. Следует так:

$query = 'UPDATE soob SET id_soob="'.$id_soob.'", name="'.$name.'", email="'.$email.'", 
homepage="'.$homepage.'", gorod="'.$gorod.'", soob="'.$soob.'", comment="'.$comment.'", time="'.$time.'" WHERE id_soob="'.$id_soob.'"'; 

Запятая была пропущена в фрагменте:

... homepage="'.$homepage.'" gorod="'.$gorod ...

сразу за всем не уследишь. Отладка всегда так происходит :-) Попробуй исправленный код.

   
 
 автор: 10100100   (10.11.2005 в 17:57)   письмо автору
 
   для: WebTech   (10.11.2005 в 17:06)
 

ммм.. понятно... но он всёравно не хочет добавлять! :((

а про отладку эт да, написать скрипт - 20% рабочего времени Кодера, оставшиеся 80 отладка и кофе :)))))

   
 
 автор: him   (11.11.2005 в 22:14)   письмо автору
 
   для: 10100100   (10.11.2005 в 17:57)
 

Да, у меня тоже не обновляет запись. И еще при удалении записи ругается
на вот эту конструкцию:
header ('location: redact.php');
Пишет:
Warning: Cannot modify header information - headers already sent by (output started at c:\Apache\htdocs\config.php:28) in c:\Apache\htdocs\msg_delete.php on line 15

   
 
 автор: cheops   (11.11.2005 в 23:52)   письмо автору
 
   для: him   (11.11.2005 в 22:14)
 

Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.

http://www.softtime.ru/group/id_group=12

   
 
 автор: WebTech   (12.11.2005 в 08:29)   письмо автору
 
   для: cheops   (11.11.2005 в 23:52)
 

Судя по всему (по сообщению об ошибке) что-то выводится в файле config.php (см. сообщение cheops'a), а ничего не должно. Надо тот вывод убрать или вообще убрать строку с include.
Или еще лучше - запишем в config.php подключение к бд:

<?php
// здесь только свои данные поставьте, хост, логин и пароль, и имя базы

$db mysql_connect('localhost''root''');
if (!
$db
   {
   echo 
'Не удалось подключиться к серверу базы данных';
   exit;
   }
mysql_select_db('gbook');

?>

Проверил все еще раз - все работает :-) удаляет и обновляет.

   
 
 автор: 10100100   (12.11.2005 в 08:38)   письмо автору
 
   для: WebTech   (12.11.2005 в 08:29)
 

странно - а меня вообще никак не обновляет - удалять - удаляет а обновлять не хотит! :(

   
 
 автор: him   (12.11.2005 в 11:33)   письмо автору
 
   для: 10100100   (12.11.2005 в 08:38)
 

Я похоже понял: в коде перед переменными присутствовали знаки @@@@.
Я думал, что это объявление каких то глобалов или еще чего нидь, а потом убрал их и все пошло!!!!

   
 
 автор: cheops   (12.11.2005 в 11:45)   письмо автору
 
   для: him   (12.11.2005 в 11:33)
 

Это подавление ошибок http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=4389 - при отладки их лучше всегда удалять, иначе можно долго искать ошибку...

   
 
 автор: 10100100   (12.11.2005 в 13:04)   письмо автору
 
   для: cheops   (12.11.2005 в 11:45)
 

тьфу ёмаё, я ж хотел их убрать... точно.. ща попробую!

   
 
 автор: him   (13.11.2005 в 11:06)   письмо автору
 
   для: cheops   (11.11.2005 в 23:52)
 

Куки я не создаю. Создает мой localhost их или нет - я не знаю.
У меня: скрипт№1 - вывод записей из одной таблицы с кнопкой "Обновить" в каждой записи, которая запускает скрипт№2 обновления конкретной записи в таблице.
Мне надо после завершения скрипта№2 запустить скрипт №1 и тем самым обновить значения. Что надо применить в конце второго скрипта, чтобы запустить первый заново?
Походил по Вашим ссылкам но так и не понял секрет кухни.
Вроде все просто - а нет!!!

   
 
 автор: 10100100   (13.11.2005 в 13:03)   письмо автору
 
   для: him   (13.11.2005 в 11:06)
 

так это... в конце второго скрипт ставишь ХЕАДЕР и всё... или я чего то не понимаю?

   
 
 автор: him   (13.11.2005 в 13:07)   письмо автору
 
   для: 10100100   (13.11.2005 в 13:03)
 

На

header ('location: redact.php');

Ругается:
Warning: Cannot modify header information - headers already sent by (output started at c:\Apache\htdocs\config.php:28) in c:\Apache\htdocs\msg_update.php on line 15
У тебя нет?

   
 
 автор: WebTech   (13.11.2005 в 13:15)   письмо автору
 
   для: him   (13.11.2005 в 13:07)
 

Так читай сообщение об ошибке. Там написано, что что-то выводится в файле config.php. Смотри внимательно, это может быть даже пробел. Или выложи тот config, я посмотрю.

   
 
 автор: him   (13.11.2005 в 13:28)   письмо автору
1.9 Кб
 
   для: WebTech   (13.11.2005 в 13:15)
 

Выложил config.php, redact.php, gb_update.php

   
 
 автор: cheops   (13.11.2005 в 13:45)   письмо автору
 
   для: him   (13.11.2005 в 13:28)
 

В конце файла config.php после ?> стоит пробел - его необходимо убрать именно он вызывает эту ошибку.

   
 
 автор: him   (13.11.2005 в 13:58)   письмо автору
 
   для: cheops   (13.11.2005 в 13:45)
 

Заработало!!! Спасибо огромное!!!

   
 
 автор: WebTech   (13.11.2005 в 14:16)   письмо автору
 
   для: cheops   (13.11.2005 в 13:45)
 

Да, cheops, ты был первый :-) Действительно, есть пробел.

   
Rambler's Top100
вверх

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