|
|
|
| Создаю гостевуху и вот добрался до панели администратора и не знаю как лучше производить редактирование сообщений и добавление к ним комментариев, а так же удаление сообщений.
это файл 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?
Не знаю что использовать для обновления выбранного сообщения... :( и сохранения коммента. | |
|
|
|
|
|
|
|
для: 10100100
(08.11.2005 в 12:53)
| | Форма передает управление скрипту gb_update.php. Похоже в нем и есть delete. А reset только чтобы форму очистить можно было. Выложи gb_update.php, посмотрим. | |
|
|
|
|
|
|
|
для: 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());
}
?>
|
| |
|
|
|
|
|
|
|
для: 10100100
(08.11.2005 в 14:07)
| | Я так понял, что у тебя все сообщения из гостевухи выводятся оптом. Потом какое-нибудь сообщение можно подправить и записать его снова. Еще ты хочешь, чтобы ненужное сообщение можно было удалить. Но, все очень запутано и удаление записи придется делать отдельно. Но все уж больно у тебя запутано :-( Сейчас подумаю, как можно переписать твои скрипты, если подождешь немного. | |
|
|
|
|
|
|
|
для: WebTech
(08.11.2005 в 16:33)
| | ну что ж, буду благодарен.
то что запутано - эт я знаю! :)
то что отдельно делать удаление - тож знаю :) в общем буду очень благода. | |
|
|
|
|
|
|
|
для: 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
?>
|
Ну, вот, собственно говоря, и все :-) Мелочи, типа подключения к базе, разметки страницы покрасивше, наверное
сам припишешь. Попробуй мои скрипты. Пиши, если что не пойдет. | |
|
|
|
|
|
|
|
для: WebTech
(08.11.2005 в 17:35)
| | о хо хо, спасибо.. буду разбираться - спасибки огроменное. буду запоминать и делать выводы для себя. | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: 10100100
(08.11.2005 в 18:06)
| | Странно! У меня этот скрипт работает нормально. Проверь все кавычки, скобочки и знаки. Проверь, чтобы поле comment было в бд и запрос был SELECT * FROM soob ORDER BY id_soob DESC
Кстати, нашел ошибку у себя, пардон!
Строчка с for должна быть
for ($i=1; $i<=$recs; $i++)
|
| |
|
|
|
|
|
|
|
для: WebTech
(08.11.2005 в 18:48)
| | угумс косячокс с for я уже испраил... :)
косячок с Комментом - это всеголишь Error_Reporting(E_ALL & ~E_NOTICE); , так что теперь всё пашет отлично, разве что одно НО!
При добавлении коммента к статье скрипт возвращает "Ошибка! Не удалось обновить данные". вот, в чём косяк найти пока что не могу. | |
|
|
|
|
|
|
|
для: 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 ...
|
сразу за всем не уследишь. Отладка всегда так происходит :-) Попробуй исправленный код. | |
|
|
|
|
|
|
|
для: WebTech
(10.11.2005 в 17:06)
| | ммм.. понятно... но он всёравно не хочет добавлять! :((
а про отладку эт да, написать скрипт - 20% рабочего времени Кодера, оставшиеся 80 отладка и кофе :))))) | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: him
(11.11.2005 в 22:14)
| | Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.
http://www.softtime.ru/group/id_group=12 | |
|
|
|
|
|
|
|
для: 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');
?>
|
Проверил все еще раз - все работает :-) удаляет и обновляет. | |
|
|
|
|
|
|
|
для: WebTech
(12.11.2005 в 08:29)
| | странно - а меня вообще никак не обновляет - удалять - удаляет а обновлять не хотит! :( | |
|
|
|
|
|
|
|
для: 10100100
(12.11.2005 в 08:38)
| | Я похоже понял: в коде перед переменными присутствовали знаки @@@@.
Я думал, что это объявление каких то глобалов или еще чего нидь, а потом убрал их и все пошло!!!! | |
|
|
|
|
|
|
|
для: him
(12.11.2005 в 11:33)
| | Это подавление ошибок http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=4389 - при отладки их лучше всегда удалять, иначе можно долго искать ошибку... | |
|
|
|
|
|
|
|
для: cheops
(12.11.2005 в 11:45)
| | тьфу ёмаё, я ж хотел их убрать... точно.. ща попробую! | |
|
|
|
|
|
|
|
для: cheops
(11.11.2005 в 23:52)
| | Куки я не создаю. Создает мой localhost их или нет - я не знаю.
У меня: скрипт№1 - вывод записей из одной таблицы с кнопкой "Обновить" в каждой записи, которая запускает скрипт№2 обновления конкретной записи в таблице.
Мне надо после завершения скрипта№2 запустить скрипт №1 и тем самым обновить значения. Что надо применить в конце второго скрипта, чтобы запустить первый заново?
Походил по Вашим ссылкам но так и не понял секрет кухни.
Вроде все просто - а нет!!! | |
|
|
|
|
|
|
|
для: him
(13.11.2005 в 11:06)
| | так это... в конце второго скрипт ставишь ХЕАДЕР и всё... или я чего то не понимаю? | |
|
|
|
|
|
|
|
для: 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
У тебя нет? | |
|
|
|
|
|
|
|
для: him
(13.11.2005 в 13:07)
| | Так читай сообщение об ошибке. Там написано, что что-то выводится в файле config.php. Смотри внимательно, это может быть даже пробел. Или выложи тот config, я посмотрю. | |
|
|
|
|
 1.9 Кб |
|
|
для: WebTech
(13.11.2005 в 13:15)
| | Выложил config.php, redact.php, gb_update.php | |
|
|
|
|
|
|
|
для: him
(13.11.2005 в 13:28)
| | В конце файла config.php после ?> стоит пробел - его необходимо убрать именно он вызывает эту ошибку. | |
|
|
|
|
|
|
|
для: cheops
(13.11.2005 в 13:45)
| | Заработало!!! Спасибо огромное!!! | |
|
|
|
|
|
|
|
для: cheops
(13.11.2005 в 13:45)
| | Да, cheops, ты был первый :-) Действительно, есть пробел. | |
|
|
|