Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
21 / 44 / 11
Регистрация: 08.02.2018
Сообщений: 443

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

30.03.2018, 14:46. Показов 1061. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.03.2018, 14:46
Ответы с готовыми решениями:

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

Передача значения переменной из одного файла в другой через ссылку
Всем привет! Задача вроде бы простая и ответ есть вот тут: https://www.cyberforum.ru/php-beginners/thread722702.html И даже работает...

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

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

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

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

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

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

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

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

Добавлено через 43 секунды
Цитата Сообщение от ytf Посмотреть сообщение
userparam.php?del=".$_SESSION['id_user']."&del=1
Да там в первом параметре id хотел написать забыл исправить.
А сам процес ООП в этом скрипте есть?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
30.03.2018, 18:53
Цитата Сообщение от maxoun Посмотреть сообщение
Различные операции выполняются вне класса, в классе я подгатавливаю и передаю параметр.
Какой-то лишний геморрой.
Цитата Сообщение от maxoun Посмотреть сообщение
А какая логика должна быть тогда?
Повторюсь, смотрите паттерны ActiveRecord и DataMapper.
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
30.03.2018, 19:07
Цитата Сообщение от maxoun Посмотреть сообщение
А сам процес ООП в этом скрипте есть?
я не пользуюсь ооп, кроме случая https://github.com/plohoyav/php_mysql_upros
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
30.03.2018, 22:23
Если этот класс служит чем-то типа модели, то наверное есть смысл в наследовании класса Base. Вместо многочисленных require сделайте нормальную автозагрузку и наверное надо бы задуматься об исключениях (Exception) вместо простого exit
0
21 / 44 / 11
Регистрация: 08.02.2018
Сообщений: 443
31.03.2018, 09:26  [ТС]
FloppyDisc, Да согласен на счет исключений, подскажите пожалуйста, код хотябы пахнет ООП?
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
31.03.2018, 21:36
Ну вроде и пахнет, я просто логики самого класса не понимаю чет. Я бы не стал передавать ГЕТ параметры в конструктор, они же суперглобальные как и те же сессии. Для более красивого использования глобальных переменных можно сделать обертки типа 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.03.2018, 21:36
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru