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, время: 19:46. |