Ответы пользователя по тегу PHP
  • Стоит ли изучать MVC не зная ООП?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый день.
    или стоит выучить ООП и только потом посмотреть данный плейлист?

    Да, ознакомьтесь сначала с документацией по php.
    Затем можете приступить к ознакомлению с основами ООП. Так же перечитайте всё, что идёт в дополнении к курсу, ссылку найдёте внизу страницы.
    Потом посмотрите вот эти видео.
    Изучите парочку frameworko-в.
    После всего этого можете приступать к написанию чего-либо.
    Ответ написан
    Комментировать
  • Регулярное выражение?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый день.
    if( !preg_match( "/^(\d{10})$/", $check ) ) {
    Ответ написан
  • Как использовать готовый PHP код локализации даты (месяца и дня недели)?

    slo_nik
    @slo_nik Куратор тега PHP
    Доброе утро.
    Должно быть подключено php-intl.
    //значение data в базе данных 1566668242
    // если значение data в базе 2019-09-02 10:18:00 - strtotime($result['data'])
    $sql("SELECT id,avatar,login,rey,message,komy,data FROM `messages2`WHERE `komy`='$a'");
    $row = $mysqli->query($sql);
    setlocale(LC_ALL, 'ru_RU.UTF-8');
    while($result = $row->fetch_assoc()){
       echo strftime('%a %e %B %G %H:%M:%S', $result['data']) . '<br>';
    }
    Ответ написан
    5 комментариев
  • Как в PHP добавить переадресацию на другой сайт?

    slo_nik
    @slo_nik Куратор тега PHP
    Ваш код можно переделать так.
    Это пример. Но так лучше не делать.
    $filesize = 1;
    $fio = 'Василий Евграфович Защёлкин';
    if ($filesize == 1) { // проверка на общий размер всех файлов. Многие почтовые сервисы не принимают вложения больше 10 МБ
        if(mail($to, $subject, $message, $headers)){
       // echo $_POST['fio'].', Ваше сообщение получено, спасибо!';
     ?>
        <script type="text/javascript">
          var message = "<?= $fio ?>" + ', Ваше сообщение получено, спасибо!';
          alert(message)
        </script>
     <?php 
        }
        else{
    ?>
        <script type="text/javascript">
          var message = "<?= $fio ?>" + ', Ваше сообщение НЕ отправлено, обратитесь к администратору!';
          alert(message)
        </script>
    <?php      
        }  
      } else {
        //echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.';
    ?>
       <script type="text/javascript">
         var message = 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.';
         alert(message)
       </script>
    <?php
      }
    ?>


    Лучше используйте готовую библиотеку для отправки писем. Например PHPMailer или SwftMailer.
    Эти библиотеки можно легко подключить при помощи Composer.
    Далее, не мешайте php с html, js, css. Это моветон.
    Отправляйте ajax запрос к php файлу, получайте от него ответ и обрабатывайте на стороне клиента.

    Проверять размер файла в php нужно так
    if($filesize < 1024 * 1024 * 10){
       // code
    }
    Ответ написан
  • Почему при отправке формы страница перезагружается, а письмо не отправляется?

    slo_nik
    @slo_nik Куратор тега PHP
    Вечер добрый.
    Вы сделали опечатку в имени класса, поэтому и не сработала e.prevertDafault.
    У формы класс tel-form, а в js скрипте Вы пытаетесь обработать форму с классом tel_form.
    Ещё Вы не заключили блок if в фигурные скобки, а else в фигурных.
    if ( !this.checkValidity() ){
        alert('Пожалуйста, заполните обязательные поля.');
     }
      else {
    
      }

    Уберите атрибут novalidate у формы, enctype="multipart/form-data" используйте тогда, когда собираетесь отправлять файлы.
    После получения ответа от сервера Вашу страницу перезагрузит всё равно и направит на новый адрес
    success: function (data) {
                    window.location.href = "../спасибо-за-заказ.htm";
    },

    Думаю, что этот блок лишний, ведь у Вас для поля формы есть атрибут required и окончательно данные надо проверять на стороне сервера, в Вашем случае в файле tel_mail.php.
    if ( !this.checkValidity() ){
        alert('Пожалуйста, заполните обязательные поля.');
    }

    В общем Ваш код js может быть таким
    $(document).ready(function() {
    
    	// Добавляем маску для поля с номера телефона
    	$('.phonemasked').each(function(){
    	  $(this).mask('+7 (999) 999-99-99');
    	});
    
      $(".tel-form").on('submit', function(e) {
    	  e.preventDefault();
    	    $.ajax({
    	      type: "POST",
    	      url: "/form/tel_mail.php",
    	      data: $( this ).serialize(),
    	      success: function (data) {
    	        window.location.href = "../спасибо-за-заказ.htm";
    	      },
    	    });
    	      // очищаем поля
    	    $('#form-tel').val('');
      });
    });

    И не мешало бы переименовать файл спасибо-за-заказ.htm, сделать имя латиницей.
    Ответ написан
    2 комментария
  • Почему не записывается в массив PHP?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый вечер.
    В последнем случае Вы сканируете вложенную директорию somo-dir0 и получаете файлы, которые находятся в ней.
    При проверке is_file() Вы указываете только имя файла, без пути к нему.
    Поэтому файл не найден и массив не заполняется.
    $files = scandir($dir.'/some-dir0');
    foreach($files as $fileNames){ 
        if($fileNames == '.' || $fileNames == '..') continue;
        if(is_file('some-dir0/' . $fileNames)){ 
          $fileVals[] = $fileNames;
        }
    }
    
    echo '<br/>';			
    print_r($fileVals);
    Ответ написан
    4 комментария
  • Как получить папку письма IMAP?

    slo_nik
    @slo_nik Куратор тега PHP
    Можно попробовать обойтись без массивов.
    На примере gmail.
    $imapPath = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX';
    $username = 'login@gmail.com';
    $password = 'password';
    $inbox = imap_open($imapPath,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());
    
    // Тут главное действие, поиск в папке "Входящие"
    $emails = imap_search($inbox,'TEXT "yii"'); // найти письма с текстом "yii"
    // или
    $emails = imap_search($inbox,'FROM "exsample@mail.com"'); // письма с определённым адресом

    Вот полный список
    ALL - return all messages matching the rest of the criteria
        ANSWERED - match messages with the \\ANSWERED flag set
        BCC "string" - match messages with "string" in the Bcc: field
        BEFORE "date" - match messages with Date: before "date"
        BODY "string" - match messages with "string" in the body of the message
        CC "string" - match messages with "string" in the Cc: field
        DELETED - match deleted messages
        FLAGGED - match messages with the \\FLAGGED (sometimes referred to as Important or Urgent) flag set
        FROM "string" - match messages with "string" in the From: field
        KEYWORD "string" - match messages with "string" as a keyword
        NEW - match new messages
        OLD - match old messages
        ON "date" - match messages with Date: matching "date"
        RECENT - match messages with the \\RECENT flag set
        SEEN - match messages that have been read (the \\SEEN flag is set)
        SINCE "date" - match messages with Date: after "date"
        SUBJECT "string" - match messages with "string" in the Subject:
        TEXT "string" - match messages with text "string"
        TO "string" - match messages with "string" in the To:
        UNANSWERED - match messages that have not been answered
        UNDELETED - match messages that are not deleted
        UNFLAGGED - match messages that are not flagged
        UNKEYWORD "string" - match messages that do not have the keyword "string"
        UNSEEN - match messages which have not been read yet


    p.s.
    Но есть одно "НО". Не знаю как с другими почтовиками, но в gmail необходимо разрешить доступ для непроверенных приложений и подтвердить свой выбор через письмо, которое присылается на Ваш ящик автоматически.
    Ответ написан
  • Как получить письма imap gmail php?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый день.
    Как установить imap ubuntu php 7.2?
    Смотрите постскриптум к ответу.
    Ответ написан
  • Как установить imap ubuntu php 7.2?

    slo_nik
    @slo_nik Куратор тега PHP
    Попробуйте сделать так.
    sudo add-apt-repository ppa:ondrej/php
    sudo apt-get update
    sudo apt-get install php7.2-imap
    sudo service apache2 restart


    p.s.
    Включите доступ небезопасных приложений к аккаунту.
    Измените немного свой код.
    $imap = imap_open('{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX', 'login', 'password');
    $emails = imap_search($imap, 'ALL');
    if($emails){
     echo count($emails);
    }
    imap_close($imap);
    Ответ написан
    5 комментариев
  • Как получить свойство из строки PHP?

    slo_nik
    @slo_nik Куратор тега PHP
    Доброе утро.
    $str = '{"response":[{"id":332790236,"first_name":"Юлия","last_name":"Воронцова","has_mobile":1,"online":0,"last_seen":{"time":1562717557,"platform":4}}]}';
    $array = json_decode($str, true);
    echo $array['response']['0']['first_name'];
    Ответ написан
    Комментировать
  • Как с помощью регулярных выражений преобразовать одну строку в другую на PHP?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый вечер.
    Попробуйте начать со следующего.
    $str = "IEEE 802.11a, IEEE 802.11ac, IEEE 802.11b, IEEE 802.11g, IEEE 802.11n";
    preg_match_all('#([\d.]+)([a-z]{1,})#', $str, $matches);
    array_multisort(array_map('strlen', $matches['2']), $matches['2']);
    echo $matches['1']['0'] . implode('/', $matches['2']);

    Результат
    802.11a/b/g/n/ac
    Ответ написан
  • Как сделать поиск на кириллице с preg match?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый вечер.
    Как мне сделать, чтобы регулярка не игнорировала кириллицу?

    Добавьте модификатор "u".
    А лучше, как написал Евгений Ромашкан, не парсить html при помощи регулярных. Вообще, если можно обойтись без РВ - обходитесь.
    Например так.
    Ответ написан
    3 комментария
  • Как составить регулярное выражение?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый вечер.
    Можно обойтись без регулярных выражений.
    $html = '<td>
               <b>3. Первый тег B</b>
             </td>
             <td>
               <a title="More..." href="/ссылка">
                  <b>текст Второй тег B</b>
               </a>
             </td>
             <td align=right>
               <b>VIP Третий тег B</b>
             </td>';       
    $dom = new DomDocument();
    $dom->loadHTML('<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'.$html);
    $finder = new DomXPath($dom);
    $elements = $finder->query(".//b");
    
    foreach($elements as $element){
      //print_r($element);
      echo  PHP_EOL . $element->nodeValue;
    }

    Результат
    3. Первый тег B
    текст Второй тег B
    VIP Третий тег B
    Ответ написан
    Комментировать
  • Как добавить checked к чекбоксу на странице?

    slo_nik
    @slo_nik Куратор тега PHP
    Не используйте короткие теги php, используйте нормальные <?php
    Input расположите выше кода.
    <?php
    $arResult["ID"] = 5;
    $delaydBasketItems = [2,4,3,6,5]; 
    ?>
    <input type="checkbox" name="test" id="test">
    <?php
    if ( in_array($arResult["ID"], $delaydBasketItems) || isset($itInDelay) ) {
     ?>
    <script>
      $('#test').attr('checked', true);
    </script>
    <?php } ?>

    Работает...
    Ответ написан
  • Как изменить цвет ряда в таблице?

    slo_nik
    @slo_nik Куратор тега PHP
    Доброе утро.
    Не используйте bgcolor, нафталином попахивает...
    Не показывайте html через echo.
    Вы подставляете переменную, но Вы её не показываете. Необходимо использовать echo или её псевдоним.
    Или <?php echo $color ?> или <?= $color ?>
    Так же необходимо значение атрибутов html тегов обрамлять кавычками.
    <?php
     $type = 'add';
     $color = $type == 'add' ? 'red' : 'white';
    ?>
    <table style="width: 200px; height: 100px;">
      <tr style="background:<?= $color ?>">
        <td></td>
        <td></td>
        <td></td>
      </tr>
      <tr style="background:<?= $color ?>">
        <td></td>
        <td></td>
        <td></td>
      </tr>
      <tr style="background:<?= $color ?>">
        <td></td>
        <td></td>
        <td></td>
      </tr>
      <tr style="background:<?= $color ?>">
        <td></td>
        <td></td>
        <td></td>
      </tr>
    </table>
    Ответ написан
    8 комментариев
  • Как получать первые буквы Фамилии Имени и Отчества?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый вечер.
    // Результат работы "В"
    echo mb_substr("Вася", 0, 1);
    Ответ написан
    3 комментария
  • Почему не увеличивается значение в базе данных?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый день.
    Не обновляет потому, что это, мягко говоря - бред.
    $upd = mysqli_query($db, "UPDATE golosa SET id=1, var1 = '$row[0]' ");

    Вам надо указать какую именно запись Вы обновляете, в данном случае с id 1, так как Вы получили данные по этой записи.
    $upd = mysqli_query($db, "UPDATE `golosa_vote` SET `var1` = '$row[0]' WHERE ` id`=1");

    p.s. Код уязвим и оставляет желать лучшего
    Ответ написан
    Комментировать
  • Как провести авторизацию через curl?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый вечер.
    Данные об авторизации должны быть сохранены, Вы же этого не делаете.
    Необходимо создать пару файлов.
    Приблизительно так:
    function login($url,$login,$pass){
    
       $ch = curl_init();
       curl_setopt($ch, CURLOPT_URL, $url);
       // откуда пришли на эту страницу
       curl_setopt($ch, CURLOPT_REFERER, $url);
       // cURL будет выводить подробные сообщения о всех производимых действиях
       curl_setopt($ch, CURLOPT_VERBOSE, 1);
       curl_setopt($ch, CURLOPT_POST, 1);
       //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
       curl_setopt($ch, CURLOPT_POSTFIELDS,"username=".$login."&password=".$pass);
       curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36");
       curl_setopt($ch, CURLOPT_HEADER, 1);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       //сохранять полученные COOKIE в файл
       curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/parser/cookie.txt');
       curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/parser/cookie.txt');
       $result=curl_exec($ch);
    
    //echo $result;
    
       curl_close($ch);
    
       return $result;
    }
    Ответ написан
    Комментировать