многим по душе картинки разглядывать --- Добавлено --- а начать можно с легкого ctrl + c и в гугл мануал and примеры (не копируя тупо примеры). А с опытом придет и оптимизация тривиальных задач. Позже придет Лень и скажет - друг чейт мне лениво кодить, когда посмотришь на свои скрипты. Там надо подправить, тут системку переписать, а может еще сильнее логичнее есть.. в одну строку ?! Короче... register_shudown_function( [ The, end ] )
А без фрейморка разве нельзя? Без него по-моему интересней. Ну по крайне мере мне намного интереснее все с нуля делать, нежели брать готовое. ) Да к тому же легче научиться будет использовать все функции PHP, нежели спрятанные уже в фрейморком и выполняемые простыми функциями. Проще говоря, так можно познать намного больше. А на счет урока, попробуй этот, он не идеален, но все же. Жмяк
Как только количество проектов и их сложность возрастает. А лень быстрее всех преодолевает высоты. Понимаешь что без фреймворка уже никуда. Каждый раз ты используешь в проектах одни и теже функции. Подключение к бд, авторизация, вообще работа с бд. Много наработанных классов, функций. И каждый раз все переписывать с 0 ? нет. Тут уже фреймворк спасает. и своя базовая настройка.
Однако, это курс по фреймворку. Я бы не стал давать надежду, что возможен видеокурс, пригодный для обучению программированию с нуля знаний.
Ну если ты уверен в том, что напишешь лучше, чем Laravel, Symfony, Zend и прочие. Я вот что-то про себя сомневаюсь
Да, я не уверен, но кол-во функций будет появляться по мере их необходимости, поэтому весьма весомо это. Ты учишься сам, получаешься драгоценный опыт, ну и хорошо понимаешь свой код и знаешь как работает защита, да и к тому же можно оставить лазейки для себя (Мало ли что случается).
comments.txt PHP: Вася; Комментарий 1 Петя; Комментарий 2 Коля; Комментарий 3 controller.php PHP: <?php require_once "model.php"; if (isset($_POST["addComment"])) addComment ($_POST["name"], $_POST["comment"]); $array = transformCommentsToArray(); require_once "wiev.html"; ?> index.php PHP: <html> <head> </head> <body> <h1>Статья</h1> <p>Текст статьи ...</p> <h2>Комментарий</h2> <?php if (count($array) !=0){ echo"<table>"; for ($i = 0; $i < count($array); $i++){ echo "<tr>"; echo "<td><b>".$array[$i]["name"]."</b></td>"; echo "<td><b>".$array[$i]["comment"]."</b></td>"; echo "</tr>"; echo "<tr>"; echo "<td colspan='2'><br /></td>"; echo "</tr>"; echo"</table>"; } } ?> </body> </html> model.php PHP: <?php function transformCommentsToArray(){ $string = file_get_contents("comments.txt"); $array = explode("\n", $string); $result = array(); for ($i = 0; $i < count($array); $i++){ $data = explode(";", $array[$i]); $result[$i]["name"] = $data[0]; $result[$i]["comment"] = $data[1]; } return $result; } function addComment($name, $comment){ $string = file_get_contents("comments.txt")."\n$name;$comment"; file_put_contents("comments.txt", $string); } ?> wiev.html PHP: <html> <head> </head> <body> <h1>Статья</h1> <p>Текст статьи ...</p> <h2>Комментарий</h2> <?php if (count($array) !=0){?> <table> <?php for ($i = 0; $i < count($array); $i++) {?> <tr> <td><b><?php=$array[$i]["name"]?>:</b></td> <td><?php=$array[$i]["comment"]?></td> </tr> <tr> <td colspan='2'><br /></td> </tr> <?php}?> </table> <?php}?> <h3>Добавить комментарий</h3> <form name="myform" action="controller.php" method="post"> <table> <tr> <td>Имя</td> <td> <input type="text" name="name" /> </td> </tr> <tr> <td>Комментарий</td> <td> <textarea name="comment" cols="20" rows="3"></textarea> </td> </tr> <tr> <td colspan="2"> <input type="submit" name="addComment" value="Добавить" /> </td> </tr> </table> </form> </body> </html>
Больше смущает, что это такое? --- Добавлено --- И тут ошибка ) Нельзя делать так <?php}?> --- Добавлено --- PHP: <?php if (count($array) !=0){?> <table> <?php $count_array=count($array); for ($i = 0; $i < $count_array; $i++) {?> <tr> <td><b><?=$array[$i]["name"]?>:</b></td> <td><?=$array[$i]["comment"]?></td> </tr> <tr> <td colspan='2'><br /></td> </tr> <?}?> </table> <?}?> И еще, count($array) делай перед циклом, ты так нагружаешь его, потому что после каждого цикла он опять обращается к count($array);
Народ, да если есть желание и голова на плечах, то возможно все. Не боги горшки обжигают. Проблема по существу в том, что этому товарищу уже давали и курсы, и подсказывали, и носом тыкали, ему как об стенку горох. Хочет сегодня и быстро и много получать. Сидеть и думать не его. Он хочет что бы видюшку посмотреть и резко стать умным и талантливым и высокооплачиваемым програмистом. Он более полугода назад начал вопросы задать свои тупые, типа "не выводится почему", и до сих пор даже синтаксис и чтение ошибок не освоил. О чем тут говорить, какие видеокурсы...
PHP: <?php=$array[$i]["name"]?> или еще короче запись PHP: <?=$value;?> это понятно, это полный аналог PHP: <?php echo $value; ?>
Не хочу показаться резким, но это потому что в представленном коде не правильно всё и это не MVC. Начнем с файла index.php. В нем не должно быть никакого html, вообще никакого. В этом файле должна осуществляться первоначальная загрузка классов (lazy load и namespace`s расписывать не буду, пока подключайте все классы, только следите чтобы их имена не дублировались, когда у вас будет 50+ строчек аля require_once() сами в сторону lazy load посмотрите), используемых в вашем приложении, инициализация роутера, задача которого - обработать URL к которому обратился пользователь, и дернуть метод определенного контроллера, ассоциируя пути с которым прописывается либо явно, формируя список допустимых маршрутов: Route::get('/Account/LogOn', 'Auth\LoginController@login'); Либо не явно, тогда при поступлении запроса виде "/Account/LogOn" роутер будет искать AccountController и метод LogOnAction и вызывать его если находит. При том в роутере хорошо бы сформировать из полей запроса пользователя, его кукисов и данных клиента объект Request, который и будет передаваться в контроллер. а дальше обрабатываться им. Далее - контроллер. Во первых, как я говорил выше контроллер должен быть классом, а не просто строчками кода, даже не разбитыми по функциям. Во вторых, для возвращения вида лучше определить функцию, например returnHTML, которую расположить в базовом контроллере, от которого вам нужно будет унаследовать ваши контроллеры. Задача тут - ограничить область видимости переменных шаблона, в эту функцию следует передавать путь шаблона и те данные, которые нужно в нем отображать, например в следующем виде (код с множеством упрощений и допущений, просто чтобы примерно показать логику): PHP: class AccountController extends BaseController { public function LogOnAction() { $login = $_POST['login'] ?? null; $password = $_POST['password'] ?? null; if (!$login || !$password) { $this->returnHTML('Views/Account/LogOnForm.html', [ 'errors' => 'Логин и/или пароль не длжны быть пустыми!', ]); } //Code... } } class BaseController { protected function returnHTML($tmpl, $vars) { if (is_array($vars)) { extract($vars); } require_once $tmpl; } } Модель: Впринципе идеологически вы верно написали, получился файл, содержащий определенные функции для работы над сущностью (комментарии), но опять же, модель должна быть классом, являющимся представлением сущности в коде. И подумайте над названием методов, вот это: transformCommentsToArray режет глаз и не отображает смысла функции. Если вы хотите получить список комментариев так и напишите getComments. Я кончил.
@alexpride1993, какая буква в аббревиатуре MVC обозначает класс? MVC может быть без классов (без относительно к коду ТС).
Я больше скажу, MVC может быть даже без разделения на файлы. Даже без разделения на функции, прстигспди. MVC это не конкретная архитектура. Это абстрактная парадигма, которая не про код и не про наличие HTML в index.php, она про логическое разделение частей приложения, отвечающих за разные аспекты его работы на высоком уровне. Разделение это может быть даже тупо на уровне отбивки строк пустых в простынном файлике.