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

Форум MySQL

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

 

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

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

тема: Дата в БД
 
 автор: solomusic   (25.08.2008 в 14:14)   письмо автору
 
 

Здравствуйте, у меня возникла проблемка...дело в том, что вот как-то не приходилось сталкиваться с датой в БД. Короче говоря... как прописывать дату на php я примерно! знаю... но я не могу разобраться, как вот сделать так, чтоб после заполнения формы и отправки инфы в БД дата прописывалась в самой БД... помогите... ибо что-то я не могу вообще с этой датой разобраться...

  Ответить  
 
 автор: BinLaden   (25.08.2008 в 14:16)   письмо автору
 
   для: solomusic   (25.08.2008 в 14:14)
 

Какой тип поля, в которой находится дата? Как пытаетесь добавить запись?

  Ответить  
 
 автор: solomusic   (25.08.2008 в 14:30)   письмо автору
 
   для: BinLaden   (25.08.2008 в 14:16)
 

хм... короче говоря... есть форма заполнения, с каждого input select и т.д. данные отправляются в БД. В БД... есть строка с типом DATE, и именем date, при нажатии на добавить, данные отправляются в БД. вот...

  Ответить  
 
 автор: BinLaden   (25.08.2008 в 14:37)   письмо автору
 
   для: solomusic   (25.08.2008 в 14:30)
 

Дата должна быть приведена к формату YYYY-MM-DD.

  Ответить  
 
 автор: solomusic   (25.08.2008 в 14:40)   письмо автору
 
   для: BinLaden   (25.08.2008 в 14:37)
 

а как? как это делается, я же говорю дату я ни разу сама не писала... и знаю только примерно! структуру написания на php и все.... хотя... постойте... вот в самой БД... есть год месяц и дата... только стоит 0000-00-00, а как вместо ноликов выставить дату???

  Ответить  
 
 автор: Trianon   (25.08.2008 в 14:43)   письмо автору
 
   для: solomusic   (25.08.2008 в 14:40)
 

Как дата вводится в форме, и в каком виде она видна в php?

  Ответить  
 
 автор: solomusic   (25.08.2008 в 14:45)   письмо автору
 
   для: Trianon   (25.08.2008 в 14:43)
 

хм... только в БД пишеться 0000-00-00, а как ее писать я не знаю... не знаю как прописывать дату... вывод даты просто береться из БД... а как вводить ее в БД не знаю...

  Ответить  
 
 автор: Trianon   (25.08.2008 в 15:02)   письмо автору
 
   для: solomusic   (25.08.2008 в 14:45)
 

В БД записывать нужно в виде строки '2008-08-25'
Если Вы пытаетесь вводить такое, а в таблице оказываются нули - показывайте код скрипта.
Впрочем - показывайте в любом случае.

  Ответить  
 
 автор: solomusic   (25.08.2008 в 15:11)   письмо автору
 
   для: Trianon   (25.08.2008 в 15:02)
 

хм... не ну я понимаю что в БД.. .нужно записывать текующую дату, это можно зделать и если
добавил информацию, а потом отредактировать ее, поставив в дате просто NOW, но как
отправлять дату, чотоб при отправке онформации из формы добавлялась(записывалась) дата
я не знаю... хотите увидеть форму отправки, пожалуйста.

<table border="0" cellpadding="0" cellspacing="0" width="100%">
<?php
if(isset($_POST['save'])){
mysql_connect("localhost","root","");
mysql_select_db("board");
$sql="INSERT INTO `b` ( `id`, `name`, `kto`, `rubric`, `pdrubric`, `city`, `area`, `street`, `cena`, `val`, 
`phone`, `email`, `det`, `srok`) VALUES ( '', '"
.$_POST['name']."', '".$_POST['kto']."', '".$_POST['rubric']."', 
'"
.$_POST['pdrubric']."', '".$_POST['city']."', '".$_POST['area']."', '".$_POST['street']."', '".$_POST['cena']."', 
'"
.$_POST['val']."', '".$_POST['phone']."', '".$_POST['email']."', '".$_POST['det']."', '".$_POST['srok']."')";
$res mysql_query($sql);
}
?>
<form method="POST" action="?">
<input type="hidden" name="save" value="1">
<tr>
<td style="width:30%">Ваше имя<font color="#ff0000">*</font>:</td>
<td style="width:60%"><table width="100%"><tr><td><input type="Text" name="name" 
style="width:100%" value=""/></td></tr></table>
</td></tr>
<tr><td><hr/></td></tr>
...........................................................
<tr><td>Описание<font color="#ff0000">*</font>:</td>
<td><table width="100%">
<tr><td><textarea rows="7" style="width:100%;" name="det" title="текст объявления" cols="40"></
textarea></td></tr></table>
</td></tr>
<tr><td><hr/></td></tr>
<tr><td>Срок публикации:</td>
<td><table width="100%"><tr><td>
<select name="srok">
<option value="1 день">1 день</option>
<option value="3 дня">3 дня</option>
<option value="неделя">неделя</option>
<option value="2 недели">2 недели</option>
<option value="3 недели">3 недели</option>
<option value="месяц">месяц</option>
</select></td></tr></table>
</td></tr>
<tr><td><hr/></td></tr>
<tr id="bdM65"><td align="center" colspan="2" class="manTdBut" id="bdM66">
<input type="submit" onClick="go();" value="добавить" /> &nbsp;<input class="manFlRst" 
type="reset" id="bdF23" value="очистить" onclick="" />
</td></tr>
</table>
</form>

хм... совсем забыла... это ведь нужно явно привьязать к сроку публикации... сколько
сообщение должно быть в базе... здесь я вообще ни как... HELP...

  Ответить  
 
 автор: BinLaden   (25.08.2008 в 15:21)   письмо автору
 
   для: solomusic   (25.08.2008 в 15:11)
 

Естественно, MySQL не понимает значений "1 день", "3 недели", "месяц" и т.п.

Уже говорилось к какому виду нужно привести дату. "1 день" - это, согласитесь, не дата, а промежуток времени.
Как вариант, можно сделать что-то вроде

<?php
$term 
= isset( $_POST['srok'] ) ? (string) $_POST['srok'] : '';

switch( 
$term )
{
    case 
'1 день':
    
$unix_timestamp strtotime('+1 day');
    break;

    case 
'3 дня':
    
$unix_timestamp strtotime('+3 days');
    break;

    case 
'неделя':
    
$unix_timestamp =  strtotime('+1 week');
    break;

    
# ...

    
case 'месяц':
    
$unix_timestamp strtotime('+1 month');
    break;

    default:

    
$unix_timestamp time();

    break;
}

$date date('Y-m-d'$unix_timestamp);

?>


А потом уже записывать в БД содержимое $date

  Ответить  
 
 автор: solomusic   (25.08.2008 в 15:30)   письмо автору
 
   для: BinLaden   (25.08.2008 в 15:21)
 

хм...я Вас поняла, вот только подскажите еще... как вот этот код прицепить к тому что написано у меня??? и записывать в БД содержимое, это... хм... здесь еще что-то нужно для даты??? а что? помогите а... я ведь только учусь всему... но честно быстро схватываю, так что больше еще раз подобные вопросы я задавать не буду...

  Ответить  
 
 автор: Trianon   (25.08.2008 в 15:34)   письмо автору
 
   для: solomusic   (25.08.2008 в 15:11)
 

И какое поле формата DATE ?

Если проблема в том, чтобы срок переделать в конкретную дату, можно поступить как-то так:

селектор срока нужно минимизоровать... например так:
<select name="srok">
<option value="1">1 день</option>
<option value="3">3 дня</option>
<option value="7">неделя</option>
<option value="14">2 недели</option>
<option value="21">3 недели</option>
<option value="-1">месяц</option>
</select>

положительные значения будут задавать интервал в днях, отрицатеьные в месяцах.

Обработка в php будет примерно такая:
<? 

$srok 
intval(@$_POST['srok']);
if(
$srok 0$srok "NOW() + INTERVAL $srok DAY";
else if(
$srok 0) { $srok "NOW() + INTERVAL " . (-$srok) . " MONTH" };
else   
$srok "NOW()";

$sql="INSERT INTO `b` 
   ( `id`, `name`, `kto`, `rubric`, `pdrubric`, `city`, `area`, `street`, `cena`, `val`, `phone`, `email`, `det`, `srok`)
     VALUES ( '', '"
.$_POST['name']."', '".$_POST['kto']."', '".$_POST['rubric']."', '".$_POST['pdrubric']."',
       '"
.$_POST['city']."', '".$_POST['area']."', '".$_POST['street']."', '".$_POST['cena']."', '".$_POST['val']."',
       '"
.$_POST['phone']."', '".$_POST['email']."', '".$_POST['det']."', $srok)";



если я правильно Вас понял, и поле srok в таблице действительно формата DATE

  Ответить  
 
 автор: solomusic   (25.08.2008 в 15:44)   письмо автору
 
   для: Trianon   (25.08.2008 в 15:34)
 

да, Вы правильно поняли, но, при выводе информации дата выводиться та, когда именно добавили информацию. Поэтому есть еще одно поле date тип, DATE. Вот. А как для этого... как сделать вывод текущей даты? И еще. Вы мне помогли разобраться с тем, как удалять информацию из БД http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=56861&page=2, а как сделать так, чтоб информация удалялась сама по истечению срока?

  Ответить  
 
 автор: Trianon   (25.08.2008 в 16:02)   письмо автору
 
   для: solomusic   (25.08.2008 в 15:44)
 

С удовольствием, но ... наверное стоит
1. описать, какие есть поля в таблице, какого они типа, и что конкретно хранят. Хотя бы те, что вовлечены в процесс.
2. показать, в каком виде на странице Вы хотите эту дату видеть. Если 2008-08-25 не устраивает.
3. исправить сообщение (25.08.2008 в 15:11) так, чтобы в ленте ответов не срывало крышу, и чтоб ответы можно было читать, не двигая окно влево вправо. То есть добавить переносов строк.
Между прочим с исх.кодом со строками разумного размера будет куда удобнее работать.

А что до автоматического удаления, то запрос
DELETE FROM `b` WHERE `дата_удаления` < NOW() 

должен решить проблему.
Запрос нужно запускать либо в начале скрипта, где используются данные таблицы, либо отдельно через CRON.

  Ответить  
 
 автор: solomusic   (25.08.2008 в 16:25)   письмо автору
 
   для: Trianon   (25.08.2008 в 16:02)
 

ок. так
1.) есть поля: id - думаю его описывать не нужно,
name - тип text, вводиться имя пользователя
kto - тип text, выбор из input type="Radio"
rubric - тип text, выбор из input type="Radio"
pdrubric - тип text, выбор из select
city - тип text, выбор из select
area - тип text, выбор из select
street - тип text, ввод улицы
cena - тип text, ввод цены
val - тип text, выбор из select валюты
phone - тип text, ввод телефона, макс 30 символов
email - тип text, ввод электронного адреса
det - тип text, ввод полной информации
хм... ну если в виде просто даты не устраивает, можно в виде даты и времени... ну не знаю...
главное чтоб выводилась сама дата... а дальше я разберусь. Так... кажется все сделала что Вы
просили....
а и кстати, вот по поводу
DELETE FROM `b` WHERE `дата_удаления` < NOW()

Вы мне прошлый раз говорили что если подставлять $res, то эта переменная не
определена, а как тогда быть с автоудалением, если не вот так подставлять
DELETE FROM `b` WHERE ` ".$res['srok']."` < NOW()
, то как?

  Ответить  
 
 автор: Trianon   (25.08.2008 в 17:40)   письмо автору
 
   для: solomusic   (25.08.2008 в 16:25)
 

>хм... ну если в виде просто даты не устраивает, можно в виде даты и времени... ну не знаю...
>главное чтоб выводилась сама дата... а дальше я разберусь. Так... кажется все сделала что Вы
>просили....

пример.
таблица с ключом, текстовым полем и датой:
CREATE TABLE `tbl` (
  `Id` int(11) NOT NULL auto_increment,
  `txt` TEXT default NULL ,
  `expired` DATE  default NULL ,
  PRIMARY KEY  (`Id`)
);

добавляем записи
INSERT INTO tbl (txt, expired) VALUES ('прям сейчас', NOW() );
INSERT INTO tbl (txt, expired) VALUES ('позавчера', (NOW() - INTERVAL 2 DAY)  );
INSERT INTO tbl (txt, expired) VALUES ('послезавтра', (NOW() + INTERVAL 2 DAY)  );
INSERT INTO tbl (txt, expired) VALUES ('через три месяца', (NOW() + INTERVAL 3 MONTH)  );
INSERT INTO tbl (txt, expired) VALUES ('конкретного числа', '2008-09-15');
и т.д.
запрос
DELETE FROM `b` WHERE `expired` < NOW()

удалит строки с прошедшими датами.

по поводу того, как выводить.
Так и выводить
<? 
$sql 
"SELECT * FROM tbl ORDER BY expired";
$res mysql_query($sql);
if(!
$res) exit("error in $sql "mysql_error());
while(
$row mysql_fetch_assoc($res))
{
    
$id $row['id'];
    
$expired $row['expired'];
    
$txt $row['txt'];
    echo 
"$id. -- $expired -- "htmlspecialchars($txt) . "<br />\r\n";
}


если что-то непонятно - готов пояснить.

  Ответить  
 
 автор: solomusic   (25.08.2008 в 19:58)   письмо автору
 
   для: Trianon   (25.08.2008 в 17:40)
 

хм... так, стоп, запрос
INSERT INTO tbl (txt, expired) VALUES ('прям сейчас', NOW() );

это для добавки информации в ВАШУ БД, такой запрос я могу Вам сделать и не один, но я не понимаю как причем здесь то что я у ВАС спрашивала? ведь это запрос в самой БД, с готовым ответом... А как это применить к моему случаю, я что-то не совсем ВАС понимаю... Как данное применить к запросу на добавку? и удаление... Вы меня что-то запутали.... %)

  Ответить  
 
 автор: Trianon   (25.08.2008 в 20:09)   письмо автору
 
   для: solomusic   (25.08.2008 в 19:58)
 

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

  Ответить  
 
 автор: solomusic   (25.08.2008 в 20:13)   письмо автору
 
   для: Trianon   (25.08.2008 в 20:09)
 

а ну.... упс... извините ;)
первое поле srok - тип date, записывается дата когда нужно удалить
и второе date - тип date, текущая дата...
или Вам просто кинуть структуру таблицы? из БД?

CREATE TABLE `b` (
  `id` int(11) NOT NULL auto_increment,
  `name` text NOT NULL,
  `kto` text NOT NULL,
  `rubric` text NOT NULL,
  `pdrubric` text NOT NULL,
  `city` text NOT NULL,
  `area` text NOT NULL,
  `street` text NOT NULL,
  `cena` text NOT NULL,
  `val` text NOT NULL,
  `phone` text NOT NULL,
  `email` text NOT NULL,
  `det` text NOT NULL,
  `srok` date NOT NULL,
  `date` date NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=28 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=28 ;

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

так бы сразу.

И чем не подходит запрос
DELETE FROM `b` WHERE `srok` <= NOW()

?

При добавлении записи полю `date` нужно присвоить NOW()

А вывод на страницу - точно так же как любую другую строку.

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

хм... ну я понимаю, что date нужно присваивать now, но как, как оно должно выглядеть и
присваиваться??? просто заходить в БД и там редактировать эт знаю а так прописывать... что-
то не могу понять
да и еще... по поводу strok... удаление как понимаю на странице вывода информации а не на
добавке... тогда как... ведь просто
DELETE FROM `b` WHERE `srok` <= NOW()

оно как я понимаю ничег оне даст... или я не так понимаю????

  Ответить  
 
 автор: Trianon   (25.08.2008 в 20:37)   письмо автору
 
   для: solomusic   (25.08.2008 в 20:30)
 

на странице вывода.
и на странице добавки тоже можно продублировать.

Как - просто так?
Вот так
mysql_query("DELETE FROM `b` WHERE `srok` <= NOW()");
уже даст

вот так даже ошибки проконтролирует
if(!($res = mysql_query($sql = "DELETE FROM `b` WHERE `srok` <= NOW()")))
  exit("error in $sql" . mysql_error());

  Ответить  
 
 автор: Trianon   (25.08.2008 в 20:40)   письмо автору
 
   для: Trianon   (25.08.2008 в 20:37)
 

<?
$sql
="INSERT INTO `b` 
   ( `id`, ...... , `srok`, `date`)
     VALUES ( NULL, ...., 
$srok, NOW() )";
if(!(
$res mysql_query($sql)))
  exit(
"error in $sqlmysql_error()); 

  Ответить  
 
 автор: solomusic   (25.08.2008 в 20:42)   письмо автору
 
   для: Trianon   (25.08.2008 в 20:37)
 

хм... с удалением я поняла... а дата... текущая дата??? как с ней быть то?когда просто пишу в конце now(),добавка вообще не работает... :((

  Ответить  
 
 автор: Trianon   (25.08.2008 в 20:49)   письмо автору
 
   для: solomusic   (25.08.2008 в 20:42)
 

Какая ошибка выходит?

  Ответить  
 
 автор: solomusic   (25.08.2008 в 20:51)   письмо автору
 
   для: Trianon   (25.08.2008 в 20:49)
 

error in INSERT INTO `b` ( `id`, `name`, `kto`, `rubric`, `pdrubric`, `city`, `area`, `street`, `cena`, `val`,
`phone`, `email`, `det`, `srok`) VALUES ( '', 'ы', '', '', 'Офисы', 'Киев', '-Выбрать район-', 'ы', 'ы', 'y.e.', 'ы',
'ы', 'ы', NOW() + INTERVAL 3 DAY, NOW())Column count doesn't match value count at row 1 - вот

  Ответить  
 
 автор: Trianon   (25.08.2008 в 20:54)   письмо автору
 
   для: solomusic   (25.08.2008 в 20:51)
 

в список полей после `srok` нужно было дописать , `date`

а так сервер отвечает, что у Вас число полей не соответствует числу значений. Разве не так?

  Ответить  
 
 автор: solomusic   (25.08.2008 в 20:59)   письмо автору
 
   для: Trianon   (25.08.2008 в 20:54)
 

да совершенно верно... у меня есть еще 2 маленьких вопроса к вам...
первое, это случайно не знаете как сделать переход на другую страницу при нажатии добавить... короче говоря переадресация... это наверное она должна быть типа через 5 секунд... но в общем... даже если и без этого... как перейти на другую страницу , к примеру по старинке index.php, после нажатия добавить...?

  Ответить  
 
 автор: Trianon   (25.08.2008 в 21:05)   письмо автору
 
   для: solomusic   (25.08.2008 в 20:59)
 

Вообще-то если по уму скрипты писать, то она должна быть а) сразу и б) после обработки любого POST-запроса. Хотя большинство этимм пренебрегают.
header("Location: index.php");


А весь вывод на страницу должен происходить уже после переадресации.

  Ответить  
 
 автор: solomusic   (25.08.2008 в 21:08)   письмо автору
 
   для: Trianon   (25.08.2008 в 21:05)
 

если я Вас правильно поняла, то
header("Location: index.php");

нужно написать после
<form></form>

<?php
header
("Location: index.php");
?>

так что-ли?

  Ответить  
 
 автор: Trianon   (25.08.2008 в 21:24)   письмо автору
 
   для: solomusic   (25.08.2008 в 21:08)
 

нет. не так.
Сперва взглянем на форму:
У Вас написано в теге <form method="POST" action="?">
Если говорить скомканно, то этот вопрос в аатрибуте action это частный случай адреса страницы с обработчиком формы, означающий, что данные отправленной формы будет обрабатывать тот же самый скрипт, который её (форму) рисовал.
У Вас и рисует форму (на первом вызове GET) и обрабатывает данные формы (на втором вызове POST) один и тот же скрипт.

В общем случае либо сами скрипты , либо параметры их вызова - отличаются.
Точно также как скрипт, на который делать переадресацию - отличается от первых двух.
Итого мы имеем три скрипта, грубо говоря
1. s1.php , который рисует форму <form action=s2.php>....
2. s2.php, который берет всё из $_POST[], проверяет на вшивость, заталкивает куда надо (в таблицы в сессии или еще куда) и ни слова не выводя на экран, делает переадресацию header("Location: s3.php");
3. s3.php - выводит страницу, на которой пользователь видит, что данные, которые он набирал в форме, системой обработаны , учтены, добавлены и т.п..

Это джентельменский минимум. Хотя в реале 2-й шаг часто неряшливо пропускают.

Ну и если есть желание, можно добавить в начало s3.php задержку переброса спустя 5 секунд куда-то еще
header("Refresh: 5; url=s4.php");

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

  Ответить  
 
 автор: solomusic   (25.08.2008 в 21:35)   письмо автору
 
   для: Trianon   (25.08.2008 в 21:24)
 

да, но все же... я не понимаю... вот смотрите... Вы говорите, что выполняется и post и get.
Но где Вы видите GET? И потом... я не понимаю, что мне делать с этим header... куда его
и к чему... его свойства я поняла...
я что-то вообще не могу сообразить то что Вы написали... то ли из-за того что я сейчас
простужена и к вечеру чувствую себя не очень хорошо... то ли... Вы не совсем понятно
написали...

  Ответить  
 
 автор: Trianon   (25.08.2008 в 21:47)   письмо автору
 
   для: solomusic   (25.08.2008 в 21:35)
 

Я говорил, что выполняется GET и POST.
Когда Вы набираете адрес скрипта в строке браузера -
браузер передает серверу запрос GET,

Сервер выполняет скрипт, передает браузеру страницу с формой.

Браузер получает страницу, отрисовывает форму.

Форму Вы заполняете , нажимаете кнопку submit

Браузер передает серверу вместе с даннывми формы запрос POST к скрипту, адрес которого берет из атрибута action формы.

Сервер выполняет запрос, запоминая переданные в форме данные, и путем функции header("Location: ... ") возвращает браузеру отклик с [пустой] страницей, в заголовке которой стоит поле Location: адрес_очередного_GET_запроса

Браузер передает серверу запрос GET к скрипту из поля Location ,

Сервер формирует страницу с результатами (например, выводит получившуюся таблицу в html) и отдает её браузеру.

Браузер отрисовывает таблицу.

как-то так.

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

  Ответить  
 
 автор: solomusic   (25.08.2008 в 21:51)   письмо автору
 
   для: Trianon   (25.08.2008 в 21:47)
 

а теперь понятно... Спасибо Вам большое что объяснили мне это.... но все же... что мне делать с этим
header("Location: index.php"); 
Вы ведь уже наверное знаете примерно весь код который у меня написан... куда его писать и как?

  Ответить  
 
 автор: Trianon   (25.08.2008 в 21:58)   письмо автору
 
   для: solomusic   (25.08.2008 в 21:51)
 

Поскольку файл у Вас начинается со строк
<table border="0" cellpadding="0" cellspacing="0" width="100%">
(а может и еще чего-нибудь выше этого) , то прямо так в имеющийся текст этот вызов не затолкнешь. Толку не будет.

Надо разбить Этот файл на два(или три) разных. Как минимум отделить вывод формы и таблицы от сохранения данных в БД. Тогда вызов header(Location ) ляжет сразу за успешным исполнением оператора UPDATE.

  Ответить  
 
 автор: solomusic   (25.08.2008 в 22:10)   письмо автору
 
   для: Trianon   (25.08.2008 в 21:58)
 

ну вот... я полностью разбила страничку... на окружение и сама добавка (форма)
<?php
include "a.php";
?>
<?php
if(isset($_POST['save'])){
mysql_connect("localhost","root","");
mysql_select_db("board");
$srok intval(@$_POST['srok']); 
if(
$srok 0$srok "NOW() + INTERVAL $srok DAY"
else if(
$srok 0$srok "NOW() + INTERVAL $srok MONTH"
else   
$srok "NOW()";
$sql="INSERT INTO `b` ( `id`, `name`, `kto`, `rubric`, `pdrubric`, `city`, `area`, `street`, `cena`, `val`, 
`phone`, `email`, `det`, `srok`, `date`) VALUES ( '', '"
.$_POST['name']."', '".$_POST['kto']."', '".$_POST
['rubric']."', '".$_POST['pdrubric']."', '".$_POST['city']."', '".$_POST['area']."', '".$_POST['street']."', '".$_POST
['cena']."', '".$_POST['val']."', '".$_POST['phone']."', '".$_POST['email']."', '".$_POST['det']."', $srok, NOW
())"
;
if(!(
$res mysql_query($sql))) 
  exit(
"error in $sqlmysql_error()); 
}
?>
<form method="POST" action="?">
<input type="hidden" name="save" value="1">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="width:30%">Ваше имя<font color="#ff0000">*</font>:</td>
<td style="width:60%"><table width="100%"><tr><td><input type="Text" name="name" style="width:100%" value=""/></td></tr></table>
</td></tr>
............
<tr><td><hr/></td></tr>
<tr id="bdM65"><td align="center" colspan="2" class="manTdBut" id="bdM66">
<input type="submit" value="добавить" /> &nbsp;<input class="manFlRst" type="reset" id="bdF23" 
value="очистить" onclick="" />
</td></tr>
</table>
</form>
<?php
include "b.php";
?>

что теперь???

  Ответить  
 
 автор: Trianon   (25.08.2008 в 22:20)   письмо автору
 
   для: solomusic   (25.08.2008 в 22:10)
 

Странно как-то разбили...
Я вижу разбиение таким:

Форма:
<?php  // ==== файл formb.php =====

include "a.php";

<
form method="POST" action="insertb.php">
<
input type="hidden" name="save" value="1">
<
table border="0" cellpadding="0" cellspacing="0" width="100%">
<
tr>
<
td style="width:30%">Ваше имя<font color="#ff0000">*</font>:</td>
<
td style="width:60%"><table width="100%"><tr><td><input type="Text" name="name" style="width:100%" value=""/></td></tr></table>
</
td></tr>
............
<
tr><td><hr/></td></tr>
<
tr id="bdM65"><td align="center" colspan="2" class="manTdBut" id="bdM66">
<
input type="submit" value="добавить" /> &nbsp;<input class="manFlRst" type="reset" id="bdF23" 
value="очистить" onclick="" />
</
td></tr>
</
table>
</
form>
<?
php
include "b.php";
?> 


Обработчик:

<?php  // ==== Файл:  insertb.php ==== 
if(isset($_POST['save'])){
mysql_connect("localhost","root","");
mysql_select_db("board");
$srok intval(@$_POST['srok']); 
if(
$srok 0$srok "NOW() + INTERVAL $srok DAY"
else if(
$srok 0$srok "NOW() + INTERVAL $srok MONTH"
else   
$srok "NOW()";
$sql="INSERT INTO `b` ( `id`, `name`, `kto`, `rubric`, `pdrubric`, `city`, `area`, `street`, `cena`, `val`, 
`phone`, `email`, `det`, `srok`, `date`) VALUES ( '', '"
.$_POST['name']."', '".$_POST['kto']."', '".$_POST
['rubric']."', '".$_POST['pdrubric']."', '".$_POST['city']."', '".$_POST['area']."', '".$_POST['street']."', '".$_POST
['cena']."', '".$_POST['val']."', '".$_POST['phone']."', '".$_POST['email']."', '".$_POST['det']."', $srok, NOW
())"
;
if(!(
$res mysql_query($sql))) 
  exit(
"error in $sqlmysql_error()); 

header("Location: listb.php");

}
?>


отображатель результатов

<?php // ==== файл listb.php ==== 

// тут надо подключаться к бд 
//  вызывать SELECT и рисовать таблицу 

?>

  Ответить  
 
 автор: solomusic   (25.08.2008 в 22:28)   письмо автору
 
   для: Trianon   (25.08.2008 в 22:20)
 

хм... все поняла... кроме последнего...
отображатель результатов
<?php // ==== файл listb.php ====  

// тут надо подключаться к бд  
//  вызывать SELECT и рисовать таблицу  

?>

и еще... в таком случаи... как я понимаю... необходимость вот всего того что окружает форму, в
смысле таблицы и дивы удалять из листа форм не обязательно... это наверное можно просто
оставить оно ведь по сторонам (a.php и b.php).и здесь как вижу просто Вы разбили сам скрипт
добавки... а я поняла что мешает окружающий форму шаблон...

  Ответить  
 
 автор: Trianon   (25.08.2008 в 22:34)   письмо автору
 
   для: solomusic   (25.08.2008 в 22:28)
 

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

Нет, конечно. Зачем? Это всё должно быть удалено из обработчика.
Или (если обработчик и фрагмент формирования вывода находятся в одном скрипте) хотя бы поставлено под условный оператор так, чтобы при вызове обработчика вывод оказался отключен.

>оставить оно ведь по сторонам (a.php и b.php).и здесь как вижу просто Вы разбили сам скрипт
>добавки... а я поняла что мешает окружающий форму шаблон...

Мешает не сам шаблон. Мешает факт преждевременного вывода на страницу.
Вероятно в listb.php тоже потребуется этот самый шаблон включить.
При этом не исключено, что файл listb.php и formb.php окажутся настолько близкими, что проще будет обойтись одним.

  Ответить  
 
 автор: solomusic   (25.08.2008 в 22:38)   письмо автору
 
   для: Trianon   (25.08.2008 в 22:34)
 

хм... понятно... но Вы не объяснили мне вот это:
<?php // ==== файл listb.php ====   

// тут надо подключаться к бд   
//  вызывать SELECT и рисовать таблицу   

?>

что и к чему это????

  Ответить  
 
 автор: Trianon   (25.08.2008 в 22:49)   письмо автору
 
   для: solomusic   (25.08.2008 в 22:38)
 

после того как строка занесена в таблицу, Ваш скрипт вообще что-либо пользователю показывать собирается?

Довольно неожиданно заполнить поля, нажать на кнопку отправки, а в ответ получить чистый белый экран.

  Ответить  
 
 автор: solomusic   (25.08.2008 в 22:56)   письмо автору
 
   для: Trianon   (25.08.2008 в 22:49)
 

ну ... после добавки информации должно просто открывать страницу board.php и все...

  Ответить  
 
 автор: Trianon   (25.08.2008 в 23:03)   письмо автору
 
   для: solomusic   (25.08.2008 в 22:56)
 

Значит у Вас будет header("Location: board.php");

  Ответить  
 
 автор: solomusic   (25.08.2008 в 23:10)   письмо автору
 
   для: Trianon   (25.08.2008 в 23:03)
 

выводит ошибку:

error in INSERT INTO `b` ( `id`, `name`, `kto`, `rubric`, `pdrubric`, `city`, `area`, `street`, `cena`, 
`val`, `phone`, `email`, `det`, `srok`, `date`) VALUES ( '', 'ап', 'Частное лицо', 'Продам', 'дачи', 
'Тернополь', '', 'ап', 'ап', 'y.e.', 'ап', 'ап', 'ап', NOW() + INTERVAL 7 DAY, NOW ())FUNCTION 
board.NOW does not exist

  Ответить  
 
 автор: Trianon   (25.08.2008 в 23:16)   письмо автору
 
   для: solomusic   (25.08.2008 в 23:10)
 

пробела между NOW и () быть не должно.
Должно быть написано слитно NOW()

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

да... точно.... вновь моя великая внимательность... СПАСИБО СПАСИБО СПАСИБО...
а могу ли я у Вас попросить номер аськи? обещаю что доставать не буду, и спрашивать в случаи если уже ну просто вот ни как не могу понять... и не могу нигде найти ответ... ни в книгах ни в нете

  Ответить  
 
 автор: solomusic   (25.08.2008 в 21:08)   письмо автору
 
   для: Trianon   (25.08.2008 в 21:05)
 

но это наверное нужно ведь связат ьс кнопкой
<input type="submit" value="добавить" />

  Ответить  
 
 автор: solomusic   (25.08.2008 в 20:55)   письмо автору
 
   для: solomusic   (25.08.2008 в 20:51)
 

ой я все поняла

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

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