Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: ООП
Войти
Регистрация
Восстановить пароль
 
maxoun
-79 / 45 / 10
Регистрация: 08.02.2018
Сообщений: 443
1

Передача ID через ссылку

30.03.2018, 14:46. Просмотров 255. Ответов 8
Метки нет (Все метки)

Всем привет, подскажите пожалуйста.

К примеру я передаю для удаления страницы id=5.
Как лучше будет передать id? В сессии , или в открытом ввиде?

Правильно ли такое решение?
При удалении проверяю передаваемый параметр, а также на имя в сессии.

PHP
1
2
3
4
5
foreach($text as $key)
    {
        $session->start('id_user',$key['id']);
        echo "<a href=userparam.php?del=".$_SESSION['id_user']."&del=1>Удалить</a>";
    }

Второй вопрос. я написал метод, который при передаче параметра , удаляет,обновляет,добавляет.
Задача моя состоялось короткий код и чтобы много раз не писать одно и тоже.
Только вот меня мучает одно, ПРАВИЛЬНО ЛИ Я ЭТО СДЕЛАЛ?

Скрипт работает, вот только похож ли он на ООП? Вроде бы код укоротил, приятно читать, и не приходиться повторять один и тот же код.

Вот скрипт это КАША или что , пожалуйста поправьте что да как?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
require 'session.php';
$session = new Session();
class ParamUser
{
    private $id,$del,$text,$base,$id_user,$user_pid;
 
    public function __construct($id, $number)
    {
        require 'base.php';
        $this->base = new Base();
        $this->id = intval($id);
        $this->del = intval($numberl);
        $this->id_user = $this->base->escape($_SESSION['id_user']);
        $this->user_pid = $this->base->escape($_SESSION['user_pid']);
    }
 
 
    //Подготавливаю sql запрос если параметр передался проверяю его если он есть то возваращаю.
    public function operation()
    {
        $this->text = $this->base->select("SELECT id FROM user WHERE id='".$this->id_user."' AND ses='".$this->user_pid."' ",'mysite.php');
        return $this->text;
    }
 
    //если параметр есть и если id равен параметру делаем операцию параметр передаем в метод
    public function vivod($sql,$var)
    {
        foreach($this->operation() as $key)
        {
            if($key['id'] == $this->id)
            {
                if($this->base->query($sql,$this->id_user))
                { header("location: ".$var." "); }
            } else { exit('Неправильный параметр'); }
        }
    } 
    
}
?>
Вот здесь передаю различные команды на удаления и изменения.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
if(isset($_GET['id']) && isset($_GET['del']))
{
    require __DIR__.'/class/paramuser.php';
    $user = new ParamUser($_GET['id'],$_GET['del']);
    if($session->hay('user'))
    {
        switch($_GET['del'])
        {
            case '1':
            echo $user->vivod('DELETE FROM user WHERE id=?','index.php');
            $session->stop('user');
            $session->stop('id_user');
            $session->stop('user_pid');
            break;
            case '2':
            echo "Удаление"; 
            break;
            case '3':
            echo 'Добавление';
            break;
            default:
            exit('неправильный параметр');
            break;
        }
    } else exit('Нет сессий');
}
else 
{
    header('location: index.php');
}
?>


Я подумал чтобы может вместо этой красоты , унаследовать ParamUser, и сделать такие методы как delete(),update что бы я мог выводить каждый метод отдельно.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            case '1':
            echo $user->vivod('DELETE FROM user WHERE id=?','index.php');
            $session->stop('user');
            $session->stop('id_user');
            $session->stop('user_pid');
            break;
            case '2':
            echo "Удаление"; //UPDATE
            break;
            case '3':
            echo 'Добавление';
            break;
            default:
            exit('неправильный параметр');
            break;




