[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Изучаю ООП
Юрий Шу
Написал тестовый скрипт для ознакомления с принципами ООП.
Необходимо вывести на печать данные из введенной сгенерированной формы.

Подскажите пожалуйста, как это сделать?

test.html:
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<title>Создаем и выводим описание</title>
</head>

<body>
<form action="class.php">
<input type="submit" name="art_create" value="Создать статью" />
</form>


</body>
</html>

class.php:
PHP
<?
class Article {
    var $title;
    var $author;
    var $descr;

    function Article($t="Название отсутствует",$a="Автор отсутствует",$d="Описание отсутствует"){
        $this->title = $t;
        $this->author = $a;
        $this->descr = $d;
    }

    function showArticle(){
        $art = $this->author.": ".$this->title. ". ".$this->descr;
        echo $art;
    }
}

if(isset(
$_GET["art_create"])){
    $obj = new Article;
    $props = get_class_vars(get_class($obj));
    
    $str 
= "<form>\r\n";
    foreach($props as $key=>$value){
         $str .= $key.":&nbsp;<input type=\"text\" name=\"$key\" /><br/>\r\n";
    }
    $str .= "<input type=\"submit\" name=\"showData\" value=\"Вывести данные\" />\r\n";
    $str .= "</form>";
    echo $str;
    
    if
(isset($_GET["showData"])){
        //выводим на печать данные из введенных полей (?)
        }
}




Спустя 15 минут, 22 секунды (3.06.2009 - 12:35) Mizka написал(а):
я тоже толька начал учить ООП в пхп smile.gif
PHP
class Article
{
        public 
$title;
        public 
$author;
        public 
$descr;

        public function 
__constructor($t="Название отсутствует",$a="Автор отсутствует",$d="Описание отсутствует")
        {
               
$this->title $t;
               
$this->author $a;
               
$this->descr $d;
        }

        public function 
showArticle()
        {
                echo 
$this->author.": ".$this->title.". ".$this->desrc;
        }
}

In action:
PHP
$art = new Article();
...
echo 
$art->showArticle();

кажется примерно так smile.gif

Спустя 13 минут, 39 секунд (3.06.2009 - 12:49) Юрий Шу написал(а):
Mizka, я немного не об этом. Попробуй выполнить скрипт.
У тебя кстати PHP5 кажется. У меня же четвертая версия smile.gif

Спустя 7 минут, 55 секунд (3.06.2009 - 12:57) sergeiss написал(а):
Даже не вникая в суть скрипта, с ходу вопрос: почему $_GET["art_create"]), хотя должно быть $_POST["art_create"]), т.к. используется форма?

Спустя 8 минут, 44 секунды (3.06.2009 - 13:06) Mizka написал(а):
зачем учить ооп под пхп4, если в 5 возможности ооп реализованы лучше?
Разница в ООП между PHP4 и PHP5

Спустя 6 минут, 22 секунды (3.06.2009 - 13:12) Юрий Шу написал(а):
Цитата (sergeiss @ 3.06.2009 - 09:57)
Даже не вникая в суть скрипта, с ходу вопрос: почему $_GET["art_create"]), хотя должно быть $_POST["art_create"]), т.к. используется форма?

а разве это имеет значение в данном случае??
задача стоит просто вывести данные объекта на экран, метод передачи ведь не важен?

Цитата
зачем учить ооп под пхп4, если в 5 возможности ооп реализованы лучше?

просто документация была по четверке. Решил с нее пока начать. То, что в пятой версии много больше всего знаю, но начать решил с легкого smile.gif

Спустя 10 минут, 19 секунд (3.06.2009 - 13:22) sergeiss написал(а):
Цитата (Юрий Шу @ 3.06.2009 - 14:12)
а разве это имеет значение в данном случае??

Ну... Этаааааааа... Я даже не знаю, что и сказать-то smile.gif

Ты после перехода по нажатию кнопки выведи содержимое массивов $_GET и $_POST. Тогда понятнее будет.

