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. |
Все равно не ищет по тексту
|
Цитата:
Вообще, зачем такие дикие по содержанию условия как "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(); ?> |
Как об стену горохом. Ну нельзя так, вы пишите дырявый код, а это опасно, читать и изучать.
Драйвер mysqli имеет не именованные метки, можете их использовать, тогда данные подставляемые в запрос будут обработаны драйвером. Функция fetch_array() возвращает два идентичных набора, которые вы отдаете клиенту, а зачем? При этом вы просто гоняете данные в цикле, а если над ними не производятся операции, то зачем это, если можно получить сразу набор из запроса? |
Спасибо, буду изучать. Но сейчас мне важно как передать параметр и принять его.
|
Цитата:
|
Не, так работать не будет потому что keyword передается первым аргументом.
|
Цитата:
|
Часовой пояс GMT +3, время: 07:53. |