Задать вопрос
  • Как перенаправлять на 404?

    @Kostik_1993
    Web Developer
    function get_car_url($url) {
      global $dbh;
      $query = $dbh->prepare("SELECT * FROM `cars` WHERE `name_url` = ?");
      $query->execute([$url]);
    $car = $query->fetch(PDO::FETCH_ASSOC);
      if (!isset($car['id'])) {
        http_response_code(404);
        include('my_404.php');
        die();
      }
      return $car;
    }
    Ответ написан
    Комментировать
  • Как правильно сформировать запрос в MySql, не вижу ошибки?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вообще-то ошибка показывает на совершенно другую проблему.
    В вашем коде:
    FROM " . DB_PREFIX . "product_to_category ptc LEFT JOIN  . DB_PREFIX . "category_description"

    Тот же фрагмент в тексте ошибки:
    FROM oc_product_to_category ptcoc_category_description

    Куда делся LEFT JOIN oc_?

    А проблема с пустым $product_id решается элементарно. Достаточно предварительно проверять переменную и заменять её на фиктивное значение, например -1.
    Ответ написан
    Комментировать
  • Почему в бд не записываются строки содержащие текстовые символы?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    $q = mysqli_prepare($connection, "INSERT INTO `user_value` (`user_name`, `user_pass`) VALUES (?, ?)");
    $q->bind_param("ss", $user_names, $user_pass);
    $q->execute();


    run php code online
    Ответ написан
    Комментировать
  • Нужно ли для абстрактного класса применять интерфейс?

    Дело не в абстрактном классе. Symfony требует явной регистрации реализаций интерфейсов.

    Выглядеть это будет примерно так:
    services:
      ...
      App/Interfaces/UserRepositoryInterface:
        alias: App/Repositories/UserRepository


    Дока
    Ответ написан
    3 комментария
  • Как реализовать цепочки вызовов?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Для такой конструкции нужно возвращать инстанс класса из каждого метода
    <?php
    class FOO {
    	public function bar() {
    		echo "Method bar called" . PHP_EOL;
    		return $this;
    	}
    	public function baz() {
    		echo "Method baz called" . PHP_EOL;
    		return $this;
    	}
    }
    
    $foo = new FOO;
    $foo->bar()->baz();


    php execute online
    Ответ написан
    2 комментария
  • Как реализовать цепочки вызовов?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    class Foo {
      public function bar() {
        //  …
        return $this;
      }
      public function baz() {
        //  …
        return $this;
      }
      public function value() {
        //  …
        return 12;
      }
    }
    
    $foo = new Foo;
    echo $foo->bar()->baz()->value() // 12
    Ответ написан
    3 комментария
  • Почему данные пользователя не добавляются в базу данных?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Как нужно действовать (в принципе всегда):
    1) Проверить что форма срабатывает и делает запрос: открываем консоль разработчика в браузере - нетворк, субмитим форму - смотрим что форма сделала запрос к серверу. Если не сделала - разбираемся в консоли какие ошибки со скриптами и все чиним.
    2) В отсылаемом запросе смотрим данные, которые отправляет скрипт, а так же ответ сервера, на предмет ошибок. Если есть ошибки - исправляем.
    3) Проверяем данные которые пришли на сервер, делаем var_dump($_POST), смотрим - то ли пришло на сервер. Если что-то не пришло - возвращаемся на фронт и ищем ошибку в хтмл разметке и форме.
    4) Правильные данные сначала вставляем в отдельную переменную как строку запроса, а потом передаем ее на выполнение в $mysql->query(). Таким образом перед выполнением запроса можно тем же var_dump() вывести запрос и проверить его визуально на правильность, ну или вставить руками в бд через phpmyadmin или другой инструмент работы с бд. Посмотреть ошибки - исправить.
    5) Во всех случаях нужно использовать подготовленные выражения. Код станет на 3 строчки длиннее, но на 90% качественнее.
    Профит.
    Ответ написан
    Комментировать
  • Почему данные пользователя не добавляются в базу данных?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Так вставлять данные в БД нельзя. Нежелательно даже на локальном сервере в учебных целях. Это открытая дверь для SQL-инъекций. Лучше привязывать параметры, например так:
    $mysql = new mysqli("localhost", "root", "root", "medixer");
    $mysql->set_charset("utf8");
    
    $stmt = $conn->prepare("INSERT INTO `users` (`login_user`, `name`, `password`, `dob`, `region`, `telephone`, `email`) VALUES (?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("sssssss", $login, $name, $password, $dob, $region, $telephone, $email);
    $stmt->execute();
    
    $mysql->close();
    Ответ написан
    Комментировать
  • Проблема со вставкой аргументов в sql запрос python, в чем причина?

    Vindicar
    @Vindicar
    RTFM!
    Ни в коем случае не делайте так
    cur.execute("""INSERT INTO commands (user_id, date, command_name) VALUES (7 , {} , 'd')""".format(time_now))

    Поймаете SQL injection, да и косяков со строками тоже будет немеряно. На один вы уже наткнулись.
    Правильно будет так:
    cur.execute("INSERT INTO commands (user_id, date, command_name) VALUES (7 , ?, 'd')", (time_now,))

    В этом случае передаваемый аргумент будет правильно экранирован, завернут в кавычки и пр.
    Это написано в начале документации по модулю sqlite3, но ведь документацию читают только лузеры. правда же?
    Ответ написан
    1 комментарий
  • Как будет правильней?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Уважаемый, Вам нужно изучать основы MySQL. Ваша задача решается одним запросом и 3-мя строками кода.

    <?php
      $query = "SELECT  DATE(`time`) `Day`, SUM(`Profit`) `DaylyProfit`
    			FROM `history`
    			WHERE  `type` = 1 AND `time` > DATE_SUB(CURRENT_DATE, INTERVAL 6 DAY)
    			GROUP BY `Day`
    			ORDER BY `Day` DESC;";
    
    $result = $mysqli->query($query);
    
    $all = $result -> fetch_all(MYSQLI_ASSOC);
    
    
    echo json_encode($all);


    Test PHP MySQL online
    Ответ написан
    1 комментарий
  • Почему запрещён доступ к сайту из ajax?

    vabka
    @vabka Куратор тега Веб-разработка
    Потому что CORS.
    Если только для себя - можешь запустить браузер с выключением CORS (не помню, какой точно флаг)
    Если и для други- придётся поднять прокси.
    Ответ написан
    1 комментарий
  • Какие материалы или информацию можно изучить, чтобы решить эту задачу?

    @dmshar
    Что-то я понять не могу. "не разбираюсь в теме машинного обучения и подобного. Никогда не работала с этой темой" А откуда тогда могла взяться задача, которую вам НАДО (??) решить? Я вот тоже не разбираюсь абсолютно в химии, но понимаю, что для того, что-бы решать задачи - надо взять учебник и учить-учить-учить... и только потом браться за задачи. Причем, если задача не совсем тривиально-школьная, то вот "именно для нее" что-то изучать бессмысленно, надо наработать некоторую общую базу, а уж потом копать в нужную сторону. Или вы считаете, что машинное обучение - это настолько тривиально, что тут все по другому? И достаточно просто что-то "глянуть"? Очень "самоуверенно" (мягко говоря).

    А по существу вопроса - ну начните отсюда:
    https://ru.wikipedia.org/wiki/Машинное_обучение
    там и перечень литературы имеется.
    или отсюда
    https://ru.stackoverflow.com/questions/Книги-и-уче...
    или отсюда:
    https://ai-news.ru/2018/10/podborka_resursov_po_ma...

    А далее - по ссылкам. После примерно полугода-года упорного труда можно и к решению предложенной задачи приступать.
    Ответ написан
    Комментировать
  • Resource: что из себя представляю потоки в php?

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

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

    @Kirill-Gorelov
    С ума с IT
    Да сделай ты уже на хоть чем-то))))

    Ну будет у тебя разница в скорости между инструментами варьироваться час-два.....
    А так я за хардкор. чистый requests.
    Ответ написан
    5 комментариев
  • Как получить значение из многомерного массива php?

    @makboriska Автор вопроса
    foreach ($arrays as $array) {
    		echo '<pre>';
    		echo $array['id'];
    	}
    Ответ написан
    3 комментария
  • Какой самый быстрый способ проверить доступность сайтов?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Задача какая-то то ли выдуманная из головы, либо впезапно энтерпрайзного порядка. Возникают закономерные вопросы - откуда взялись эти 250 миллионов? Зачем проверять их все? Зачем делать это ежедневно?

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

    Короткий ответ: "готовый софт есть - любой, способный совершить HTTP-запрос, получив код ответа".

    P.S. - 300-ые коды ответа не свидетельствуют о недоступности домена, имхо, их тоже нужно учитывать.
    Ответ написан
    4 комментария
  • Как обработать запрос с формы на сервере?

    s2d1ent
    @s2d1ent Автор вопроса
    Специалист технической поддержки
    Использование CGI с C# и передача POST
    class Program
        {
            static void Main(string[] args)
            {
                string link = @"D:\csharp_server\program\program\bin\Debug\net5.0\includes\php\win86\php-cgi.exe", //ссылка на CGI
                    text = @"D:\csharp_server\program\program\bin\Debug\net5.0\www\UPPDD\php\auth.php"; // ссылка на файл где идет использование POST/GET
                Console.WriteLine(UseInterpreter(link, text));// вывод в консоль для просмотра
                Console.ReadKey();
            }
            static string UseInterpreter(string php, string file)
            {
                ProcessStartInfo info = new ProcessStartInfo(php);
                string req = "login=admin&pass=secretpass&but=%D0%92%D0%BE%D0%B9%D1%82%D0%B8"; // параметры формы
                info.UseShellExecute = false;
                info.ErrorDialog = false;
                info.RedirectStandardError = true;
                info.RedirectStandardInput = true;
                info.RedirectStandardOutput = true;
                info.CreateNoWindow = true;
                // переменные среды
                info.EnvironmentVariables.Add("REQUEST_METHOD", "POST");
                info.EnvironmentVariables.Add("HTTP_CONNECTION", $"keep-alive");
                info.EnvironmentVariables.Add("REDIRECT_STATUS", "false");
                info.EnvironmentVariables.Add("GETAWAY_INTERFACE", "CGI");
                info.EnvironmentVariables.Add("CONTENT_TYPE", "application/x-www-form-urlencoded");
                info.EnvironmentVariables.Add("CONTENT_LENGTH", Encoding.UTF8.GetBytes(req).Length.ToString());
                info.EnvironmentVariables.Add("HTTP_ACCEPT", "*.*");
                info.EnvironmentVariables.Add("SCRIPT_FILENAME", file);
                // передеча информации в Process и старт процесса
                Process p = new Process();
                p.StartInfo = info;
                bool pStarted = p.Start();
    
                StreamWriter input = p.StandardInput; // стандартынй поток ввода
                input.WriteLine(req); // ввод
                StreamReader output = p.StandardOutput; // поток вывода
                StreamReader error = p.StandardError; // поток вывода ошибки 
                // перекодировка, при наличии кириллицы php выводит в кодировке cp866, тут мы переводим из cp866 в utf8
                byte[] cp866_byte = output.CurrentEncoding.GetBytes(output.ReadToEnd());
                string cp866_byte_to_utf8 = Encoding.UTF8.GetString(cp866_byte);
    
                return cp866_byte_to_utf8;
            }
        }
    Ответ написан
    2 комментария
  • Почему добавляются новые записи с использованием ON DUPLICATE KEY?

    Adamos
    @Adamos
    Простите, а что за хрень вы делаете в запросе?
    "Добавить в базу запись с ticker = $ticker и другими полями, а если запись с таким значением ticker = $ticker уже есть, то... изменить в ней значение ticker на, внезапно, все тот же $ticker"?
    Вы не путаете с INSERT IGNORE?
    Ответ написан
    Комментировать
  • При sql запросе писать с кавычками или без?

    sptm
    @sptm
    software developer / DevOps engineer
    Безопаснее и правильнее использовать PDO или MySQLi вместо устаревших mysql_ - функций.
    Ну, и с обоими вариантами нужно использовать подготовленные запросы вместо того, чтобы писать их вручную.

    Получится что-то вроде этого:
    $host = '127.0.0.1';
    $db   = 'test';
    $user = 'root';
    $pass = '';
    $charset = 'utf8';
    
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $pdo = new PDO($dsn, $user, $pass, $opt)
    
    $stmt = $pdo->prepare("SELECT last_name FROM first_table WHERE name=?");
    $stmt->execute([$name]);
    $last_name = $stmt->fetchColumn();
    Ответ написан
    4 комментария