Ответы пользователя по тегу PHP
  • Какой фреймворк выбрать для создания REST API под мобильное приложение?

    Недавно для небольшого проекта использовал slim . Довольно таки удобная штука.
    Ответ написан
    Комментировать
  • Как правильно составить MySQL запрос?

    Попробуйте заменить mysqli_fetch_array на mysqli_fetch_assoc . Первый имеет свойство дублировать данные.
    Ответ написан
  • Как добавить тот или иной блок с помощью if else?

    Не вижу точек с запятыми.
    if( !$_SESSION['logged_user']) {
        echo $login_r;
    } else { 
        echo $parea;
    }
    Ответ написан
    1 комментарий
  • Как составить SQL Запрос для фильтрации по трем таблицам?

    Можно вот так:
    SELECT s.server_name FROM mod_name m LEFT OUTER JOIN(
        SELECT m_mod, m_serv FROM server_mod
    ) q ON q.m_mod = mod_id 
    LEFT OUTER JOIN(
        SELECT server_id, server_name FROM servers
    ) s ON s.server_id = q.m_serv WHERE mod_id = 5


    sqlfiddle
    Ответ написан
    Комментировать
  • Как раскодировать данные после serialize() jq на стороне сервера php?

    отправлять лучше вот так, тогда никаких проблем не будет:
    let value = $(element).serialize();
    
    $.ajax({
    url: "/public/php/create-app.php",
    type: "POST",
    data: value,
    success: function(data) {
    if (data) {
    //location.reload();
    } else {
    
    }
    }
    });

    И на php
    if(isset($_POST['app-name']){
    \\..ваш код.
    }
    Ответ написан
    2 комментария
  • Как сделать чтоб для своей картинке выводилось свое кол-во просмотров?

    Что-то мало данных, а ещё они двоятся почему-то.
    Давай вот так попробуем делать:
    <?php
    $shablon = mysqli_query($connection, "SELECT * FROM `videos` WHERE "); 
    while($vidos = mysqli_fetch_assoc($shablon)){
    ?>
           <ul> 
                <li> 
            <div class="videos_image"> 
                <a href="shablon.php?id=<?php echo $v['id']; ?>"><img  src="/media/images/<?php echo $v['img']?>" width="250" height="180"  alt="<?php echo $v['title']?>" /></a>
                <div id="videos_image">
                  <img src="/media/views.png" id="views" />
                  <span class="videos_views"><?php echo $vidos['views'] ?></span>
                </div>
            </div> 
             <?php 
                    if (empty($videos)) die('В базе нет никаких картинок или запрос кривой'); 
                  ?> 
            <div class="videos_title"> 
              <span class="title_alt"><?php echo mb_substr($v['title'], 0, 26, 'utf-8') . '...';?> </span>
            </div>
                </li> 
              </ul> 
    <?}?>
    Ответ написан
  • Как защитить поддомен без авторизации?

    А передача сессии уже не популярна? Или вы отказались от стандартных сессий?)
    Ответ написан
    4 комментария
  • Отсутствуют ошибки подключения что делать?

    Вы чего тут намешали то? И mysql, и mysqli. Ужас.
    <?php
    $db_host        = "localhost";
    $db_user        = "root";
    $db_pass        = "";
    $db_database    = "test";
    $link = mysqli_connect($db_host,$db_user,$db_pass, $db_database );
    
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
    ?>

    Документация
    Ответ написан
    2 комментария
  • Пытаюсь удалить пост из бд, но не знаю в чем проблема?

    Наверно проблема в том, что вы отправляете POST запрос, как GET запрос.
    Вообще это так должно быть:
    echo "<form action='index.php' method='POST'>
     <input type='hidden'  name='data' value='".$in['id']."'>
     <input type='submit' name='delet' value='удалить'>
      </form>";
    if(isset($_POST['delet'])) {
    $post_id = $_POST['data'];
         mysqli_query($connect_db, "DELETE FROM `articles` WHERE `id` = $post_id");
     }
    Ответ написан
  • Как сделать оповещения на сайте?

    Отдельная таблица для подписок и отдельная таблица для оповещений с флагом прочитано или нет. Обновляет страницу, считаем количество непрочитанных оповещений. При переходе в ленту меняем флаг на прочитано, если вам нужно будет выводить тип оповещения и навешивать в дальнейшем плюшки - проблем с этим явно не будет достаточно будет просто добавить колонки в таблицу оповещений.
    Ответ написан
    2 комментария
  • Как вынести подключение к БД?

    Можно, только в конструктор лучше передавать подключение к бд, а не выносить туда его.
    public function __construct($pdo) {
    		$this->pdo = $pdo;
    }
    Ответ написан
  • Как правильно выводить данные из массива?

    Почему я пишу эхо регион а мне выводится число 4 ?


    Потому что он вам выводит ключ, а не значение.

    $mas = [
    'Самарская область' =>'Чапаевск',
    'Новокуйбыышевск',
    'безенчуг',
    'Московская область'=>'Москва',
    'Аргентина',
    'Казань',
    'Иннополис',
    ];
    foreach ($mas as $region => $city){
         echo $city. '</br>';
    }?>

    Результат:
    059c3be36a8b4f0e836b5804803c9eab.png

    или вот так, если хотите:
    $mas = ['Самарская область'=>['Чапаевск','Новокуйбыышевск','безенчуг'],
    'Московская область'=>['Москва','Аргентина','Казань','Иннополис']
    ];
    foreach ($mas as $key=>$val){
    	echo $key.':</br>';
      foreach ($val as $key){
    		echo $key. '</br>';
    	}
    }

    Вывод:
    5a60254edcfe4e028ad2c82aed78c479.png
    Ответ написан
    Комментировать
  • Как вывести запись по определённому совпадению?

    $myrow = mysql_num_rows($result);
      if ($myrow == 1){
        $_SESSION['login'] = $myrow['login'];
        $_SESSION['id'] = $myrow['id'];
    }

    Тут ошибка. В $myrow хранится единица и следовательно $myrow['login']; и $myrow['id']; - не существуют и в сессию ничего не пишется.
    Сделайте так:
    $row = mysql_fetch_array($result);
      $myrow = mysql_num_rows($result);
    
      if ($myrow == 1){
        $_SESSION['login'] = $row['login'];
        $_SESSION['id'] = $row['id'];
    }

    Я вам вроде бы верный вариант в конце давал.
    А дальше так, как вам показали
    $sql = "SELECT * FROM `Account` WHERE `id_client` = ". (int) $_SESSION['id'];
    Ответ написан
    8 комментариев
  • Как исправить ошибку, php?

    Я уже говорил одному человеку тут, что нельзя так делать
    $result = mysql_query("SELECT * FROM Clients WHERE login='$login'",$db); /
    $myrow = mysql_fetch_array($result);
     if(empty($myrow['password'])){
    }

    У вас в принципе не правильно всё сделано, вам достаточно посчитать количество совпадений в базе, и не надо тянуть данные из неё. Вот пример на PDO используйте его:
    /*Подключение к бд разумеется в отдельном файле, а лучше вообще освоить ООП*/
    $dsn = "mysql:host=".$host.";dbname=".$db.";charset=".$charset."";
         $opt = array(
                      PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
            );
    $pdo = new PDO($dsn, $user, $pass, $opt);
    
    /*Ваш запрос*/
    
    $query = $pdo->prepare('SELECT COUNT(*) FROM users WHERE login = :login AND password = :password');
    $query->execute(array(':login'=>$login, ':password' =>$password));
    if($query->fetchColumn() == 1){
    }

    Учите то, что актуально, а не то, что мертво: PDO официальная документация

    А теперь к сути вопроса. Вот такой вариант у меня заработал в итоге:
    session_start();
    include ("BD_for_users.php");
    if(isset($_POST['login']) && isset($_POST['password'])) {
      $login = $_POST['login'];
      $password = $_POST['password'];
      if(empty($login) OR empty($password)){
        exit ('<script>alert("Дла начала заполните поля!");</script>');
      }
      $login = trim(stripslashes(htmlspecialchars($login)));
      $password = trim(stripslashes(htmlspecialchars($password))); // надо хранить хеш пароля, а не в чистом виде
      $result = mysql_query("SELECT * FROM Clients WHERE login='".$login."' AND password='".$password."'");
      $row = mysql_fetch_array($result);
      $myrow = mysql_num_rows($result);
    
      if ($myrow == 1){
        $_SESSION['login'] = $row['login'];
        $_SESSION['id'] = $row['id'];
        echo "Вы успешно вошли на сайт! <a href='For_users.php'>Личный кабинет</a>";
      }else{
        exit ('<script>alert("Извините, введённый вами логин или пароль неверный.");</script>');
      }
    }
    ?>
    Ответ написан
  • Как правильно прописать путь к файлу через require_once?

    Никакие пути менять не надо, если структура приложения в корневой директории будет не измена.
    define('__ROOT__', dirname(dirname(__FILE__)));
    require_once(__ROOT__.'/components/database.php');
    Ответ написан
    Комментировать
  • Почему запрос ajax jQuery не работает?

    Так работает. Но есть замечания по коду, но это после.
    <div id="tmenu" class="ui_tmenu">hi</div>
            <form id="test" name="login" method="post">
                <div class="label"> Логин </div>
                <div class="i_a_i">
                  <input name="name" type="text" class="inp_auth">
                </div>		
                <div class="label"> Пароль </div>
                <div class="">
                  <input name="pass" type="text" class="inp_auth">
                </div>
            </form>
            <button class="btn_auth">Войти</button>
            <button class="btn_auth b_a_i">Регистрация</button>

    js я использовал больше jquery.
    $('.btn_auth').click(function(){
      document.getElementById("tmenu").innerHTML='ok';
      var msg = $('#test').serialize();
     $.ajax({
         url: "logina.php",
         method: "post",
         data: msg,
         dataType:"json",
         success:  function(data) {
             $('#tmenu').text(data.status);
              
         },
       error: function() { document.getElementById("tmenu").innerHTML='err';
              
         }
     });
    });

    php:
    require_once 'dy_functions.php';
      
      if (isset($_POST['name'])){
        $login = sanitizeString($_POST['name']);
        $pass = sanitizeString($_POST['pass']);
        
        if ($login == "" || $pass == ""){
          $error = "Данные введены не во все поля";
        }else{
          $result = queryMysql("SELECT login,pass FROM customer WHERE login='$login' AND pass='$pass'");
          if($result->num_rows == 0){
            $error = "Ошибка при вводе пары имя пользователя - пароль";
          }else{
            $_SESSION['name'] = $login;
            $_SESSION['pass'] = $pass;
            $error = "все прошло успешно";
          }
        }
        $data = array("status" => $error);
        echo json_encode($data);
      }


    А теперь замечания. Ставьте фигурные скобки на той же строчке пожалуйста, не нужно их выносить в отдельную строку и вам скажут спасибо. Второе, не используйте стандартный драйвер для работы с базой, используйте PDO. И третье, выносите кнопки за пределы формы, если работаете с ajax.
    Ответ написан
  • Не работает условие PDO mysql в ajax?

    Зачем вы дергаете данные из базы, когда вам достаточно просто посчитать сколько строк удовлетворяет условию?
    $query = $pdo->prepare('SELECT COUNT(*) FROM users WHERE login = :login AND password = :password');
    $query->execute(array(':login'=>$login, ':password' =>$password));
    if($query->fetchColumn() == 1){
       echo "wer";
      }
      else
      {
        echo "newer";
    }

    А теперь перейдем к сути вот что в итоге получилось:
    <!--Я сделал небольшую форму, для тестирования. 
    Вы ведь делаете авторизацию, значит данные будут вводится в форму -->
    <form class="aut-form" method="post">
            <input name="login" type="text" placeholder="логин">
            <input name="password" type="password" placeholder="пароль">
    </form>
    <div id="information"></div>
    <input id="load" type="submit" placeholder="отправить">

    function funcBeore () {
            $('#information').text ('Ожидаенние');
          }
          $(document).ready (function(){
            $("#load").bind("click", function(){
              var dataAjax = $('.aut-form').serialize(); // пример заточен под использование формы
              $.ajax({
                url: "check_login.php",
                type: "POST",
                data: "data=''&" + dataAjax,
                dataType: 'html',
                beforeSend: funcBeore,  
                success: function (data){
                  alert(data);
                  if(data == "wer"){
                    $('#information').text(data);
                  }
                }
              });
            });
          });

    И конечно же сервер.
    if(isset($_POST['data'])){
      $login = $_POST['login'];
      $password = $_POST['password'];
      $query = $pdo->prepare('SELECT COUNT(*) FROM users WHERE login = :login AND password = :password');
      $query->execute(array(':login'=>$login, ':password' =>$password));
    if($query->fetchColumn() == 1){
        echo "wer";
      }else{
        echo "newer";
      }
    }


    Код протестирован и прекрасно работает.
    Ответ написан
    9 комментариев
  • Можно ли реализовать метод шифрования TEA на PHP?

    Можно. Вот есть пример реализации. В данном случае используется модификация алгоритма TEA.
    XXTEA на PHP
    К сожалению в чистом виде TEA весьма уязвим и использовать его не рекомендуется. К тому же я бы рекомендовал посмотреть в сторону других алгоритмов шифрования.
    Ответ написан
    2 комментария
  • Ошибка {"html":" Forbidden You don't have permission, из-за чего она?

    Так, как вы только учитесь, я не буду вам объяснять ООП, а напишу всё процедурно, как у вас. Внимание, никогда не храните подключение к базе с другим кодом сделайте лучше так, создайте файл config.php и организуйте там подключение к базе:
    $server = "localhost"; 
     $user = "имя пользователя";
     $password = "пароль";
     $condb = new mysqli($server, $user, $password, "mydb");

    И подключайте этот файл к вашим файлам:
    /* это ваш файл connect.php как видете в нем нет подключение к бд и вам не придётся его пихать везде, достаточно просто подключить файл конфига*/
      include('config.php');
      $sql = "SELECT id, about, url FROM videos WHERE id = 4";
      $result = $condb->query($sql);
      if($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
          $res = $row["url"];
        }
      }

    Создайте отдельный файл для ajax запросов:
    /* допустим он будет называться ajax.php*/
    
     include('config.php'); // подключим конфиг и выполним запрос к бд
     $sql = "SELECT id, about, url FROM videos WHERE id = 4";
     $result = $condb->query($sql);
     $row = $result->fetch_assoc();
     $res = array(
        "url" => $row['url'], "id"=> $row['id']
    ); //Собираем массив с данными необязательно отдавать html - работайте с json.
     echo json_encode($res); // Преобразуем его в json объект и отправим на клиент


    Далее идет код клиента смотрите внимательно, что делается:

    function ajax() {
      var newLi = document.createElement('div'), // Собираем разметку на клиенте, для этого создаем div
            list = document.querySelector(".list"); 
      xhr = new XMLHttpRequest();
      xhr.open("GET", "ajax.php", true);
      xhr.onreadystatechange = function() {
        if(xhr.readyState==4 && xhr.status == 200) {
           console.log(xhr.responseText); // Всегда смотрите в консоль, какие данные приходят
           var Url = JSON.parse(xhr.responseText); // Распарсим пришедшие данные
           newLi.className = "new"; //добавляем класс в уже созданный див
           newLi.innerHTML = Url.url; //вставляем данные в созданный див
           list.appendChild(newLi); // и вставляем весь див в DOM
        }
      }
      xhr.send();
    }


    Как-то так. Если есть ошибки, говорите мне.
    Ответ написан
    7 комментариев
  • Где в коде находится getuser.php?q=?

    В PHP файле с именем getuser.php примерно такой код будет

    if (isset($_GET['q'])){
     //где $_GET['q'] - переданный параметр str из js файла
    }
    Ответ написан
    Комментировать