Ответы пользователя по тегу PHP
  • Плохо ли создавать проекты с нуля? Что значит быть про?

    И вот никак не могу понять, зачем писать ООП классы для, например, изменения группы пользователя, когда это делается 1 строчкой?


    Пишутся не классы. Пишутся объекты. И объект пишется не под изменение какого-либо свойства. Объект описывает пользователя всевозможными свойствами и методами. И в эту обёртку помещается метод изменения группы конкретного пользователя.


    //Типо ООП
    $user->delete;
    //Типо функция процедурная
    delete($user);
    //Один хрен же, нет?


    Так то оно один хрен, да только не один. Абстрактный пример.
    У вас, кроме $user, есть еще $group, $catalogue, $order и еще с десяток объектов, с которые вам нужно будет работать. Теперь представим, что вам нужно будет удалить объекты. В ооп стиле вам нужно будет просто вызвать метод ->delete для каждого объекта. А в процедурном вы будете писать 10 функций delete с разными названиями? Или одна, но внутри вы будете писать 10 проверок, что бы понять, какие данные к вам пришли и как их правильно обработать. А если таких объектов будет 100?

    В ооп есть свои + и -. И ни в коем случае ООП не является панацеей ото всех бед. Где-то процедурный стиль выиграет, где-то ооп. Как мне кажется, профессионал обязан понимать, когда и зачем использовать ту или иную технику или инструмент.

    UPD
    нужно проводить тесты над кодом

    И вы, вероятно, путаете понятия "тестировщик" и TDD
    Ответ написан
    7 комментариев
  • Как вывести такой формат даты в php?

    echo gmdate('Y-m-d') . "T" . gmdate('H:i:s') . date('P');
    Ответ написан
    Комментировать
  • Как предотвратить многократное выполнение функции php?

    Окей, а почему бы вам не снимать обработчик с кнопки именно с помощью js? Вы не привели пример вашего кода, потому приходится гадать на кофейной гуще.
    Вариант 1:
    Допустим, у вас есть обработчик и допустим, что вы используете jquery и аяксом отправляете данные на сервер.
    $("#button").click(function(data){
    
    	$(this).off();//Отключаем обработчики ВСЕХ событий висящих на данном элементе
            $.ajax({
    		method: "POST",
    		url: "pathToFile.php",
    		data: data,
    		success: function(result){
    			//А здесь включаем обработчик обратно, уже после выполнения вашей Php  функции и полчуения ответа от обработчика на сервере
    			$("#button").on(); 
    		}
        })
    });

    Естественно код выше - накаляканная за две секунды паста и абсолютно не работоспособна в ваших условиях. Так что если вам придется по душе данное решение - необходимо будет довести его до ума.
    Вариант 2
    На стороне сервера вам необходимо как-то идентифицировать пользователя, от которого приходит запрос. Как вы это сделаете - вопрос десятый.
    Самым простым вариантом, как мне кажется, будет использование БД.
    Создаете таблицу, в которую пишете те данные, по которым вы идентифицируете пользователя, и время, после наступления которого вашу функцию можно будет выполнить. К примеру это время запроса + 5 секунд.
    Ну а дальше при каждом последующем запросе теребите таблицу, берите из неё время, сравнивайте с текущим и решайте, обрабатывать запрос или нет.

    А можете, для уверенности, комбинировать эти два варианта
    Ответ написан
    Комментировать
  • Как найти разницу между соседними элементами массива?

    <?php
    $a = array(
        array(
            "year" => 0,
            "serial" => 0
        ),
        array(
            "year" => 0,
            "serial" => 13000
        ),
        array(
            "year" => 0,
            "serial" => 13640
        ),
        array(
            "year" => 0,
            "serial" => 14280
        )
    );
    
    $prev = $a[0]['serial'];
    
    for($i = 1; $i < count($a); $i++) {
    
        $diff = $a[$i]['serial'] - $prev;
        $prev = $a[$i]['serial'];
        $a[$i]['serial'] = $diff;
    }
    print_r($a);

    Результат
    Array
    (
        [0] => Array
            (
                [year] => 0
                [serial] => 0
            )
    
        [1] => Array
            (
                [year] => 0
                [serial] => 13000
            )
    
        [2] => Array
            (
                [year] => 0
                [serial] => 640
            )
    
        [3] => Array
            (
                [year] => 0
                [serial] => 640
            )
    
    )

    Ответ написан
    Комментировать
  • Как при нажатии на кнопку выполнить SQL запрос?

    Писал вам вчера, напишу и сегодня.

    В приведённом коде выше SQL запроса нет.
    Что бы отправить данные из формы в файл обработчика, вам нужно
    1) Обернуть ваш input в тег form.
    2) Указать тегу form необходимые аттрибуты: action="нужный вам файл.php" action="POST". Про остальные аттрибуты тега form информацию следует черпать из официальной документации по HTML от w3c.
    3) Добавить в форму кнопку с типом Submit.
    Так же изучите разницу между POST и GET.

    AJAX пока не трогайте - вам до него еще дорасти нужно.
    Ответ написан
    Комментировать
  • Не видит value. Как правильно передать значение в $_POST?

    В целом, товарищ Александр Шаповал прав - вам стоит поискать какой-то другой материал для освоения. К плохому привыкаешь быстро, а вот отвыкнуть потом - сложно.

    Лично я не очень понял один момент. В следующем коде вы пытаетесь получить значение $_REQUEST["id"] и положить его в value поля "idi"
    <input type='hidden' value=$_REQUEST["id"] name='idi' />

    Но смените атрибут hidden на text и вы увидите, что вместо значения из запроса в поле красуется строчка $_REQUEST["id"].
    Что бы сделать то, что вы хотите, положите $_REQUEST["id"] между открывающим и закрывающим тегами <?= ?> (Это короткая запись тега echo. Тут больше инфы про теги в PHP).
    Теперь поле input будет выглядеть вот так
    <input type='hidden' value='<?=$_REQUEST["id"]?>' name='idi' />


    Так же не стоит забывать, что вы всё таки записываете данные в атрибут поля, а любые данные стоит оборачивать
    кавычками.
    По сути - ничего страшного, если в вашем случае в этом самом $_REQUEST["id"] что-то будет, то оно упадёт в value без проблем. Но если вдруг $_REQUEST["id"] будет пустым, то в value упадёт весь текст тега справа от атрибута value, после знака = , вплоть до знака >. И в этом случае, вместо ожидаемого значения, в value будет лежать name='idi' /.
    Ответ написан
    Комментировать
  • Как посчитать уникальных посетитлей на сайте?

    Может перед записью стоит проверять HTTP_USER_AGENT, если он указан конечно, зашел ли к вам человек через браузер или бот?
    Ответ написан
    Комментировать