#php #jquery #mysql #ajax
#php #jquery #mysql #ajax
Вопрос:
Я хочу использовать функцию выбора и функцию поиска в Интернете. И хотите показать людям столбцы таблиц данных DB в Интернете.
Если бы я использовал ‘или’ в $ sql, это работает функция поиска. Если я использовал ‘и’ в $ sql, это работает функция выбора.
Но я хочу использовать обе функции. Что не так с моими кодами? Как я могу получить обе функции?
Это ‘load_data_select.php — коды сценариев.
<script>
$(document).ready(function(){
function load_data(query)
{
$.ajax({
url:"load_data.php",
method:"POST",
data:{query:query},
dataType:"text",
success:function(data)
{
$('#show_product').html(data);
}
});
}
$('#search_text').keyup(function(){
var search = $(this).val();
if(search != '')
{
load_data(search);
}
else {
load_data(search);
}
});
$('#Category').change(function(){
var Category = $(this).val();
$.ajax({
url:"load_data.php",
method:"POST",
data:{Category:Category},
success:function(data)
{
$('#show_product').html(data);
}
});
});
$('#Obtain').change(function(){
var Obtain = $(this).val();
$.ajax({
url:"load_data.php",
method:"POST",
data:{Obtain:Obtain},
success:function(data)
{
$('#show_product').html(data);
}
});
});
});
</script>
Это load_data.php .
Если изменить «или категория» на «И категория»,
то работает функция выбора. но не работает функция поиска.
$sql = "SELECT * FROM 190406test2
WHERE Name LIKE '%".$_POST["query"]."%'
or Category = '".$_POST["Category"]."'
or Obtained_From = '".$_POST["Obtain"]."'
";
$result = mysqli_query($conn, $sql);
if(isset($_POST["query"]) or
isset($_POST["Category"]) or isset($_POST["Obtain"])
)
{
if($_POST["query"] != ''
or $_POST["Category"] != '' or $_POST["Obtain"] != '')
{
$sql;
}
else
{
$sql = "SELECT * FROM 190406test2
";
}
Я ожидаю вывода рабочей функции выбора и функции поиска,
но фактический результат — это только функция выбора или функция поиска.
Ответ №1:
1) Для использования обеих функций вам нужна новая кнопка :
При использовании ajax теги форм действительно не нужны. Вы можете просто сохранить свои поля ввода, упакованные в div-inputscontainer таким образом :
<div id="inputs_container">
<input type="text" id="inp1"></input>
<input type="text" id="inp2"></input>
<input type="text" id="inp3"></input>
<button id="submit_btn">Save</button>
</div>
<script>
$(document).ready(function() {
$("#submit_btn").click(function() {
var Obj_allinputs = new Object();
$("#inputs_container input[type=text]").each(function() {
Obj_allinputs[this.id]=this.value;
});
$.ajax({
url:"load_data.php",
method:"POST",
data:Obj_allinputs,
success:function(data)
{
$('#show_product').html(data);
}
}</script>
2) в load_data.php :
$sql='SELECT * FROM 190406test2';
if(count($_POST)>0) $sql.=' WHERE '
//if(isset($_POST["search"])) sql.=" Name LIKE '%?%' OR ";
$ar_bindparam=array();
foreach ($_POST as $key=>$val)
{
$ar_bindparam[$key] = $_POST[$val];
if($key=="search") sql.=" $key LIKE '%?%' OR ";
else sql.=" $key = '?' OR ";
}
$sql = preg_replace('#(sORs)$#', '', $sql);
//$result = mysqli_query($conn, $sql); //weak regarding injection
//$db = new mysqli("localhost","root","","tests");
if( $stmt = $db->prepare($sql) )
{ //stmt is of type mysqli_stmt
if(count($ar_bindparam)>0)
{
$ar_bindparam = array_merge(array(str_repeat('s', count($ar_bindparam))), array_values($ar_bindparam));
$ref = new ReflectionClass('mysqli_stmt');
$method = $ref->getMethod("bind_param");
$method->invokeArgs($stmt,$ar_bindparam);
//FOR php version < 5.3 : call_user_func_array(array(amp;$stmt, 'bind_param'), $ar_bindparam);
}
$smt->execute();
//echo $result in the right format back to your ajax call
}