Ответы пользователя по тегу PHP
  • Не могу вывести данные из mysql через объекты?

    flapflapjack
    @flapflapjack
    на треть я прав
    Сергей
    спасибо, а возможно вы сможете подсказать тоже самое но уже в ООП?


    class DB {
    private $host;
    private $user;
    private $pass;
    private $db;
    private $connection;
    public function __construct($host,$user,$pass,$db)
    {
    $this->host=$host;
    $this->user=$user;
    $this->pass=$pass;
    $this->db=$db;
    }
    
    public function connect()
    {
    $this->connection = @new mysqli($this->host,$this->user,$this->pass,$this->db);
    $this->connection->set_charset('utf8');
    return $this->connection;
    }
    }
    
    
    class News {
    private $connection;
    public function __construct($connection)
    {
    $this->connection=$connection;
    }
    public function get_news()
    {
    $result_set = $this->connection->query('SELECT * FROM news');
    return $result_set->fetch_object();
    }
    }
    
    
    $db=new DB('host', 'un', 'pass', 'db');
    $connection=$db->connect();
    $news=new News($connection);
    
    $news_list=$news->get_news();
    
    
    var_dump($news_list);//операции с объектом, то бишь вывод и т.д. и всякие foreach()


    Изначально может показаться что кода стало больше, но при росте проекта это будет наоборот - короче.

    Вы так же можете использовать и процедурный стиль, но в каждую функцию придется передавать $connection, в ООП же - только классу.

    Кроме того в процедурном стиле у вас будет куча таких функций:
    get_news();
    get_user_id();
    get_id_by_email();
    get_user_id_by_news_id(); и т.д.

    При ООП же всё структурируется согласно классам,

    $news->get_user();
    $user->get_news();

    и т.д.
    Это не тема для тостера, это надо читать хотя бы про MVC
    Ответ написан
    3 комментария
  • Как залить в БД большой файл XML?

    flapflapjack
    @flapflapjack
    на треть я прав
    Просто разбейте в блокноте xml файл на несколько xml'ов, и по одному добавляйте в ннсколько заходов выполнения. Одно выполнение скрипта чтобы загружало одну часть xml
    Ответ написан
  • Как задать условие PHP?

    flapflapjack
    @flapflapjack
    на треть я прав
    <?php
    if(strlen($APPLICATION->ShowViewContent('sotbit_seometa_bottom_desc'))==0)
    {
    ?>
    <div class="seo-box expandable"> 
    <?php echo $APPLICATION->ShowViewContent('sotbit_seometa_bottom_desc');//вывод нижнего описания 
    ?> 
    <?php echo $arSection["~UF_CATALOG_HTML"];?> 
    
    </div>
    <?php
    }
    ?>


    strlen($APPLICATION->ShowViewContent('sotbit_seometa_bottom_desc'))==0

    можно заменить на
    empty($APPLICATION->ShowViewContent('sotbit_seometa_bottom_desc'))
    Ответ написан
  • Получить элемент массива по ключам записанных в переменную?

    flapflapjack
    @flapflapjack
    на треть я прав
    Дело в том, что я вижу какой-то бред))

    Поток сознания и гнева, а так же размышление о смысле жизни
    Впервые с таким сталкиваюсь, но очень нужно.

    Не врите, не нужно.

    // Эквивалентно $array[0]['group']['name'];

    Ага, а баня то чего сгорела? Точка в PHP - конкатенация (соединение двух строк).
    $array = ...
    $keys = array(0,'group','name');
    echo $array[$keys[0]][$keys[1]][$keys[2]];


    Но это тоже полный бред. А всё потому что изначально вы неправильный подход делаете.

    Очевидно, что самым верным решением будет определять ключи прямо при вызове echo, тобиш
    $array = ...
    $key1=...;/// своей логикой получаете имя ключа
    $key2=...;/// своей логикой получаете имя ключа
    $key3=...;/// своей логикой получаете имя ключа
    echo $array[$key1][$key2][$key3];


    Вы там в базе данных что ли храните ключи в этих квадратных скобках? Не могу придумать такой случай, когда вот так изгаляться надо.
    Так как мне не спится, я придумал вам вот такое идиотское решение, максимально близкое к вашим хотелкам:

    $array[0]['group']['name']="Foo";
    $array[1]['test']['acme']="Bar";
    $keys="[0]['group']['name']";
    eval("echo \$array".$keys.";"); // Foo
    
    $keys="[1]['test']['acme']";
    eval("echo \$array".$keys.";"); //Bar


    но это лютый позорище конечно)
    Ответ написан
    Комментировать
  • Как обновить php?

    flapflapjack
    @flapflapjack
    на треть я прав
    BD_ l3ftoverZ! ,
    почему бы не использовать опенсервер?

    потому что он весит как операционная система. Если честно, до сегодняшнего дня думал он мегабайт 300 весит. Зашёл на оф сайт - глянул - и ё*у дался! Он весит как ТРИ операционные системы.

    А денвер с автоматическими vhosts весит пару десятков Мб. Ниже по ссылке - 28 Мб.

    Григорий ,
    win 7 , через денвер


    На. Я тоже денвером пользуюсь, в моей сборке последний mysql, и php 7.2.

    В php.ini если надо подключай что хочешь - там куча модулей всяких.
    https://yadi.sk/d/ieUFqUsfU9J6HQ

    В корневой папке обязательно запусти .reg файл ресстра - ускорит работу MySQL (отключит попытки подключения через ipv6)
    Ответ написан
    2 комментария
  • Как заниматься разработкой на удалённом сервере на DigitalOcean?

    flapflapjack
    @flapflapjack
    на треть я прав
    Да способом тыща их. Можно по ssh подключиться, можно через ftp IDE какую нибудь присобачить.
    Ответ написан
  • Как дорабоать php что б начал пинговать?

    flapflapjack
    @flapflapjack
    на треть я прав
    Может что то с присвоением переменных
    $v = echo '' . $arr[0] . '' ;
    $ip = echo '' . $arr[1] . '' ;


    Именно. Что вы хотите этими строчками получить? echo - это вывод на экран, при чем тут присвоение?
    Ответ написан
  • Как исправить мою ошибку? И где я ошибся?

    flapflapjack
    @flapflapjack
    на треть я прав
    Нет ошибки, нормально всё выполняется.

    5c896b8277803431005767.png
    Ответ написан
    Комментировать
  • Можно ли заменить вывод функции?

    flapflapjack
    @flapflapjack
    на треть я прав
    Если перед вункцией вызвать ob_start() а после вызова функции сделать $out=ob_end_flush(); то в аут поместится результат выполнения функции.
    Ответ написан
    Комментировать
  • Как вывести данные из БД с ключами?

    flapflapjack
    @flapflapjack
    на треть я прав
    У вас и так ключи берутся. Что вы хотите?
    Ответ написан
  • Как выполнить php скрипт каждые х времени?

    flapflapjack
    @flapflapjack
    на треть я прав
    Если крона нет, и хостинг не даёт право его использовать, то дёргайте скрипт каждый х времени - со стороны, например так https://cron-job.org/en/
    Ответ написан
    Комментировать
  • Как вывести конкретный элемент массива?

    flapflapjack
    @flapflapjack
    на треть я прав
    $posts = get_posts(array('post_type' => 'ray_tipov_simple'));
    foreach($posts as $post)


    берет все посты из массива постов, и выводит их в цикле.

    Значит у вас критерий array('post_type' => 'ray_tipov_simple') выбирает все посты такого-то типа.

    Чтобы выбора была именно одного поста - его как-то нужно выбрать. Может что-то типа
    array('id' => $_GET['post_id']) ; // это не как надо, это я к примеру.

    Не с потолка же взять этот идентификатор поста, который вы хотите вывести.

    Слишком мало входных данных для решения вопроса. Для начала поймите сами, что хотите, и сформулируйте вопрос лаконично.

    Если вы хотите отсеивать ненужный вывод, путём условия if() то каково это условие?
    Ответ написан
    Комментировать
  • Запись в MYSQL при посещении страницы?

    flapflapjack
    @flapflapjack
    на треть я прав
    Ставьте при посещении человеку куку. При повторном посещении проверяете - если кука есть, пересылаете его куда надо.

    Запись в бд ведете по той же логике.
    Ответ написан
    Комментировать
  • Как вывести список фалов PHP?

    flapflapjack
    @flapflapjack
    на треть я прав
    Ответ написан
    Комментировать
  • Как использовать несколько подготовленных запросов?

    flapflapjack
    @flapflapjack
    на треть я прав
    user['id'] - мы получаем из выборки, так что $stmt->close(); - нельзя использовать


    Почему? О_о

    Вы выше получили

    $user = $stmt->get_result()->fetch_assoc();

    Всё - $user вообще никакого отношения не имеет к $stmt. Это теперь просто тупо массив отдельно от БД. Хоть отключайтесь от БД - из $user никуда ничего не пропадёт.
    Ответ написан
  • Как сделать разные данные на конечной странице в зависимости от ссылки?

    flapflapjack
    @flapflapjack
    на треть я прав
    Ну как ответить на вопрос...
    То что вы спрашиваете - это основы PHP.

    По загрузке страницы получаете данные из PHP, фронтендом рендерите данные.

    Это даже объяснять не имеет смысла наверное - это так сайты априори работают.

    Страничка
    <title>Заголовок</title>
    <body><h1>Текст</h1></body>


    рождается путём генерации на стороне сервера чего-то типа

    //вытаскивание данных из БД, какой-то код для работы с данными
    $title=$row['title'];
    $text=$row['text'];
    
    print "<title>$title</title>".
    ."<body><h1>$text</h1></body>";


    Вам нужно вообще хотя бы прочитать уроки PHP низшего уровня, самое днище, чтобы понять как это работает.

    Ну а реализация - на freelance.ru

    Иначе придётся тут с вами на 10 страниц диалог вести, выясняя структуру самописного движка, БД, и бекенда.
    Ответ написан
  • Как реализовать постраничную навигацию с LEFT JOIN?

    flapflapjack
    @flapflapjack
    на треть я прав
    $page=is_numeric($_GET['page']) ? $_GET['page'] : 1;
    
    $onpage=30;
    $result=mysqli_query("
    SELECT users.*,adresses*2
    FROM users AS t1
    LEFT JOIN addresses AS t2 ON t2.user_id = t1.id LIMIT ".($page-1)*$onpage.",".$onpage
    );
    if(mysqli_num_rows($result)>$onpage)
    {
    while ($row = mysqli_fetch_array($query)){
    print $row['имя_поля']."<br>";//здесь выводите что вам надо
    }
    echo "Можно отрисовать ссылку на <a href=\"?page=".$page+1."\">следующую</a> страницу";
    }
    Ответ написан
  • Как получить данные с другова сайта на свой?

    flapflapjack
    @flapflapjack
    на треть я прав
    Ваша ссылка выдает что merchant not activated, так что:

    //$xml=file_get_contents("http://www.free-kassa.ru/api.php?merchant_id=7012&s=c4ca4238a0b923820dcc509a6f75849b&action=get_balance");
    $xml = <<<EOT
    <?xml version="1.0" encoding="UTF-8" ?>
        <root>
            <answer>info</answer>
            <desc>Merchant balance</desc>
            <balance>12.73</balance>
        </root>
    EOT;
    $data=simplexml_load_string($xml);
    $balance=$data->balance;
    print $balance;
    Ответ написан
    2 комментария
  • Безопасен ли этот код для загрузки картинок на сайт?

    flapflapjack
    @flapflapjack
    на треть я прав
    Может тогда проще

    $whitelist = array(".jpg", ".jpeg", ".png"); //и так далее...
      foreach ($whitelist as $item)
        if(!preg_match("/$item\$/i", $_FILES['somename']['name'])) exit;


    Ваш код всё равно не пропустит истинный png, gif, у них $_FILES['somename']['name'] будет другой.

    Кроме того $_FILES['somename']['name'] можно отправить через header вообще любой - не важно какой у файла.

    Настоящую картинку можно проверить только с помощью getimagesize(), но и расширения проверять необходимо, потому как если по mime-типу картинка будет картинкой, и у неё будет всё что нужно иметь картинке, а в EXIF'e будет PHP код, то он выполнится. С ошибками, но выполнится.
    Ответ написан
  • Как передать в массив переменную для последующей её обработки при использовании PDO?

    flapflapjack
    @flapflapjack
    на треть я прав
    $sth = $pdo->prepare("INSERT INTO `users` SET `username` = :username, `password` = :password");
    $sth->execute(array(':username' => $username, ':password' => $password);


    двоеточия

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