Как получить записи в PHP OOP и Vue. js? - PullRequest
0 голосов
/ 05 февраля 2020

Я сейчас работаю над этим проектом, но у меня возникла небольшая проблема. Как я могу получить записи, используя PHP OOP с vue. js? Кажется, что нет другого способа передать переменную в URL в функции класса. Я использую топор ios. js для отправки запроса AJAX. Как я могу улучшить это и иметь возможность извлекать данные из топора ios. js?

Index. php

<div id="admin">
<div class="col-md-12">
      <table class='table table-bordered table-striped'>
        <thead>
          <th>#</th>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Username</th>
          <th>User Type</th>
          <th>Delete</th>
        </thead>
        <tbody>
         <?php
         require_once'function.php';
         $show_users=new DB_con();
         $sql1=$show_users->show_users();
         $cnt=1;
         while($row=mysqli_fetch_array($sql1))
         {
          ?>
          <tr v-for="show_user in show_users">
           <td><?php echo htmlentities($cnt);?></td>
           <td><?php echo htmlentities($row['fname']);?> {{ show_user.fname }}</td>
           <td><?php echo htmlentities($row['lname']);?>{{ show_user.lname }}</td>
           <td><?php echo htmlentities($row['username']);?>{{ show_user.username }}</td>
           <td><?php echo htmlentities($row['user_type']);?>{{ show_user.usertype }}</td>
           <td><a href="index.php?del=<?php echo htmlentities($row['id']);?>"><button class="btn btn-danger btn-xs" onClick="return confirm('Do you really want to delete');"><span class="glyphicon glyphicon-trash"></span>Delete</button></a></td>
         </tr>
         <?php
         $cnt++;
       } ?>
     </tbody>
   </table>
 </div>
</div>

<script src="js/vue.js"></script>
<script src="js/axios.js"></script>
<script src="js/app.js"></script>

app. js

var app = new Vue({
    el: '#admin',
data:{
        show_users: []
    },
    mounted: function(){
        this.getAllUsers();
    },
    methods:{
        getAllUsers: function(){
            axios.get("function.php")
                .then(function(response){
                    //console.log(response);
                    app.show_users = response.data.show_users;
                });
        }
    }
});

функция. php

<?php 
session_start();
define('DB_SERVER','localhost');
define('DB_USER','root');
define('DB_PASS' ,'');
define('DB_NAME', 'e4');

class DB_con
{
function __construct()
{
$con = mysqli_connect(DB_SERVER,DB_USER,DB_PASS,DB_NAME);
$this->dbh=$con;
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
 }
}
    public function show_users()
    {
    $reg=mysqli_query($this->dbh,"SELECT id, fname, lname, username, remark, user_type FROM e4_users as a join e4_user_type as b on b.userId=a.userId WHERE a.userId='2' AND remark='1' ");
    return $reg;
    }
}
?>

1 Ответ

1 голос
/ 05 февраля 2020

Ваш function.php прямо сейчас отвечает за запуск сеанса, определяет переменные соединения MySQL, а также содержит класс, отвечающий за соединение с MySQL.

Вы не хотите этого делать, а придерживаетесь принципа, называемого Разделение интересов ( нажмите здесь ).

В не - ajax Кстати, так как теперь это в вашем index.php, вы включаете файл function.php, вы создаете экземпляр своего класса и вызываете функцию, которая возвращает результаты из базы данных, а затем перебирает их.

Если вы хотите, чтобы ваш топор ios ajax вызывал эти результаты, вам нужно вызвать файл, который фактически доставляет эти результаты.

Что вы можете сделать, это, скажем, создать новый файл, скажем, show_users.php и вставьте что-то вроде этого:

<?php
require_once'function.php';
$show_users=new DB_con();
$sql1=$show_users->show_users();

$usersArray = mysqli_fetch_assoc($sql1);
header('Content-type: application/json');
echo json_encode($usersArray);
?>

Затем убедитесь, что вы изменили свой топор ios колл с axios.get("function.php") на axios.get("show_users.php").

Хотя у меня есть скажем, делать все это вручную в PHP - это много ненужной работы. Вам было бы легче и безопаснее выбрать платформу, которая выполняет большую часть работы за вас, например, Laravel

Редактировать:

У вас очень запутанные названия. Например, у вас есть класс «DB_con», который, кстати, должен называться «DBCon». Я бы даже назвал это DBConnection, чтобы сделать его цель более очевидной. См. PSR-1 для общепринятых стандартов стиля кодирования.

У вас есть переменная с именем $show_users, которая создает экземпляр вашего класса DB_con, так что то, что содержит переменная, на самом деле является экземпляром DB_con. Это не имеет ничего общего с функцией show_users. Вот почему он также выглядит очень странно, чтобы увидеть позже $show_users->show_users(). Было бы более разумно назвать объект подключения, например, $connection, сделав его $connection = new DB_con();.

Далее вы называете свой запрос $sql1, хотя это НЕ SQL. SQL является языком запросов, и переменная с именем $sql должна содержать строку. На самом деле функция возвращает mysqli_result . И этот результат содержит пользовательские данные. Назовите его, например, $usersResult или $usersMysqliResult или что-то подобное. Тогда ваш код станет намного проще для понимания, сделав его

$connection = new DB_con();
$usersMysqlResult = $connection->show_users();
$usersArray = mysqli_fetch_assoc($usersMysqlResult);
...
...