Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.03.2019, 18:10
Интересующийся
Отправить личное сообщение для Volun Посмотреть профиль Найти все сообщения от Volun
 
Регистрация: 24.03.2019
Сообщений: 21

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;
}
?>
Ответить с цитированием
  #2 (permalink)  
Старый 31.03.2019, 18:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

$condition = " first_name=".$_GET['searchtext'];
"select * from users WHERE ".$condition
и тд

Нельзя так, тем более в mysqli.
Ответить с цитированием
  #3 (permalink)  
Старый 31.03.2019, 19:02
Интересующийся
Отправить личное сообщение для Volun Посмотреть профиль Найти все сообщения от Volun
 
Регистрация: 24.03.2019
Сообщений: 21

Все равно не ищет по тексту
Ответить с цитированием
  #4 (permalink)  
Старый 31.03.2019, 19:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Volun
Все равно не ищет по тексту
А чего сделано? Нельзя так потому, что это 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.

Последний раз редактировалось laimas, 31.03.2019 в 20:03.
Ответить с цитированием
  #5 (permalink)  
Старый 02.04.2019, 10:41
Интересующийся
Отправить личное сообщение для Volun Посмотреть профиль Найти все сообщения от Volun
 
Регистрация: 24.03.2019
Сообщений: 21

Ок, нашел проблему с поиском. Сделал живой поиск. Как мне передать в качестве второго параметра значение 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();

?>
Ответить с цитированием
  #6 (permalink)  
Старый 02.04.2019, 11:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

Драйвер mysqli имеет не именованные метки, можете их использовать, тогда данные подставляемые в запрос будут обработаны драйвером.

Функция fetch_array() возвращает два идентичных набора, которые вы отдаете клиенту, а зачем? При этом вы просто гоняете данные в цикле, а если над ними не производятся операции, то зачем это, если можно получить сразу набор из запроса?
Ответить с цитированием
  #7 (permalink)  
Старый 02.04.2019, 11:18
Интересующийся
Отправить личное сообщение для Volun Посмотреть профиль Найти все сообщения от Volun
 
Регистрация: 24.03.2019
Сообщений: 21

Спасибо, буду изучать. Но сейчас мне важно как передать параметр и принять его.
Ответить с цитированием
  #8 (permalink)  
Старый 02.04.2019, 11:38
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Volun
как передать параметр и принять его
Я не знаю, но если список, это не источник события и нужно просто взять его значение текущее, то можно вставить здесь - 'action.php?action=search&select='+document.queryS elector(selector).value.
Ответить с цитированием
  #9 (permalink)  
Старый 02.04.2019, 20:29
Интересующийся
Отправить личное сообщение для Volun Посмотреть профиль Найти все сообщения от Volun
 
Регистрация: 24.03.2019
Сообщений: 21

Не, так работать не будет потому что keyword передается первым аргументом.
Ответить с цитированием
  #10 (permalink)  
Старый 03.04.2019, 00:16
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Volun
keyword передается первым аргументом.
Причем тут keyword, это что такое ?action=search и как сервером получается? Что проблема методом GET еще один параметр передать? Если так принципиален метод передачи этого параметра, то добавлять его в toFormData после цикла: form_data.append("select", document.querySelector(selector).value);

Последний раз редактировалось laimas, 03.04.2019 в 01:35.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Живой поиск JQUERY + AJAX + PHP + MYSQL dimi007 AJAX и COMET 2 22.07.2014 13:50
Приглашаем web-программистов (php, MySQL, Javascript). smithandpartners Работа 2 06.09.2013 21:17
Приглашаем web-программистов (php, MySQL, Javascript) на постоянной основе smithandpartners Работа 0 15.11.2012 20:23
Приглашаем web-программистов (php, MySQL, Javascript). smithandpartners Работа 3 06.11.2012 22:29
Приглашаем web-программистов (php, MySQL, Javascript). smithandpartners Работа 2 18.08.2012 21:51