Просмотр полной версии : Vue + Axios + PHP + MySQL
Друзья, прошу вашей помощи. Никак не получается настроить поиск по тексту. Поиск по численным значениям работает нормально, а вот текст не выдает. Код элемента Vue:
var app = new Vue({
  el: '#myapp',
  data: {
    users: "",
    searchtext: "",
    select: "",
  },
  methods: {
    allRecords: function(){
      axios.get('ajaxfile.php')
      .then(function (response) {
         app.users = response.data;
      })
      .catch(function (error) {
         console.log(error);
      });
    },
    recordByID: function(){
      if(this.searchtext >0){
 
        axios.get('ajaxfile.php', {
           params: {
             searchtext: this.searchtext,
             select: this.select,
           }
        })
        .then(function (response) {
           app.users = response.data;
        })
        .catch(function (error) {
           console.log(error);
        });
      }
    }
  }
})
Код файла PHP который принимает запросы от Vue:
<?php
include "config.php";
if (isset($_GET['select'])) { 
  $sel = $_GET['select'];
}
if ($sel = "Signups table") {
$condition = "1";
 if(isset($_GET['searchtext'])){
    $condition = " first_name=".$_GET['searchtext'];
}
$userData = mysqli_query($con,"select * from users WHERE ".$condition);
$response = array();
while($row = mysqli_fetch_assoc($userData)){
   $response[] = $row;
}
echo json_encode($response);
exit;
}
if ($sel = "Leads table") {
$condition = "1";
if(isset($_GET['searchtext'])){
   $condition = " first_name=".$_GET['searchtext'];
}
$userData = mysqli_query($con,"select * from members WHERE ".$condition);
$response = array();
while($row = mysqli_fetch_assoc($userData)){
   $response[] = $row;
}
echo json_encode($response);
exit;
}
?>
$condition = " first_name=".$_GET['searchtext'];
"select * from users WHERE ".$condition
и тд
Нельзя так, тем более в mysqli.
Все равно не ищет по тексту
Все равно не ищет по тексту
А чего сделано? Нельзя так потому, что это 100% инъекция. А что касается поиска, это уже логика. 
Вообще, зачем такие дикие по содержанию условия как "Signups table" и "Leads table", что нельзя проще "signups" и "leads"? А далее просто текст запроса формировать, который выполнить один раз и результат отдать клиенту:
$data = mysqli_real_escape_string($_GET['searchtext']); 
$sql = $_GET['select']=="signups" ? "select * from users WHERE first_name='".$data."'"
            : "select * from members WHERE first_name='".$data."'";
$q = mysqli_query($con, $sql);
exit(json_encode(mysqli_fetch_all($q)));
Условия и проверки добавите сами. А в чем должно искать по числам, это только вам да богу известно, тем более для поля с одним и тем же именем - first_name.
Ок, нашел проблему с поиском. Сделал живой поиск. Как мне передать в качестве второго параметра значение select в файле
var app = new Vue({
	el: '#myapp',
	data:{
		members: [],
                select: "",
		search: {keyword: ''},
		noMember: false
	},
	mounted: function(){
		this.fetchMembers();
	},
	methods:{
		searchMonitor: function() {
			var keyword = app.toFormData(app.search);
	   		axios.post('action.php?action=search', keyword,)
				.then(function(response){
					app.members = response.data.members;
					if(response.data.members == ''){
						app.noMember = true;
					}
					else{
						app.noMember = false;
					}
				});
       	},
       	fetchMembers: function(){
			axios.post('action.php')
				.then(function(response){
					app.members = response.data.members;
				});
       	},
		toFormData: function(obj){
			var form_data = new FormData();
			for(var key in obj){
				form_data.append(key, obj[key]);
			}
			return form_data;
		},
	}
});
чтобы в зависимости от его значения php файл производил поиск по разным базам
<?php
$conn = new mysqli("", "", "", "");
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$out = array('error' => false);
$action="show";
if(isset($_GET['action'])){
	$action=$_GET['action'];
}
if($action=='show'){
	$sql = "select * from members";
	$query = $conn->query($sql);
	$members = array();
	while($row = $query->fetch_array()){
		array_push($members, $row);
	}
	$out['members'] = $members;
}
if($action=='search'){
	$keyword=$_POST['keyword'];
	$sql="select * from members where first_name like '%$keyword%' or last_name like '%$keyword%' or email like '%$keyword%'";
	$query = $conn->query($sql);
	$members = array();
	while($row = $query->fetch_array()){
		array_push($members, $row);
	}
	$out['members'] = $members;
}
$conn->close();
header("Content-type: application/json");
echo json_encode($out);
die();
?>
Как об стену горохом. Ну нельзя так, вы пишите дырявый код, а это опасно, читать и изучать (https://www.php.net/manual/ru/security.database.sql-injection.php).
Драйвер mysqli имеет не именованные метки (https://www.php.net/manual/ru/mysqli-stmt.prepare.php), можете их использовать, тогда данные подставляемые в запрос будут обработаны драйвером.
Функция fetch_array() возвращает два идентичных набора, которые вы отдаете клиенту, а зачем? При этом вы просто гоняете данные в цикле, а если над ними не производятся операции, то зачем это, если можно получить сразу набор (https://www.php.net/manual/ru/mysqli-result.fetch-all.php) из запроса?
Спасибо, буду изучать. Но сейчас мне важно как передать параметр и принять его.
как передать параметр и принять его
Я не знаю, но если список, это не источник события и нужно просто взять его значение текущее, то можно вставить здесь - 'action.php?action=search&select='+document.querySelector(selector).value.
Не, так работать не будет потому что keyword передается первым аргументом.
keyword передается первым аргументом.
Причем тут keyword, это что такое ?action=search и как сервером получается? Что проблема методом GET еще один параметр передать? Если так принципиален метод передачи этого параметра, то добавлять его в toFormData после цикла: form_data.append("select", document.querySelector(selector).value);
В общем сделал вот так 
axios.post('action.php?action=search&select='+this.selected, keyword)
вижу что в запросе передается параметр
/action.php?action=search&select=leads
пытаюсь выловить его в php файле как
$select=$_GET['select'];
но ничего не получаю. Подскажите плиз что делаю не так?
А что такое this.selected?
data:{
		members: [],
                selected: "leads",
		search: {keyword: ''},
		noMember: false
	},
Ну если свойство определено, то оно будет передано и на сервере получить его не будет проблема. Да и проверить это не сложно в отладчике, данные запроса, можно и в консоль все определения вывести. Вы проверяли это?
PS. Да и доступ то будет this.data.selected
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot