Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2 3 4 5   Вниз
  Печать  
Автор Тема: Прошу помощи в написании формы записи на приём  (Прочитано 72047 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Kaspiy
Участник

ua
Offline Offline

« : 13-02-2014 00:32 » 

Здравствуйте, уважаемые программисты!)
У меня есть задание написать форму регистрации, в которой:
1 окно: тема приёма ( написание заявления, собеседование, заключение договора и т.д.)
2 окно: выбор дня для приёма.
3:список приёмных часов, с зачеркиванием времени, которое уже занято.
4 окно: ввод ФИО, e-mail, контактного номера

Я не хочу найти или чтобы мне дали готовый код, я очень хочу научиться делать это сам. Поэтому, если кто-то возьмет на себя роль "учителя" я буду одаривать Вас ОГРОМНЕЙШЕЙ благодарностью)Спасибо!

Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 13-02-2014 08:30 » 

Не вопрос.

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

P.S. И не вполне понятно, почему "Неотложка"? Ибо учиться - дело в общем-то не быстрое. Даже в лучшем случае недельку-то, наверно, провозимся.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Kaspiy
Участник

ua
Offline Offline

« Ответ #2 : 13-02-2014 17:53 » 

 Практикую и изучаю HTML, PHP. До JavaScript еще толком не добрался, разбирал немного на уже готовых примерах. Я не так давно начал заниматься программированием ( 3 месяца) но есть огромное желание продолжать им заниматься. С MySQL тоже уже пробовал работать. С простыми задачами получалось.

В таком случае, если можете, перенесите тему в соответствующий раздел. Спасибо!
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 13-02-2014 18:14 » 

Выбор средств, конечно, не самый удачный для обучения, хоть и понятный.

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

У тебя установлен: веб-сервер, сам PHP, ты уже хотя бы что-то простейшее (пусть и примеры) запускал - они работают? Или придётся начинать прямо с установки и развёртывания рабочей среды?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Kaspiy
Участник

ua
Offline Offline

« Ответ #4 : 13-02-2014 18:38 » 

Установлен базовый пакет Денвера. Писал калькулятор,запускал, прикручивал к WordPress'у шаблоны - все работает))
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 13-02-2014 18:49 » 

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

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Kaspiy
Участник

ua
Offline Offline

« Ответ #6 : 13-02-2014 18:56 » 

Я писал сам + использовал чужие исходники. Хотелось бы научиться делать все "от и до" самому. Но и структура калькулятора намного проще, без запросов к БД.
Я прочитал тему (ту, в которой оставил первый комментарий) и пробовал делать так-же, но у меня тот код на выходе не срабатывал. Поэтому я хочу полностью пройти путь создания от начала и до конца + выявить свои слабые стороны.
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 13-02-2014 19:16 » 

Цитата
пробовал делать так-же, но у меня тот код на выходе не срабатывал
Как, так же?
Что не срабатывало?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kaspiy
Участник

ua
Offline Offline

« Ответ #8 : 13-02-2014 19:23 » 

Выдает:
Parse error: syntax error, unexpected '=', expecting ')' in Q:\home\form\www\qa.php on line 6.  Менял, пробовал - не получалось =/

