Я хочу использовать функцию выбора и функцию поиска в Интернете. И хотите показать людям столбцы таблиц данных БД в Интернете.
Если бы я использовал «или» в $ 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) Чтобы использовать обе функции, вам нужна новая кнопка:
При использовании 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('#(\sOR\s)$#', '', $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(&$stmt, 'bind_param'), $ar_bindparam);
}
$smt->execute();
//echo $result in the right format back to your ajax call
}