Ответы пользователя по тегу PHP
  • Как через ajax получить ответ из страницы php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    для аякса предусмотрены колбэк функции, в частности онсаксесс(дата), где в "дата" попадает ответ сервера. То есть код в этой функции будет вызываться в случае успешного выполнения скрипта на сервере (статус 200). Пишете там свое изменение статуса корзины и все, профит.
    Ответ написан
    4 комментария
  • Как можно сделать свою систему проверки на плагиат на сайт?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Теперь вопрос можно ли написать свою систему плагиата
    Можно, разрешаю, пишите. А если серьезно - аналитическая составляющая такого продукта будет стоить как отдельный маленький гугл. Не считая вычислительных мощностей и сложности самого кода, там еще и база статей и текстов с полноформатным аналитическим поиском должна быть, а ее надо еще откуда-то взять, что тоже весьма нетривиальная задача. Про размер этой базы и стоимость хранения я вообще молчу. А ее еще и поддерживать в актуальном состоянии нужно...

    или внедрить какой то существующий на свой сайт?
    Есть сервисы с доступным апи, читайте что умеют, сколько стоят, что предлагают и как использовать на соответствующих страничках сервиса.

    Есть ли гайды, туториалы?
    Для подключения апи достаточно понимания принципов работы таких сервисов и доки от поставщика. В случае самостоятельной реализации думаю общие принципы можно посмотреть в каких-нибудь сторис от гугл/яндекс разработчиков, они часто работают с полнотекстовым нечетким поиском...
    Ответ написан
  • Разрешить доступ к сайту только с определенной страны?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Комментировать
  • Как правильно заменить текст в html?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    По ходу решения - самое простое решение - регулярки.
    Что-то типа: /(<script.*-(1|2)\.gif.*<\/script>)/gsU и использовать в preg_replace.
    Ответ написан
    Комментировать
  • Почему не приходят письма php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Отправка почты через дефолтный mail() глупая затея. Во первых, на продакшн сервере будут совершенно другие настройки почтового сервера, и не всегда их можно поправить и не всегда они подходят для нормальной работы.
    Во вторых, вы не контролируете из кода процесс отправки, а только передаете серверу задачу на отправку, после чего полномочия пхп все... То есть отладка или выявление проблемы становится в разы сложнее, если вообще возможной.

    Для нормальной отправки, а так же для контроля над всей цепочкой передачи сообщения, используются готовые протестированные и настроенные библиотеки, тот же phpMailer или Symfony Mailer, или любой другой настроенный инструмент для отправки почты. Все они обладают широким функционалом настройки, простым интерфейсом и понятной отладочной информацией. Тот же phpMailer в вербоуз моде расскажет вам все что происходит при соединении и отправке сообщения со всеми подробностями.
    Ответ написан
    Комментировать
  • Не могу авторизоваться, почему?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    так, давайте по порядку:
    login = filter_var(trim($_POST['login']), FILTER_SANITIZE_STRING);
    $pass = filter_var(trim($_POST['pass']), FILTER_SANITIZE_STRING);
    Во первых - зачем? Вы здесь не вносите никаких данных в систему, вы просто проверяете данные от пользователя с данными в бд.
    Во вторых - если у вас есть правила для логина и пароля - надо их и применять, а не втыкать абсолютно бесполезные фильтры.

    $pass = md5($pass."ghjsfkld2345");используйте встроенные функции, password_hash и password_verify для работы с паролями.

    $result = $mysql->query("SELECT * FROM `users` WHERE `login` = '$login' AND `pass` = '$pass '");
    Читаем про подготовленные выражения. Без них рано или поздно словите инъекцию. И начинать надо сейчас, на этапе обучения, и привыкнуть что по другому с переменными в запросах не работают. Так же, по уму подключение желательно вынести отдельно и добавить настройки. Рекомендую использовать PDO драйвер подключения к бд, он работает чуть быстрее и по функционалу побогаче.

    Warning: count(): Parameter must be an array or an object that implements Countable in D:\OSPanel\domains\Site1\auth.php on line 14
    по тому что читаем доку -
    fetch_assoc — Fetch the next row of a result set as an associative array
    Соответственно, если запрос пустой, то фетчить нечего. Для проверки существует num_rows.

    Выводит: "Такой пользователь не найден." Но в БД такой пользователь есть зарегестрированный, все данные авторизации правильные, а он выводит, что нету такого пользователя.
    Программу не на*бешь. Если говорит что нету, значит нету. А если не находит то что есть, значит вы не правильно ищете, что легко проверить. Вангую что запрос будет совершенно не таким как вы ожидаете:
    ...
    $query = "SELECT * FROM `users` WHERE `login` = '$login' AND `pass` = '$pass'";
    var_dump('check: ',$login, $pass,$query); 
    $result = $mysql->query($query);
    ...


    UPD: абсолютно верно подмечено Adamos - `pass` = '$pass ' никогда ничего не найдет из-за пробела в условии.
    Ответ написан
    Комментировать
  • MySQL. Поиск в Базе данных по одному параметру?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых - научитесь разделять код и представление, винегрет из кода и разметки не то что отлаживать, читать тяжело.
    Во вторых - $result полученный в первом куске вы нигде не используете, ни в выводе, ни в вычислениях.
    Ну и в третьих - в последнем куске вы затираете ранее полученный результат выборки, так что смысл в первой выборке полностью теряется.
    Ответ написан
    Комментировать
  • Есть ли библиотека генерации regex для работы с числами?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    inilim2,
    не стал проводить все задачи, накинул насущные.
    Ок, тогда смысл в такой библиотеке становится еще более... никаким. Вы хотите в тексте искать совпадения по произвольному набору чисел и при этом еще выполнять какие-то операции над ними и "третьим" числом, что как бы разные задачи, логично предположить что это будут как минимум 2 разные библиотеки.

    Прошелся по гитхабу, там только простые билдеры, заточенные на строки.
    так у вас и в тексте строки, "7382-8933" по сути строка. Да, для чисел есть специальный \d, но ничего не мешает представить его в виде диапазона символов 0-9.

    Мое имхо - проще настругать 5-6 функций, и не морочиться с поиском того-не-знаю-чего. Ну или объясните внятно что вы хотите от библиотеки...
    Ответ написан
    Комментировать
  • Как прочитать данные из двух таблиц одновременно?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Ответ написан
    Комментировать
  • Как скрыть часть кода, до действия?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    по событию добавляйте элемент яваскриптом.
    Ответ написан
  • Почему в файл добавляется по две строки?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    <?php $filename = 'D:\\Testfolder\\Тест.txt';
    $cont = file_get_contents($filename);
    $enc =  mb_detect_encoding($cont, 'UTF-8', true);
    $text = iconv($enc,'UTF-8',$cont);
    var_dump("\nbefore save: "$text);
    $text .= '
    Ба';
    file_put_contents($filename, $text);
    var_dump("\nafter save: "$text);
    Ответ написан
    Комментировать
  • Как сделать SQL запрос из двух таблиц?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Пока на ум приходит получить все категории, потом в цикле пройтись по ним и...

    Естественно это не делается так. Такие задачи решаются на стороне бд через джоин таблиц. Не считая ошибки синтаксиса и отсутствия лимита, запрос в ответе Vindicar подойдет. Схема хранения не самая лучшая, так как по сути у вас получается один-ко-многим (одна категория ко многим постам), и если категорий на 1 пост будет больше 1, вся структура идет в мусор. Более качественным решением все же будет многие-ко-многим между постами и категориями.
    Ответ написан
    1 комментарий
  • Как отловить баг на продакшене?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    боюсь, такое логирование уложит спать боевой проект. Хотя ненадолго можно попробовать.
    Я про логирование запросов к Mongo..
    Во первых все логировать не нужно. Можно тупо в коде доктрины апдейты только ловить и логировать, можно иначе извернуться, но вам нужны, очевидно, только апдейты. Которых сомневаюсь что мильён в секунду. Ну и во вторых - просто малореально что-то другое придумать...
    Ответ написан
    Комментировать
  • Как лучше организовать запрос к БД на основе данных?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    ведь при использовании placeholder, как указывать только те параметры, которые добавлены в сам текст запроса ?
    Гуглите построитель запросов PHP. Или используйте готовые фреймворки, куда они уже встроены.
    Ответ написан
    Комментировать
  • Вывод из бд данных и присваивание им значение?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Очевидным решением выглядит поле типа tinyint и таблица значений со связью 1 ко многим. При запросе используем join по соответствующей связи полей, получая весь набор, включающий имя статуса (ACTIVE, BLOCKED и тд).
    Ответ написан
    Комментировать
  • Как вывести одиночное значение из массива?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $stmt = $pdo->prepare("SELECT * FROM category WHERE 'id'=:id AND 'name'=:name");
          $stmt->execute(['id'=>$id, 'name'=>$name]); //откуда эти ид и нэйм? И зачем нэйм если есть ид?
          $res = $stmt->fetch(PDO::FETCH_ASSOC);
          if ($id = $_GET["cat_id"]) { //опять, что за ид и почему мы его сравниваем с гет переменной?
            echo $res[$id];
          }

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

    массив гет я как раз не хотел в pdo запихивать..не знаю чет мне кажется опасно это
    Вы запихиваете не в pdo, а в prepared statements, так что безопасно. Опять же - хорошо что используете и попался толковый пример, плохо что не понимаете зачем это и как работает. В итоге код должен быть именно как написано у SagePtr
    $stmt = $pdo->prepare("SELECT * FROM category WHERE `id`=:id");
    $stmt->execute(['id'=>$_GET['cat_id']]);
    Ответ написан
    3 комментария
  • Почему при отправке данных на почте пустые сроки?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Вариантов, собсно, 2:
    1) Не туда
    2) Не так

    В первом случае убедитесь что вы отправляете данные на нужный роут. Вероятность не большая, но есть.

    Во втором случае достаточно проверить в каком формате вы отправляете данные, и какие данные приходят. Формат отправки можно посмотреть в нетворке, а в коде первыми строками проверить что приходит в $_POST - var_dump($_POST);exit(); Возможно (и похоже на то) что вы отправляете форму аяксом, а данные передаете в теле как жсон например. Естественно, при этом ловить что либо в пост переменных бесполезно ), тут нужно будет щупать php://input
    Ответ написан
    4 комментария
  • Как упростить примитивную тернарную логику?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых нафига здесь тег лары?
    Во вторых - что вы ставите целью данного кода? return early? Тогда все норм и сокращать не надо.
    В других случаях может быть что угодно, но никакой крамолы в приведенном коде вроде нет, или давайте более развернутый код для понимания проблемы.

    Если смысл в сокращении количества вызовов, то
    $res = anyFunc($var); if(!empty($res))return $res; или, как написал коротко iljaGolubev, if($ret= anyFunc($var)) return $ret;, но я предпочитаю разбивать присвоение и проверку в разных строках, для читаемости.
    Ответ написан
  • Почему функция обрабатывается лишь раз?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    ini_set('error_reporting',E_ALL);
    ini_set('display_errors', 1);
    Ответ написан
    2 комментария
  • Как вернуть данные после обработки POST?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Для начала, обработка ошибок не должна ничего выводить в месте где возникла ошибка. Ошибки всегда накапливаются в переменной (обычно в массиве), в конце блока проверок проверяется есть ли ошибки в накопительной переменной, и уже исходя из логики идет либо запись в бд, либо возврат ошибок пользователю.

    В случае аякса возвращается json с ошибками, хорошей практикой будет завести отдельное поле error, которое служит для яваскрипта сигналом обработки ошибки, и поле, содержащее текст ошибки. После вывода ошибки через echo, скрипт завершают - exit(); В яваскрипте аякса отправленные данные попадают в переменную, прописанную как аргумент success функции - success(data){...}

    В случае субмита формы - массив с ошибками пишется в сессию, туда же записываются все принятые значения из $_POST, чтобы на исходной форме пользователю не приходилось снова все вписывать в поля. Ну и выполняется редирект на форму, поля пишутся из сессии, выводится ошибка из сессии, сессия чистится. Считается хорошим тоном поставить exit(); после редиректа, хотя в современных версиях пхп скрипт завершается автоматически.
    Ответ написан
    Комментировать