[b]В общем скажите пожалуйста, является ли скрипт как бы объектным? Или эта процедурная каша?[/b
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2018, 14:46
Ответы с готовыми решениями:

Передача переменной через ссылку
Привет Нажимаю на ссылку index.php?doska=Guest449_&amp;tip=1,и в самом верху index.php прописал 3...

Передача значения переменной из одного файла в другой через ссылку
Всем привет! Задача вроде бы простая и ответ есть вот тут:...

Как через div вызвать ссылку?
в общем так, имеется БД в ней таблица, в таблице 4 столбца соответственно id, name, price, pict....

Передача данных в форму через ссылку
Как, зная скрыпты передачи данных, передать через ссылку данные на сайт?

Как методом post передать данные не через submit, а через ссылку?
У меня сейчас выводится кнопка с ником, при нажатии на которую выводится подробная информация о...

8
ytf
236 / 256 / 184
Регистрация: 15.08.2017
Сообщений: 1,483
30.03.2018, 18:14 2
Цитата Сообщение от maxoun Посмотреть сообщение
В сессии , или в открытом ввиде?
чтобы сохранить значение в сессию его надо сначала передать, хотя возможен вариант, когда пользователь открывает статью с номером, в сессию сохраняется значение номера, но есть ли запрет открытия сразу двух номеров? запрет открытия обычно отсутствует, либо реализуется в виде запрета правого клика, чтобы пользователь не мог открыть ссылку правым кликом, а все внутренние ссылки сделать прямыми, то есть без target=_blank

я не знаю, как лучше его передать, но поскольку обращение к переменной $_GET['del'] одно, то и результат она выдаст один, а вы пробуете передать два значения в одной переменной

Код
userparam.php?del=".$_SESSION['id_user']."&del=1
0
Jodah
Эксперт PHP
3245 / 2758 / 1163
Регистрация: 01.08.2012
Сообщений: 9,613
30.03.2018, 18:28 3
Цитата Сообщение от maxoun Посмотреть сообщение
К примеру я передаю для удаления страницы id=5.
Как лучше будет передать id? В сессии , или в открытом ввиде?
Причём тут сессии? Они не для этого предназначены.

Передавайте id через форму методом POST.

Цитата Сообщение от maxoun Посмотреть сообщение
я написал метод, который при передаче параметра , удаляет,обновляет,добавляет.
Не вижу этих операций в классе. Если хотите реализовать CRUD - смотрите паттерны Active Record и DataMapper.

Цитата Сообщение от maxoun Посмотреть сообщение
Вот скрипт это КАША или что , пожалуйста поправьте что да как?
Лично я не вижу логики в этом классе.

Как минимум нужно убрать все require (и вне класса, и в конструкторе). Один класс - один файл. И экземпляр Base передавать в конструктор, а не создавать внутри.
0
maxoun
-79 / 45 / 10
Регистрация: 08.02.2018
Сообщений: 443
30.03.2018, 18:41  [ТС] 4
Цитата Сообщение от Jodah Посмотреть сообщение
Не вижу этих операций в классе.
Различные операции выполняются вне класса, в классе я подгатавливаю и передаю параметр.
Цитата Сообщение от Jodah Посмотреть сообщение
Причём тут сессии? Они не для этого предназначены.
Согласен можно просто передать параметр и проверять что да как.
Цитата Сообщение от Jodah Посмотреть сообщение
Лично я не вижу логики в этом классе.
А какая логика должна быть тогда?

Добавлено через 43 секунды
Цитата Сообщение от ytf Посмотреть сообщение
userparam.php?del=".$_SESSION['id_user']."&del=1
Да там в первом параметре id хотел написать забыл исправить.
А сам процес ООП в этом скрипте есть?
0
30.03.2018, 18:41
Jodah
Эксперт PHP
3245 / 2758 / 1163
Регистрация: 01.08.2012
Сообщений: 9,613
30.03.2018, 18:53 5
Цитата Сообщение от maxoun Посмотреть сообщение
Различные операции выполняются вне класса, в классе я подгатавливаю и передаю параметр.
Какой-то лишний геморрой.
Цитата Сообщение от maxoun Посмотреть сообщение
А какая логика должна быть тогда?
Повторюсь, смотрите паттерны ActiveRecord и DataMapper.
0
ytf
236 / 256 / 184
Регистрация: 15.08.2017
Сообщений: 1,483
30.03.2018, 19:07 6
Цитата Сообщение от maxoun Посмотреть сообщение
А сам процес ООП в этом скрипте есть?
я не пользуюсь ооп, кроме случая https://github.com/plohoyav/php_mysql_upros
0
FloppyDisc
Особый статус
605 / 206 / 161
Регистрация: 18.11.2015
Сообщений: 1,046
30.03.2018, 22:23 7
Если этот класс служит чем-то типа модели, то наверное есть смысл в наследовании класса Base. Вместо многочисленных require сделайте нормальную автозагрузку и наверное надо бы задуматься об исключениях (Exception) вместо простого exit
0
maxoun
-79 / 45 / 10
Регистрация: 08.02.2018
Сообщений: 443
31.03.2018, 09:26  [ТС] 8
FloppyDisc, Да согласен на счет исключений, подскажите пожалуйста, код хотябы пахнет ООП?
0
FloppyDisc
Особый статус
605 / 206 / 161
Регистрация: 18.11.2015
Сообщений: 1,046
31.03.2018, 21:36 9
Ну вроде и пахнет, я просто логики самого класса не понимаю чет. Я бы не стал передавать ГЕТ параметры в конструктор, они же суперглобальные как и те же сессии. Для более красивого использования глобальных переменных можно сделать обертки типа getQueryParams(), isGet(), isPost() ... , посмотрите в сторону фреймворков.

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

Цитата Сообщение от maxoun Посмотреть сообщение
Я подумал чтобы может вместо этой красоты , унаследовать ParamUser, и сделать такие методы как delete(),update
Да, нужны атомарные функции, чтобы не нагромаждать "толстые" методы.

Ваш класс чем-то похож на "модель" - этакий класс связанный с БД, поэтому, не стоит изобретать велик и лучше глянуть, как уже говорили, в сторону ActiveRecord, DataMapper или QueryBuilder, вот замечательный пример последнего: https://github.com/usmanhalalit/pixie не раз использовал ни где не подводил, на его основе так же можно построить подобие mini-ActiveRecord при желании.

Или хотя бы унаследуйте класс Base (UserParam extends Base), еще искренне не понимаю зачем метод ParamUser::operation().
Желательно чтобы в файле с классом не было ничего, кроме самого класса, никаких экземпляров не создавать, можно только namespace пуста строка и use.

Вам нужно почитать правила оформления кода стандарты: PSR-1, PSR-2, например, область видимости нужно указывать для каждого свойства и каждая из них должна располагаться на новой строке.

Или те же if, switch, foreach - фигурные скобки не переносятся на новую строку, как с классами, методами и функциями, а остаются на том же уровне с пробелом после скобок. Про свич отдельно, вообще не читабельно, фигурная скобка, case располагается правильно, но его тело так же должно располагаться с отступами break на том же уровне что и тело case.
0
31.03.2018, 21:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2018, 21:36

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

C#. Передача массива СОМ интерфейсу принимающему ссылку
C#. Передача массива СОМ объекту принимающему ссылку. проблема вот в чем -- есть СОМ интерфейс...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru