За последние 24 часа нас посетили 16529 программистов и 1679 роботов. Сейчас ищут 846 программистов ...

Подскажите чайнику

Тема в разделе "PHP для новичков", создана пользователем GoldenFILL, 16 мар 2017.

  1. GoldenFILL

    GoldenFILL Активный пользователь

    С нами с:
    16 мар 2017
    Сообщения:
    20
    Симпатии:
    1
    Адрес:
    Россия, Республика Крым, Симферополь
    Господа. Ну ... звэняйте. На PHP пробую писать уже вторую неделю. Еще пока сильно туплю. Предпринял попытку изучаю PHP - исключительно для себя.
    Посмотрите код, кому не влом.
    В данном конкретном случае стоит задача сформировать строку запроса (SELECT) к SQL серверу.
    Эти два класса вырваны из контекста моей задумки сделать некий майфрейм для работы с базой данных. Просьба к ГУРУ подсказать много ли здесь наворочено лишнего?
    Во сам код:
    Код (Text):
    1.  
    2. class sql_base{
    3.  
    4.     /**
    5.      * @param type $val Значение, которое будет подставляться к WHERE
    6.      * @return $val Водвращает пришедшее значение, <p>
    7.      * только в зависимости от типа одевает его в кавычки
    8.      */
    9.     function setoftype($val){
    10.         switch (gettype($val)) {
    11.             case 'integer':  return $val;
    12.             case 'boolean' : return ($val)? '1': '0';
    13.             default : return "'".$val."'";
    14.         }
    15.     }
    16.  
    17.     function get_conditions($Sql, $Params){
    18.         $Keys = array();
    19.         $Values = array();
    20.         foreach($Params as $key => $val) {
    21.             $Keys[] = '{'.$key.'}';
    22.             $Values[] = $this->setoftype($val);
    23.         }
    24.         return str_replace($Keys, $Values, $Sql);
    25.     }
    26.  
    27.     function getfields($Params, $srtQuery){
    28.         $Result = '';
    29.         foreach ($Params as $i => $value) {
    30.             $Result .= $value . ((Count($Params) > $i+1 )? ', ' : '');
    31.         }
    32.         return str_replace('{fields}', $Result, $srtQuery);
    33.     }
    34.  
    35. }
    36.  
    37. class sql_select extends sql_base {
    38.     // Шаблон
    39.     private $srtQuery = 'SELECT {fields} FROM {table} WHERE {conditions}';
    40.  
    41.     public function __construct($fields, $table, $conditions, $params) {
    42.         $this->define_fields($fields);
    43.         $this->define_table($table);    
    44.         $this->define_conditions($conditions, $params);    
    45.     }
    46.  
    47.     function define_fields($fields) {
    48.         $this->srtQuery = $this->getfields($fields, $this->srtQuery);
    49.         return $this;
    50.     }
    51.  
    52.     function define_table($table) {
    53.         $this->srtQuery = str_replace('{table}', $table, $this->srtQuery);
    54.         return $this;
    55.     }
    56.  
    57.     function define_conditions($conditions, $params) {
    58.         $this->srtQuery = $this->get_conditions(str_replace('{conditions}', $conditions, $this->srtQuery), $params);
    59.         return $this;
    60.     }
    61.  
    62.     function getQuery(){
    63.         return $this->srtQuery;
    64.     }
    65.  
    66. }
    67.  
    68. // Значения этих переменных будет формироваться в классе моделей таблиц и
    69. // и в других точках реализации кода программы
    70. // Здесь значения приведены для примера (разработки)
    71. $fields = array('id', 'name', 'mail', 'IsBanned');
    72. $Mail = 'goldenfill@mail.ru';
    73. $params = array('Id' => (int)1, 'Mail' => $Mail, 'IsBanned' => false);
    74. $conditions = "Id = {Id} and Mail = {Mail} and IsBanned = {IsBanned}";
    75.  
    76. // (new sql_select($fields, 'RFUsers', $conditions, $params))->getQuery()
    77. // Эта конструкция непосредственно формирует строку SQL запроса
    78. print (new sql_select($fields, 'RFUsers', $conditions, $params))->getQuery();
     
    #1 GoldenFILL, 16 мар 2017
    Последнее редактирование: 16 мар 2017
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Пытаешься сделать Query Builder? Запрос от sql-injection очищаешь?
     
  3. GoldenFILL

    GoldenFILL Активный пользователь

    С нами с:
    16 мар 2017
    Сообщения:
    20
    Симпатии:
    1
    Адрес:
    Россия, Республика Крым, Симферополь
    Ну, что-то подобное - да.
    sql-injection - это что? Дело в том, что я никогда не занимался PHP вообще. Писал в делфях, бейсике, C#, но это было ОООчень давно.
    Дело в том, что в данной реализации я только формирую строку запроса, что бы как-то ее можно было потом универсально использовать, включая и сложные (вложенные) запросы.
     
    #3 GoldenFILL, 16 мар 2017
    Последнее редактирование: 16 мар 2017
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    В создании программ, нельзя доверять данным которые приходят от пользователей, получается защитное программирование, надо либо данные проверять или экранировать. Ещё нужно незнакомые слова искать самостоятельно в поиске, например yandex, google. Только после этого спрашивать, что не понятно, потому что это быстрее чем ждать ответа.Вот по безопасности для начала http://phpfaq.ru/tech/safety

    По каким книгам изучаешь PHP, MySQL?

    Хочешь научиться? Если нет, то можно взять готовые библиотеки.
     
  5. GoldenFILL

    GoldenFILL Активный пользователь

    С нами с:
    16 мар 2017
    Сообщения:
    20
    Симпатии:
    1
    Адрес:
    Россия, Республика Крым, Симферополь

    Это понятно. Спасибо за ссылку

    Да ни по каким. Гуглю информацию

    Да мне интересно самому это реализовать. От безделия решил выучить язык (пенсионер). Хотя все языки в сущности одинаковы. Разница только в некоторых особенностях синтаксиса и в некоторых фишках.
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Про поиск это отлично, но лучше читать книгу там как инструкция к телевизору, от начала до конца по возможности.
    Читай книги свежие (2016/2017 год), по HTML, CSS, JavaScript, PHP, MySQL. Всё это в отдельных книгах есть, там по подробнее.
    Вот по PHP http://www.ozon.ru/context/detail/id/137538198/ более менее книга.
    Это посмотри https://en.wikipedia.org/wiki/PHP_Standard_Recommendation
    Ещё может понадобиться знания по администрированию Linux,
    почитай что такое VirtualBox например, образ turnkeylinux.

    Посмотри функциональные, например Erlang, так для развития кругозора.

    Посмотри что такое Query Builder, ActiveRecord, ORM это может помочь
     
  7. GoldenFILL

    GoldenFILL Активный пользователь

    С нами с:
    16 мар 2017
    Сообщения:
    20
    Симпатии:
    1
    Адрес:
    Россия, Республика Крым, Симферополь
    denis01 нравится это.
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в документации по пхп очень много внизу каментов, которые отсортированы по заплюсованности. там разобраны почти все ситуации, связанные с темой страницы.
    Например http://php.net/manual/en/function.parse-str.php
     
    denis01 нравится это.