И лучше остать четверку в покое. Она была - спасибо ей. Но лучше тратить силы на изучение более современной версии. Иначе ты потом потратишь много времени на переучивание.

Спустя 13 минут, 45 секунд (3.06.2009 - 13:36) Юрий Шу написал(а):
Цитата (sergeiss @ 3.06.2009 - 10:22)
Цитата (Юрий Шу @ 3.06.2009 - 14:12)
а разве это имеет значение в данном случае??

Ну... Этаааааааа... Я даже не знаю, что и сказать-то smile.gif

Ты после перехода по нажатию кнопки выведи содержимое массивов $_GET и $_POST. Тогда понятнее будет.

И лучше остать четверку в покое. Она была - спасибо ей. Но лучше тратить силы на изучение более современной версии. Иначе ты потом потратишь много времени на переучивание.

вывел
PHP
print_r($_POST);

Содержимое одно и то же:
HTML
Array ( [art_create] => Создать статью )

А все-таки что с кодом сделать после нажатия кнопки showData?

Спустя 49 минут, 55 секунд (3.06.2009 - 14:26) glock18 написал(а):
1. Назначь членам класса значения, переданные из формы. У тебя метод не стоит, так что должны быть в GET. Но если у тебя помимо полей формы есть какие-то параметры у урла, то что-то из них не будет передано)))) (не помню что именно уже). Лучше метод post для форм используй.

2. Ну и юзай свой showArticle.


PS: учи сразу 5 и побольше. > 5.2 хотя бы. sergeiss прав - переучиваться потом придется, а что полегче - спорный вопрос, поскольку так как в 4 возможности ооп почти никакие, может потребоваться очень много времени и нервов, чтобы какую-то более-менее ооп'шную фичу реализовать.

Спустя 14 минут, 36 секунд (3.06.2009 - 14:41) gooder отдыхающий написал(а):
Цитата (sergeiss @ 3.06.2009 - 12:57)
Даже не вникая в суть скрипта, с ходу вопрос: почему $_GET["art_create"]), хотя должно быть $_POST["art_create"]), т.к. используется форма?

а что, все формы только постом передают данные?

Спустя 11 минут, 51 секунда (3.06.2009 - 14:53) sergeiss написал(а):
Цитата (gooder @ 3.06.2009 - 15:41)
Цитата (sergeiss @ 3.06.2009 - 12:57)
Даже не вникая в суть скрипта, с ходу вопрос: почему $_GET["art_create"]), хотя должно быть $_POST["art_create"]), т.к. используется форма?

а что, все формы только постом передают данные?

Может я и погорячился немного rolleyes.gif Просто привык, что из формы (мне лично) удобнее передавать ПОСТом, и для меня это некий "стандарт" уже стал.

А обращение к элементам класса (вне самого класса, для публичных переменных - как в данном случае) идет в виде $obj->title, $obj->author и так далее. В том числе и к методам, ежели таковые имеются.
PHP
echo 'Автор : '.$obj->title.'<br>';
$obj->ShowArticle();

Спустя 20 минут, 51 секунда (3.06.2009 - 15:13) Юрий Шу написал(а):
Цитата (sergeiss @ 3.06.2009 - 11:53)
Цитата (gooder @ 3.06.2009 - 15:41)
Цитата (sergeiss @ 3.06.2009 - 12:57)
Даже не вникая в суть скрипта, с ходу вопрос: почему $_GET["art_create"]), хотя должно быть $_POST["art_create"]), т.к. используется форма?

а что, все формы только постом передают данные?

Может я и погорячился немного rolleyes.gif Просто привык, что из формы (мне лично) удобнее передавать ПОСТом, и для меня это некий "стандарт" уже стал.

А обращение к элементам класса (вне самого класса, для публичных переменных - как в данном случае) идет в виде $obj->title, $obj->author и так далее. В том числе и к методам, ежели таковые имеются.
PHP
echo 'Автор : '.$obj->title.'<br>';
$obj->ShowArticle();

Это я знаю, но в данном случае ничего не выведет при событии isset($_GET["showData"]) sad.gif

Спустя 15 минут, 56 секунд (3.06.2009 - 15:29) sergeiss написал(а):
А где у тебя в начальной форме showData???

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

Спустя 20 минут, 52 секунды (3.06.2009 - 15:50) Юрий Шу написал(а):
sergeiss, я понимаю, может и лучше.
Но задача стоит сформировать форму, ввести туда данные и вывести их на печать. Сделать все это, использую объекты и классы.

Последний этам я не знаю как сделать, поэтому решил обратиться за советом.
Это обычный пример из учебника, просто я немного модифицированный.

Спустя 11 минут, 29 секунд (3.06.2009 - 16:02) sergeiss написал(а):
Тогда давай с самого начала.

Вот ты показал, что у тебя есть форма в test.html. Есть обработчик class.php.
Вызываем форму, нажимаем кнопку, переходим для обработки в class.php. Тут формируем новую форму. Отлично! А где она будет обрабатываться, это новая форма, в каком скрипте??? Этого у тебя не видно в тексте.

Можно предположить, что ты хочешь обработать это всё в class.php. Но тогда получаем маразм чего-то непонятное: один обработчик работает с двумя разными формами: со своей и из другого файла.

PS. А лучше выкинь этот учебник smile.gif и давай просто тут всё разберем. Кстати, а что за учебник такой, по которому нельзя разобраться с такими простыми вещами?

Спустя 7 минут, 14 секунд (3.06.2009 - 16:09) glock18 написал(а):
При описанном выше sergeiss поведении, помимо странности есть еще кривость:

PHP
if(isset($_GET["art_create"])){
    
$obj = new Article;
    
$props get_class_vars(get_class($obj));
    
    
$str "<form>\r\n";
    foreach(
$props as $key=>$value){
         
$str .= $key.":&nbsp;<input type=\"text\" name=\"$key\" /><br/>\r\n";
    }
    
$str .= "<input type=\"submit\" name=\"showData\" value=\"Вывести данные\" />\r\n";
    
$str .= "</form>";
    echo 
$str;
    
    if(isset(
$_GET["showData"])){
        
//выводим на печать данные из введенных полей (?)
        
}
}


проверка на showData проводится в случае, если прошла проверка на art_create. Это же что ж получается? Надо две формы засабмитить?))))

Спустя 6 минут, 19 секунд (3.06.2009 - 16:15) Юрий Шу написал(а):
Цитата
Кстати, а что за учебник такой, по которому нельзя разобраться с такими простыми вещами?

На intiut.ru. Курс по php.
Цитата
Можно предположить, что ты хочешь обработать это всё в class.php.

Так и получается. А как можно сделать правильней?

Спустя 1 минута, 21 секунда (3.06.2009 - 16:17) Юрий Шу написал(а):
Цитата
проверка на showData проводится в случае, если прошла проверка на art_create. Это же что ж получается? Надо две формы засабмитить?))))

хыхы, ну да, странновато
не заметил.

Здесь поправил, все ок. Только мне нужно вывести данные те, которые введены, если же они не введены, то нужно вывести отсюда:
PHP
function Article($t="Название отсутствует",$a="Автор отсутствует",$d="Описание отсутствует"){

Спустя 2 минуты, 6 секунд (3.06.2009 - 16:19) sergeiss написал(а):
Давай пока абстрагируемся от классов, и просто сделаем работающую форму. В простом виде. В одном скрипте чтобы и обработка, и ввод формы.
А потом уже можно будет добавить туда классы.
HTML
<?php

echo "POSTs<br>";
foreach( $_POST as $k => $val )
{
echo "POST[$k]=$val<br>";
}
echo "POSTs ended<br>";

if( isset( $_POST['title']) ) echo 'Введен заголовок '.$_POST['title'].'<br>';
if( isset( $_POST['author']) ) echo 'Введен автор '.$_POST['author'].'<br>';

?>
<form action="" enctype="multipart/form-data" name="text_editor" method="post">

Заголовок <input name="title" type="text" size="50" <?php if( isset( $_POST['title']) ) echo $_POST['title'] ?> /> <br />
Автор <input name="author" type="text" size="50" <?php if( isset( $_POST['author']) ) echo $_POST['author'] ?> /> <br />
<input type="submit" name="save_info" value="Сохранить">
</form>


PS. Это всё - текст одного скрипта!!!

Спустя 4 минуты, 56 секунд (3.06.2009 - 16:24) Юрий Шу написал(а):
Цитата
Заголовок <input name="title" type="text" size="50" <?php if( isset( $_POST['title']) ) echo $_POST['title'] ?> /> <br />

а вот после размера поля что за конструкция, зачем она? Там наверное value забыли?

Спустя 20 минут, 18 секунд (3.06.2009 - 16:44) sergeiss написал(а):
Цитата (Юрий Шу @ 3.06.2009 - 17:24)
Там наверное value забыли?

Сорри, конечно там value:
PHP
echo 'value="'.$_POST['title'].'"';

Спустя 15 часов, 17 минут, 34 секунды (4.06.2009 - 08:02) Юрий Шу написал(а):
sergeiss, ну с этим-то все понятно.
А если теперь вернуться к задачи и классам?

Спустя 20 минут, 28 секунд (4.06.2009 - 08:22) sergeiss написал(а):
Цитата (Юрий Шу @ 4.06.2009 - 09:02)
sergeiss, ну с этим-то все понятно.
А если теперь вернуться к задачи и классам?

ОК, возвращаемся smile.gif

В настоящее время в задаче существуют
1. {Блок обработки введенных данных}
2. {Форма ввода данных}

В блоке обработки делаем изменения. Вместо вывода информации пишем ее сначала в переменные (я взял только 2 параметра, чтобы не загромождать текст, а сосредоточиться на сути). Собственно говоря, это можно было сделать и изначально smile.gif
PHP
$title=isset( $_POST['title'] ) ? $_POST['title'] : '';
$author=isset( $_POST['author'] ) ? $_POST['author'] : '';
// и теперь пишем данные в класс:
$obj=new Article;
$obj->Article( $title, $author, "Нету нифига");
//А что ты дальше хочешь делать с этими данными? Просто вывести их? Тогда просто вызываешь свою функцию из класса
$obj->showArticle();

// Или надо обрабатывать как-то эти данные? Нет проблем! Обращаешься к ним как и к любым другим переменным, но только по именам $obj->title, $obj->author. Можешь их обрабатывать любым функциями, перезаписывать значения, и т.д. и т.п.

// Если сделать полноценный конструктор в ПХП5, то можно при создании объекта сразу же назначить значения, типа такого:
$obj=new Article( $title, $author, "nothing" );



PS. Или я недопонял, что же именно непонятно?


Спустя 4 минуты, 33 секунды (4.06.2009 - 08:27) glock18 написал(а):
Юрий Шу

sergeiss прав. Сперва нужно сделать так, чтобы формы обрабатывались правильно. Когда они будут делать то, что нужно. И ты будешь получать то, что нужно. Тогда можно будет заняться логикой обработки - самими классами. Сейчас классы никуда не убегут smile.gif

Спустя 3 минуты, 21 секунда (4.06.2009 - 08:30) Юрий Шу написал(а):
Цитата
$obj->Article( $title, $author, "Нету нифига");

А что значит вот эта строка?

Спустя 14 минут, 58 секунд (4.06.2009 - 08:45) Mizka написал(а):
Цитата
А что значит вот эта строка?

Передаются параметры объекта $obj

Спустя 4 минуты, 4 секунды (4.06.2009 - 08:49) sergeiss написал(а):
Цитата (Юрий Шу @ 4.06.2009 - 09:30)
Цитата
$obj->Article( $title, $author, "Нету нифига");

А что значит вот эта строка?

Это вызов написанной тобой же функции, для объекта $obj.

Спустя 4 минуты, 22 секунды (4.06.2009 - 08:53) Mizka написал(а):
Цитата
Это вызов написанной тобой же функции, для объекта $obj.

кажется здесь только передаются параметры $obj, а функция (метод) вызывается здесь:

PHP
$obj->showArticle();

Спустя 3 часа, 34 минуты, 24 секунды (4.06.2009 - 12:28) glock18 написал(а):
круто, но вообще то странно. В php4 (php5 тоже поддерживает такой синтаксис) возможно задание конструктора класса при помощи одноименной функции (как в C).

PHP
$obj=new Article;
$obj->Article$title$author"Нету нифига");