Код:
<?php
$link 
mysql_connect("localhost""Kaspiy""XXX")//соединение с бд
or die("not connect");
print (
"");
mysql_select_db(&#38;#39;script&#38;#39;, $link) or die (&#38;#39;not sucesful&#38;#39;);
$query "select * from my_table
where data=" 
"&#38;#39;$_POST[data]&#38;#39;" " and time=""&#38;#39;$_POST[time]&#38;#39;;";
$result mysql_query($query);
mysql_close($link);


if (isset(
$_POST[&#38;#39;send&#38;#39;])) { // отправили заявку

   
$link mysql_connect("localhost""Kaspiy""XXX") or die("not connect");//соеденились
   
mysql_select_db(&#38;#39;script&#38;#39;, $link) or die (&#38;#39;not sucesful&#38;#39;);

   //выбраны все из таблицы , где дата-отпраленная дата и время-отправленное время

   
$query "select * from my_table 
where data=" 
"&#38;#39;$_POST[data]&#38;#39;" " and time=""&#38;#39;$_POST[time]&#38;#39;;";
//результат записан в $result
   
$result mysql_query($query);

   
//проверяем кол-во строк вернувшихся от бд
$record mysql_fetch_array($result);
$num_rows mysql_num_rows($result); //если строк больше или равно одной..
   
if ($num_rows>=1) {
 

echo 
"Извините, время &#38;#39;$_POST[data]&#38;#39;&#38;#39;$_POST[time]&#38;#39; занято &#38;#39;$record[fio]&#38;#39;"//  то   выводим сообщение что время занято(немогу разобраться с правильным экранированием, хотя и так работает:))



   
} else {
// если строк меньше одной то время не занято, записываем фио дату и время в таблицу
     
$query =("insert into my_table (data, time, fio) values (&#38;#39;".$_POST[&#38;#39;data&#38;#39;]."&#38;#39;, &#38;#39;".$_POST[&#38;#39;time&#38;#39;]."&#38;#39;, &#38;#39;".$_POST[&#38;#39;fio&#38;#39;]."&#38;#39;);");
     
$result mysql_query($query);
 
 echo 
"вы записаны";//и сообщаем пользователю что его зафиксировали
   
}
}


if (isset(
$_POST[&#38;#39;send&#38;#39;])) {

 // была отправка формы и выводим полученные данные
 
$newLine ="<br />\r\n";
 
$out = &#38;#39;<html>
<head>
<
title>TEST</title>
</
head>
<
body>
&
#38;#39;;
 
$out .= "fio= ".$_POST[&#38;#39;fio&#38;#39;].$newLine;
 
$out .= "data=".$_POST[&#38;#39;data&#38;#39;].$newLine;
 
$out .= "time=".$_POST[&#38;#39;time&#38;#39;].$newLine;
 
$out .= &#38;#39;</body>
 
</html>&#38;#39;; 
} else {
 
// выводим форму

$out =&#38;#39;
<html>
<
head>
<
title>TEST</title>
</
head>
<
body>
<
form action="" method="post">
<
label>Ваше имя</label>
<
input name="fio" id="fio" type="text" size="24" /><br />
<
label>Выберите день</label>
<
select name="data" id="data">
<
option>2010/01/01</option>
<
option>01/01/2010</option>
<
option>02/01/2010</option>
<
option>03/01/2010</option>
</
select>
<
br />
<
label>Выберите время</label>
<
select name="time" id="time">
<
option>08:00:00</option>
<
option>09:00:00</option>
<
option>13:00:00</option>
<
option>14:00:00</option>
</
select>
<
br/>
<
input type="submit" id="send" name="send" value="Отправить"><INPUT type="reset" value="Сбросить">
</
form>
</
body>&#38;#39;;
}
echo 
$out
?>

Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 13-02-2014 19:42 » 

Да уж...
Все смешалось -  люди, кони

Отделяй мух от котлет
Представление от контроллера и модели
Т.е. html отдельно, php отдельно, sql отдельно
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kaspiy
Участник

ua
Offline Offline

« Ответ #10 : 13-02-2014 19:53 » 

Sla, расскажите,пожалуйста, как должно произойти данное разделение?
Php
Код:
<?php
$link 
mysql_connect("localhost""Kaspiy""44558899")//соединение с бд
or die("not connect");
print (
"");
mysql_select_db(&#38;#39;script&#38;#39;, $link) or die (&#38;#39;not sucesful&#38;#39;);
$query "select * from my_table
where data=" 
"&#38;#39;$_POST[data]&#38;#39;" " and time=""&#38;#39;$_POST[time]&#38;#39;;";
$result mysql_query($query);
mysql_close($link);


if (isset(
$_POST[&#38;#39;send&#38;#39;])) { // отправили заявку

   
$link mysql_connect("localhost""Kaspiy""44558899") or die("not connect");//соеденились
   
mysql_select_db(&#38;#39;script&#38;#39;, $link) or die (&#38;#39;not sucesful&#38;#39;);

   //выбраны все из таблицы , где дата-отпраленная дата и время-отправленное время

   
$query "select * from my_table 
where data=" 
"&#38;#39;$_POST[data]&#38;#39;" " and time=""&#38;#39;$_POST[time]&#38;#39;;";
//результат записан в $result
   
$result mysql_query($query);

   
//проверяем кол-во строк вернувшихся от бд
$record mysql_fetch_array($result);
$num_rows mysql_num_rows($result); //если строк больше или равно одной..
   
if ($num_rows>=1) {
 

echo 
"Извините, время &#38;#39;$_POST[data]&#38;#39;&#38;#39;$_POST[time]&#38;#39; занято &#38;#39;$record[fio]&#38;#39;"//  то   выводим сообщение что время занято(немогу разобраться с правильным экранированием, хотя и так работает:))



   
} else {
// если строк меньше одной то время не занято, записываем фио дату и время в таблицу
     
$query =("insert into my_table (data, time, fio) values (&#38;#39;".$_POST[&#38;#39;data&#38;#39;]."&#38;#39;, &#38;#39;".$_POST[&#38;#39;time&#38;#39;]."&#38;#39;, &#38;#39;".$_POST[&#38;#39;fio&#38;#39;]."&#38;#39;);");
     
$result mysql_query($query);
 
 echo 
"вы записаны";//и сообщаем пользователю что его зафиксировали
   
}
}


if (isset(
$_POST[&#38;#39;send&#38;#39;])) {

 // была отправка формы и выводим полученные данные
 
$newLine ="<br />\r\n";
 
$out = &#38;#39;<html>
<head>
<
title>TEST</title>
</
head>
<
body>
&
#38;#39;;
 
$out .= "fio= ".$_POST[&#38;#39;fio&#38;#39;].$newLine;
 
$out .= "data=".$_POST[&#38;#39;data&#38;#39;].$newLine;
 
$out .= "time=".$_POST[&#38;#39;time&#38;#39;].$newLine;
 
$out .= &#38;#39;</body>
 
</html>&#38;#39;; 
} else {
 
// выводим форму

$out =&#38;#39;

html
Код:
<html>
<head>
<title>TEST</title>
</head>
<body>
<form action="" method="post">
<label>Ваше имя</label>
<input name="fio" id="fio" type="text" size="24" /><br />
<label>Выберите день</label>
<select name="data" id="data">
<option>2010/01/01</option>
<option>01/01/2010</option>
<option>02/01/2010</option>
<option>03/01/2010</option>
</select>
<br />
<label>Выберите время</label>
<select name="time" id="time">
<option>08:00:00</option>
<option>09:00:00</option>
<option>13:00:00</option>
<option>14:00:00</option>
</select>
<br/>
<input type="submit" id="send" name="send" value="Отправить"><INPUT type="reset" value="Сбросить">
</form>
</body>&#39;;
}
echo $out;
?>
 

так?
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 13-02-2014 20:01 » 

Почти
Но мыслишь верно
Код:
<html>
<head>
<title>Форма записи</title>
</head>

<body>
<form action="record.php" method="post">
<label>Ваше имя</label> <input name="fio" id="fio" type="text" size="24" />
<br />
<label>Выберите день</label>
<select name="data" id="data">
<option>2010/01/01</option>
<option>01/01/2010</option>
<option>02/01/2010</option>
<option>03/01/2010</option>
</select>
<br />
<label>Выберите время</label>
<select name="time" id="time">
<option>08:00:00</option>
<option>09:00:00</option>
<option>13:00:00</option>
<option>14:00:00</option>
</select>
<br/>
<input type="submit" id="send" name="send" value="Отправить">
<INPUT type="reset" value="Сбросить">
</form>
</body>
</html>

Это было представление - шаблон
Не обращаем пока внимания на его "статичность"
На данном этапе это не важно

Основное понятно.
Существует некая форма ввода данных

Некоторый данные зависят от ранее введенных.
Сейчас это не важно, но запомним на будущее...




Добавлено через 2 минуты и 30 секунд:
надо заметить что option должны обладать value иначе как можно однозначно определить выбранное значение?
« Последнее редактирование: 13-02-2014 20:08 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kaspiy
Участник

ua
Offline Offline

« Ответ #12 : 13-02-2014 20:15 » 

В папке данного проекта должно быть 2 файла,верно? Один-php код, который я в дальнейшем помещу в сниппет и файл (например index.php)   с кодом html? Я правильно понимаю?

P.S. Option1, option2, option3?
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 13-02-2014 20:21 » 

Не поверишь...

Я не знаю сколько должно быть файлов...

хоть один.

Это не суть важно...

Главное разделение сущностей
представление (view)
обработка (controller)
хранение (model)


<option value="01/01/2014">01/01/2014</option>
....

Добавлено через 1 минуту и 48 секунд:
не вижу еще одного поля ввода по ТЗ

1 окно: тема приёма ( написание заявления, собеседование, заключение договора и т.д.)
Предлагаю сделать его фиксированным  - или селект или radio
« Последнее редактирование: 13-02-2014 20:23 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kaspiy
Участник

ua
Offline Offline

« Ответ #14 : 13-02-2014 20:55 » 

Добавил тему приема через селект. Сейчас все выглядит так.
Код:
<?php

$link 
mysql_connect("localhost""Kaspiy""44558899")//соединение с бд
or die("not connect");
print (
"");
mysql_select_db(&#38;#39;script&#38;#39;, $link) or die (&#38;#39;not sucesful&#38;#39;);
$query "select * from my_table
where data=" 
"&#38;#39;$_POST[data]&#38;#39;" " and time=""&#38;#39;$_POST[time]&#38;#39;;";
$result mysql_query($query);
mysql_close($link);


if (isset(
$_POST[&#38;#39;send&#38;#39;])) { // отправили заявку

   
$link mysql_connect("localhost""Kaspiy""44558899") or die("not connect");//соеденились
   
mysql_select_db(&#38;#39;script&#38;#39;, $link) or die (&#38;#39;not sucesful&#38;#39;);

   //выбраны все из таблицы , где дата-отпраленная дата и время-отправленное время

   
$query "select * from my_table 
where data=" 
"&#38;#39;$_POST[data]&#38;#39;" " and time=""&#38;#39;$_POST[time]&#38;#39;;";
//результат записан в $result
   
$result mysql_query($query);

   
//проверяем кол-во строк вернувшихся от бд
$record mysql_fetch_array($result);
$num_rows mysql_num_rows($result); //если строк больше или равно одной..
   
if ($num_rows>=1) {
 

echo 
"Извините, время &#38;#39;$_POST[data]&#38;#39;&#38;#39;$_POST[time]&#38;#39; занято &#38;#39;$record[fio]&#38;#39;"//  то   выводим сообщение что время занято(немогу разобраться с правильным экранированием, хотя и так работает:))



   
} else {
// если строк меньше одной то время не занято, записываем фио дату и время в таблицу
     
$query =("insert into my_table (data, time, fio) values (&#38;#39;".$_POST[&#38;#39;data&#38;#39;]."&#38;#39;, &#38;#39;".$_POST[&#38;#39;time&#38;#39;]."&#38;#39;, &#38;#39;".$_POST[&#38;#39;fio&#38;#39;]."&#38;#39;);");
     
$result mysql_query($query);
 
 echo 
"вы записаны";//и сообщаем пользователю что его зафиксировали
   
}
}


if (isset(
$_POST[&#38;#39;send&#38;#39;])) {

 // была отправка формы и выводим полученные данные
 
$newLine ="<br />\r\n";
 
$out = &#38;#39;<<html>
<head>
<
title>TEST</title>
</
head>
<
body>
&
#38;#39;;
 
$out .= "theme".$_POST[&#38;#39;theme&#38;#39;].$newLine;
 
$out .= "fio= ".$_POST[&#38;#39;fio&#38;#39;].$newLine;
 
$out .= "data=".$_POST[&#38;#39;data&#38;#39;].$newLine;
 
$out .= "time=".$_POST[&#38;#39;time&#38;#39;].$newLine;
 
$out .= &#38;#39;</body>
 
</html>&#38;#39;; 
} else {
 
// выводим форму

$out =&#38;#39;
?>


<html>
<head>
<title>TEST</title>
</head>
<html>
<head>
<title>Форма записи</title>
</head>

<body>
<form action="record.php" method="post">
<label> Выберите тему приёма</label>
<select name="theme" id="theme">
<option value="Встреча">Встреча</option>
<option value="Переговоры">Переговоры</option>
<option value="Приём">Приём</option>
</select>
<br />
<label>Ваше имя</label> <input name="fio" id="fio" type="text" size="24" />
<br />
<label>Выберите день</label>
<select name="data" id="data">
<option value="2010/01/01">2010/01/01</option>
<option value="01/01/2010">01/01/2010</option>
<option value="02/01/2010">>02/01/2010</option>
<option value="03/01/2010">03/01/2010</option>
</select>
<br />
<label>Выберите время</label>
<select name="time" id="time">
<option value="08:00:00">08:00:00</option>
<option value="09:00:00">09:00:00</option>
<option value="13:00:00">13:00:00</option>
<option value="14:00:00">14:00:00</option>
</select>
<br/>
<input type="submit" id="send" name="send" value="Отправить">
<INPUT type="reset" value="Сбросить">
</form>
</body>
</html>

Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 13-02-2014 21:27 » 

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

Расскажи как ты видишь хранение данных.



Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kaspiy
Участник

ua
Offline Offline

« Ответ #16 : 13-02-2014 21:34 » 

Поле   Тип   Null   По умолчанию   Комментарии   MIME
id   int(5)   Нет            
Theme   int(11)   Нет            
fio   text   Нет            
Дата   date   Нет            
Время   time   Нет            
Добавлено через 2 минуты и 47 секунд:
Я создал таблицу с 4 полями. Поставил соответствующие типы,остальное оставил так, как было.
Хранение  данных:
Пользователь вводит данные в конкретную строку, которая привязана к одному из полей. Когда все формы заполнены (и заполнены верно), то  эти данные помещаются в БД. Правильно?
« Последнее редактирование: 13-02-2014 21:37 от Kaspiy » Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 13-02-2014 21:45 » 

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


То с базой так не пойдет.

Что ты хочешь хранить?
Как ты представляешь собой хранилище...

Ведь хранилище может быть не только sql, но и nosql

Поэтому...
Что ты хочешь хранить


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kaspiy
Участник

ua
Offline Offline

« Ответ #18 : 13-02-2014 21:51 » 

Данные о пользователях, причину их записи на прием(тему),  ФИО, дату и время на которое записывались эти пользователи.
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 13-02-2014 22:09 » 

Допустим, какие данные уникальны?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kaspiy
Участник

ua
Offline Offline

« Ответ #20 : 13-02-2014 22:13 » 

Я думаю, что уникальны только ФИО и связка( дата+время), ведь такую же тему приёма,тот же день могут выбрать и другие люди.
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 13-02-2014 22:28 » 

Допустим

Теперь, запиши это в табличку
Слева название поля, справа его тип.
Так чтоб это было читабельно.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kaspiy
Участник

ua
Offline Offline

« Ответ #22 : 13-02-2014 22:42 » 


IDINT
ThemeINT
fioTEXT
dateDATE
timetime
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #23 : 13-02-2014 23:32 » 

А смысл в двух полях даты?

Ведь дата и время уникальны


Раз пошла такая пьянка... Ты сам виноват Улыбаюсь

Theme   INT

Почему int?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kaspiy
Участник

ua
Offline Offline

« Ответ #24 : 13-02-2014 23:39 » 

Должен быть Text, да?  Скромно так...
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #25 : 14-02-2014 00:00 » 

Должен быть Text, да?  Скромно так...

Сам не знаю Улыбаюсь
Ты аргументируй свое видение - "архитектором проекта" являешься ты.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #26 : 14-02-2014 06:56 » 

И галопом по Европам...

Sla, если ты говоришь:
Цитата: Sla
Отделяй мух от котлет
Представление от контроллера и модели
Т.е. html отдельно, php отдельно, sql отдельно

Не поверишь...

Я не знаю сколько должно быть файлов...

хоть один.

Это не суть важно...

Главное разделение сущностей
представление (view)
обработка (controller)
хранение (model)
То хоть потрудись объяснить, что это такое, если человек не знает.

Итак, в веб-приложении есть 2 места выполнения работы: сервер и клиент (браузер пользователя). Между собой они общаются по сети, по протоколу HTTP.

Браузер по протоколу посылает серверу:
- либо простой запрос страницы, когда пользователь открывает нужный URL в браузере,
- либо сложный запрос с данными формы, когда пользователь на странице с формой нажимает submit или если на странице есть JavaScript-код, который умеет программно посылать запросы.

Сервер, получив любой запрос, сначала анализирует URL и определяет, какой конкретно из файлов на сервере нужно принять в обработку. Если это просто HTML-файл, картинка, файл стилей CSS, документ типа PDF, TXT и т.д. - такой файл возвращается как есть. Если это файл определённого зарегистрированного на сервере типа - тот же PHP, такой файл запускается как программа при помощи одного из модулей сервера. Но итогом работы этой программы всё равно должен быть документ (обычно HTML), который потом уйдёт в браузер пользователю. Браузер что получил, то и покажет (или будет программно обрабатывать с помощью JavaScript-кода).

Если говорить о специальных языках для веб-программирования - каким является PHP, - есть два способа сформировать HTML документ как результат работы программы. Первый способ: с помощью разных echo и print записывать нужный текст, который образует собой HTML. Второй способ - использовать скобки <?php ... ?>. Всё, что между ними - то рассматривается как код программы для выполнения, что вне этих скобок рассматривается как текст, который передаётся браузеру без изменений. Вот в Википедии хорошая иллюстрация:
Код: (PHP)
<html>
 <head>
  <title>Тестируем PHP</title>
 </head>
 <body>
  <?php echo 'Hello, world!'; ?>
 </body>
</html>
Из исполняемой программы тут только echo со строчкой.

Теперь о model, view, controller. Это такой приём при конструировании архитектуры, когда программа обработки запроса разделяется на три соответствующие части:
- controller - это такая программа, которая принимает любые (простые или сложные) запросы от пользователей, вносит изменения в модель;
- model - это та часть программы, которая работает с данными и отвечает в том числе за то, чтобы помнить, какой из пользователей что делает на сайте;
- view - это та часть программы, которая на основании данных модели формирует HTML или XML для передачи в браузер.

Таким образом, появляется рабочий цикл обработки запроса:
1) сначала инициализируется модель - она загружается, но ничего не делает;
2) затем запускается controller, вносит в изменения в model и запускает разные операции model,
3) в конце запускается view, чтобы по данным модели сформировать ответ на запрос - документ.
Вся эта тройка вместе вообще в программировании называется компонентом, хотя в веб-программировании она может называться страницей.

Вопрос о том, кто должен запускать view - controller или model - это вопрос открытый. Если это делает controller, соответствующая схеме model называется пассивной. Если это делает model, она называется активной, и тогда этого не делает controller. Это надо просто выбрать: как будет, а потом придерживаться этого правила.

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

Всё описанное в целом называется архитектурой с тонким клиентом, потому что браузер только показывает HTML и больше никакой работы почти не делает. Сейчас, конечно, развиваются архитектуры с толстым клиентом, где браузер с помощью JavaScript реализует как controller, так и view самостоятельно, а сервер работает лишь как веб-сервис и реализует модель. Можно даже и так, что и модель в браузере, который обращается к разным сервисам в облаке.

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

Теперь о разделении. В самом деле, можно разделить страницу на четыре документа. Для это будет: mypage-view.php, mypage-model.php, mypage-controller.php и mypage.php в качестве связки.

Код: (PHP)
<?php

// Файл view по умолчанию
$view_file = 'mypage-view.php';

// Первым делом загружаем модель, пусть она проинициализируется,
// и будут доступны её функции для работы.
require('mypage-model.php');

// Дальше работает контроллер. Он принимает данные из формы,
// записывает в модель, запускает внутри модели какие-то операции.
require('mypage-controller.php');

// Либо модель - если она активная, либо контроллер, если модель пассивная,
// могут поменять значение $view_file, чтобы выбрать нужное view.

// В самом конце выбранное view формирует выходной документ.
// Для view также оказываются доступным функции модели.
require($view_file);

?>

Но, как и говорил Sla, если кода мало, можно его на файлы не разделять, просто в одном файле будут чётко выделенные секции:

Код: (PHP)
<?php // MODEL
// ...
?>
<?php // CONTROLLER
// ..
?>
<html>
<!-- тут HTML со вставками php в качестве view. -->
</html>

Затем я лично не понимаю, почему все дружно ломанулись создавать таблицы, когда ещё не отлажена работа формы без обращения к БД. Сначала нужно грамотно написать модель, в которой будут "заглушки" данных. Убедиться, что всё вместе: model, controller, view благополучно работают в том смысле, что введённые пользователем данные хотя бы запоминаются сервером и возвращаются обратно. И только потом начинать ковырять базу данных.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #27 : 14-02-2014 08:41 » 

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

А смысл отлаживать без обращения. к БД.
И заметь - таблицы еще не создали, а стоит только вопрос, "как ты видишь модель хранения"


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


Внесение незнакомых понятий, таких как Model, View, Contoller подразумевает, что человечек самостоятельно поинтересуется.
А рассказывать как извлекать квадратный корень(изучать основы HTTP протокола), или начинать с "hello word" т.к. человечек поверхностно знаком с php, html и даже с sql - код был показан.


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 14-02-2014 10:12 » 

Sla, смысл в том, чтобы сначала в коде порядок навести и научить выполнять декомпозицию - т.е. кушать слона по частям. Причём из ответов ясно видно, что автор темы не очень понял твой призыв, и что конкретно нужно сделать.

Знание PHP можно почерпнуть на любом говносайте для быдлокодеров. Знание архитектур и методов анализа задачи на таких сайтах не публикуется, ибо авторы сами этим знанием не обладают. Именно из-за этой особенности PHP-шник - самая дешёвая разновидность программиста. Не считаю полезным эту "традицию" воспроизводить и здесь.

Мне показалось, что автор темы зашёл сюда поучиться на примере решения задачи, а не просто решить задачу лишь бы заработало.
« Последнее редактирование: 14-02-2014 10:14 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #29 : 14-02-2014 11:09 » 

Ну... да... есть такое... если я это знаю, то почему этого не знаешь ты Улыбаюсь

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

Тут есть еще один момент...

Как говорил мой старинный знакомый...
"А окна должны быть покрашены".

Т.е. делая ремонт, нужно видеть что есть результат.

В данном случае - сейчас "окна" покрашены - есть форма ввода - пусть и сырая, но есть.
Я бы сказал, что не покрашена, но грунтовка нанесена.


С формой можно уже начинать играться.
Даже можно уже готовить фурнитуру - select onchange
Затронуть аякс...

Но мы пока не спешим.
Ведь теперь нужно правильно заполнить поля формы для выбора (select), а для этого нужно иметь расписание
А расписание - это хранилище = динамика.
А сейчас - это статика.

Давай не вспугнем человечка... Будем тащить из него клещами...

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1] 2 3 4 5   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines