Как отправить условие запроса в PHP - PullRequest
0 голосов
/ 28 октября 2019

Я создаю приложение, которое отправляет и получает данные из базы данных. У меня есть вид переработчика со списком событий, которые я хочу отфильтровать.

Я создал условие WHERE в строке с этим кодом:

, где s1, s2 ecc ... являются единичным условием для каждого фильтра.

String query = "(" + s1 + " AND " + s2 + " AND " + /*c5 + " AND " + */ s3 + " AND " + s4 + " AND " + s5 + " AND " + s6 + " AND " + s7 + ")";

например:

if (data_da.getText().toString().isEmpty()){
                c1 = "(data between '1900/01/01' AND ";
            }else{

                String anno = data_da.getText().toString().substring(6);
                String mese = data_da.getText().toString().substring(3, 5);
                String giorno = data_da.getText().toString().substring(0, 2);

                //23/12/1222
                //2030/08/23

                c1 = "(data between '" +  anno + "/" + mese + "/" + giorno + "' AND ";
            }

            if (data_a.getText().toString().isEmpty()){
                c2 = "'9999/12/31' )";
            } else {
                String anno = data_a.getText().toString().substring(6);
                String mese = data_a.getText().toString().substring(3, 5);
                String giorno = data_a.getText().toString().substring(0, 2);

                c2 = "'" + anno + "/" + mese + "/" + giorno + "' )";
            }

            String s1= c1 + c2;

Теперь я хочу передать это условие php для получения отфильтрованного списка событий.

Я пытался с этим phpкод:

<?php 

//build query
$sql = "SELECT * FROM events";

//Add attivazione filter
if (isset($_GET['filtri']))
$category = $_GET['filtri'];
else if (isset($_POST['filtri']))
$category = $_POST['filtri'];

if (isset($category)) {
$filter[] = " '$category' ";
}
// end of category filter

// create additional filters here 

if (!empty($filter)) {
$sql .= ' WHERE ' . implode(' AND ', $filter);
}

//Determine sort order
if (isset($_GET['orderby']))
$orderby = $_GET['orderby'];
else if (isset($_POST['orderby']))
$orderby = $_POST['orderby'];

//default sort order to itemName column
if (isset($orderby)) {
$sql .= " ORDER BY " . $orderby;
} else {
 $sql .= " ORDER BY nomeEvento";
}

require_once('conn.php');
$rsItems = mysqli_query($connection, $sql) or 
 die(mysqli_error($connection));

?>

и с помощью этого json, чтобы получить ответ:

 <?php

 require_once('../database/queryDinamic.php');

 //Build array of data items
 $arRows = array();
 while ($row_rsItems = mysqli_fetch_assoc($rsItems)) {
   array_push($arRows, $row_rsItems);
 }

 //Serialize and deliver as JSON
 header('Content-type: application/json');
 echo json_encode($arRows);

 ?>

и вот как я делаю вызов дооснащения:

в интерфейсе, который я пыталсяи этот метод:

 String FEED19 = "json/queryDinamicFeed.php";

 @GET (FEED19)
 Call<Evento[]> queryDinamic(@Query("filtri") String filt);

 @FormUrlEncoded
  @POST(FEED19)
  Call<Evento[]> queryDinamic2 (@Field("filtri") String filt);

и в деятельности, которая должна получить данные:

   String query = "(" + s1 + " AND " + s2 + " AND " + /*c5 + " AND " + */ s3 + " AND " + s4 + " AND " + s5 + " AND " + s6 + " AND " + s7 + ")";


  MyWebService webService = MyWebService.retrofit.create(MyWebService.class);


            Call<Evento[]> queryFiltri = webService.queryDinamic(query);

                queryFiltri.enqueue(new Callback<Evento[]>() {
                    @Override
                    public void onResponse(Call<Evento[]> call, Response<Evento[]> response) {

                        if(!response.isSuccessful()){

                            Toast.makeText(Lista_Catalogo.this, "Code:" + response.code(), Toast.LENGTH_SHORT).show();
                            return;
                        }

                        Evento[] DatiEventi = response.body();

                        List<Evento> filtri;

                        filtri = Arrays.asList(DatiEventi);

                        ladapter = new Lista_Catalogo_Adapter(getApplicationContext(), filtri, dataCittaList, dataTypeList,updateStato());

                        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.ListEventi);
                        recyclerView.setAdapter(ladapter);

                        DrawerLayout drawer = findViewById(R.id.drawer_layout);
                        drawer.closeDrawer(GravityCompat.START);

                    }

                    @Override
                    public void onFailure(Call<Evento[]> call, Throwable t) {

                    }
                });

Я пробовал другие вещи, но результаты либо:

  • ничего не происходит;
  • очередь не входит в обратный вызов;
  • ошибка 404;
  • и другие ошибки, которые я не помню.

Может кто-нибудь помочь мне, пожалуйста? Большое спасибо.

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