Должен выглядеть так:

PHP
$obj=new Article$title$author"Нету нифига");


поскольку при создании объекта Article уже запускает функцию Article.

И вообще странные комментарии по поводу интерпретации этой строки
PHP
$obj->Article$title$author"Нету нифига");

здесь всего навсего вызывается метод объекта, а уже ему, этому методу (а не классу и не объекту) передаются параметры (не класса и не объекта опять).
Надеюсь, что вы просто мысли выразили неправильно smile.gif

Спустя 2 минуты, 46 секунд (4.06.2009 - 12:30) glock18 написал(а):
А насчет конструктора - функция _construct появилась только в 5 php, но это не значит, что до этого не было конструкторов вообще. Просто использование этой функции дает возможность не привязывать имя конструктора к имени класса, что поможет избавить от лишних переделок (и возможных ошибок) при переименовании класса. Фактически, между _construct и Article конкретно в этом случае для php5 разницы не будет, а php4, я думаю, воспримет _construct как простую функцию.

Спустя 14 дней, 2 часа, 2 минуты, 33 секунды (18.06.2009 - 14:33) gooder отдыхающий написал(а):
Цитата (sergeiss @ 3.06.2009 - 14:53)
Цитата (gooder @ 3.06.2009 - 15:41)
Цитата (sergeiss @ 3.06.2009 - 12:57)
Даже не вникая в суть скрипта, с ходу вопрос: почему $_GET["art_create"]), хотя должно быть $_POST["art_create"]), т.к. используется форма?

а что, все формы только постом передают данные?

Может я и погорячился немного rolleyes.gif Просто привык, что из формы (мне лично) удобнее передавать ПОСТом, и для меня это некий "стандарт" уже стал.

и поиск тоже постом?

Спустя 44 минуты, 14 секунд (18.06.2009 - 15:17) sergeiss написал(а):
Цитата (gooder @ 18.06.2009 - 15:33)
и поиск тоже постом?

Вопрос не понял, честно говоря. При чем тут именно поиск? Для формы в HTML какая разница, для чего я буду использовать данные?

Спустя 3 дня, 2 часа, 12 минут, 51 секунда (21.06.2009 - 17:30) gooder отдыхающий написал(а):
sergeiss, поиск тут именно при том, что передавать постом в его случае — моветон

Спустя 15 часов, 3 минуты, 58 секунд (22.06.2009 - 08:34) sergeiss написал(а):
Цитата (gooder @ 21.06.2009 - 18:30)
sergeiss, поиск тут именно при том, что передавать постом в его случае — моветон

ДЫК!!!

Почему, я так и не понял? Что тут "моветонного", т.е. плохого?

Спустя 12 минут, 20 секунд (22.06.2009 - 08:46) twin написал(а):
Цитата
sergeiss, поиск тут именно при том, что передавать постом в его случае — моветон

Любопытно... Эт почему так?

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

Спустя 1 день, 2 часа, 59 минут, 4 секунды (23.06.2009 - 11:45) gooder отдыхающий написал(а):
Цитата (twin @ 22.06.2009 - 08:46)
нельзя поделиться ссылкой. Впринципе да, не очень удобно...

.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.