Autore Topic: problema con motore di ricerca  (Letto 178 volte)

Offline newbie2016

  • Utente junior
  • **
  • Post: 79
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Cubot X9
  • Sistema operativo:
    Windows 7
problema con motore di ricerca
« il: 19 Luglio 2016, 19:02:29 CEST »
0
Salve, sto cercando di realizzare un motore di ricerca che prenda i dati da un db mysql.

Ho un modulo dove seleziono delle voci sia tramite Edittext sia  tramite degli spinner (Segno zodiacale, Sesso, Tipo Cucina, Budget, Situazione Sentimentale) ma non funziona mi dice nessun risultato trovato

Se invece lascio solo un campo per la ricerca es. nome funziona se metto tutti i campi come qui sotto non mi trova nulla.

Dove sbaglio?
Grazie

di seguito il codice che utilizzo per la ricerca:
Codice: [Seleziona]
<?
    $cn = mysql_connect("localhost", "usr", "pwd123");
    @mysql_select_db("nome_db", $cn);
    $nome = isset($_POST["nome"]) ? htmlspecialchars($_POST["nome"]) : '';
$professione = isset($_POST["professione"]) ? htmlspecialchars($_POST["professione"]) : '';
$sesso = isset($_POST["sesso"]) ? htmlspecialchars($_POST["sesso"]) : '';
$zodiacale = isset($_POST["zodiacale"]) ? htmlspecialchars($_POST["zodiacale"]) : '';
$cucina = isset($_POST["cucina"]) ? htmlspecialchars($_POST["cucina"]) : '';
$busget = isset($_POST["budget"]) ? htmlspecialchars($_POST["budget"]) : '';
$situazione = isset($_POST["situazione"]) ? htmlspecialchars($_POST["situazione"]) : '';
?>
<html><head><title>Risultati della ricerca</title></head><body>
<p>
<b>Risultati della ricerca:</b>
<?
    if (!$nome | !$professione | !$sesso | !$zodiacale | !$cucina | !$budget | !$situazione)
    {
        echo "nessun risultato!";
    }
    else
    {
        echo $nome, $professione, $sesso, $zodiacale, $cucina, $budget, $situazione;
    }
?>
</p>
<?
    if (!$nome | !$professione | !$sesso | !$zodiacale | !$cucina | !$budget | !$situazione)
    {
?>
<p>Specificare un criterio di ricerca.</p>
<?
    }
    else
    {
        $arr_txt = explode(" ", $nome);
        $arr_txt2 = explode(" ", $professione);
        $arr_txt3 = explode(" ", $sesso);
        $arr_txt4 = explode(" ", $zodiacale);
        $arr_txt5 = explode(" ", $cucina);
        $arr_txt6 = explode(" ", $busget);
        $arr_txt7 = explode(" ", $situazione);
       
        $sql = "SELECT * FROM utenti WHERE ";
        for ($i=0; $i<count($arr_txt); $i++)
        {
            if ($i > 0)
            {
                $sql .= " AND ";
            }
            $sql .= "(nome LIKE '%" . mysql_real_escape_string($arr_txt[$i]) . "%' OR professione LIKE '%" . mysql_real_escape_string($arr_txt2[$i]) . "%')";
        }
        $sql .= " ORDER BY nome ASC";
        $query = mysql_query($sql, $cn);
        $quanti = mysql_num_rows($query);
        if ($quanti == 0)
        {
?>
<p>Nessun risultato!</p>
<?
        }
        else
        {
            for($x=0; $x<$quanti; $x++)
            {
                $rs = mysql_fetch_row($query);
                $id = $rs[0];
                $nome = $rs[2];
                $professione = $rs[4];
                $sesso = $rs[7];
                $zodiacale = $rs[14];
                $cucina = $rs[29];
                $busget = $rs[30];
                $situazione = $rs[31];
?>
<p><a href="leggi.php?id=<?echo $id?>"><?echo $nome?></a></p>
<?
            }
        }
    }
?>
</body></html>

Offline newbie2016

  • Utente junior
  • **
  • Post: 79
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Cubot X9
  • Sistema operativo:
    Windows 7
Re:problema con motore di ricerca
« Risposta #1 il: 20 Luglio 2016, 23:03:18 CEST »
0
Ho modificato tutto:

Faccio la ricerca solo per Città.
Da una Activity invio il dato inserito dall'utente (la città) e nella second Activity riceve il dato inviato e dovrebbe elencare tutti i record che contengono la parola cercata nel campo della città.

Nella seconda Activity utilizzo questo codice:
Codice (Java): [Seleziona]
public class ViewSearch extends AppCompatActivity implements ListView.OnItemClickListener {
    private String nome;
    private ListView listView;

    private String JSON_STRING;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act2);
        listView = (ListView) findViewById(R.id.listView);
        listView.setOnItemClickListener(this);
        getJSON();

        TextView testo = (TextView) findViewById(R.id.risultato_ricerca);

        Intent intent = getIntent();
        String nome = intent.getStringExtra("nome");

        testo.setText("Hai cercato: " + nome);
    }



    private void showEmployee(){
        JSONObject jsonObject = null;
        ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String, String>>();
        try {
            jsonObject = new JSONObject(JSON_STRING);
            JSONArray result = jsonObject.getJSONArray(Config.TAG_JSON_ARRAY);

            for(int i = 0; i<result.length(); i++){
                JSONObject jo = result.getJSONObject(i);
                String id = jo.getString(Config.TAG_ID);
                String cognome = jo.getString(Config.TAG_COGNOME);
                String nome = jo.getString(Config.TAG_NOME);
                String email = jo.getString(Config.TAG_EMAIL);
                String paese = jo.getString(Config.TAG_CITTA);
                String provincia = jo.getString(Config.TAG_PROVINCIA);

                HashMap<String,String> employees = new HashMap<>();
                employees.put(Config.TAG_ID,id);
                employees.put(Config.TAG_COGNOME,cognome);
                employees.put(Config.TAG_NOME,nome);
                employees.put(Config.TAG_EMAIL,email);
                employees.put(Config.TAG_CITTA,paese);
                employees.put(Config.TAG_PROVINCIA,provincia);
                list.add(employees);
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }

        ListAdapter adapter = new SimpleAdapter(
                ViewSearch.this, list, R.layout.list_item_result,
                new String[]{Config.TAG_ID,Config.TAG_COGNOME,Config.TAG_NOME,Config.TAG_EMAIL,Config.TAG_CITTA,Config.TAG_PROVINCIA},
                new int[]{R.id.id, R.id.cognome, R.id.nome, R.id.email, R.id.paese, R.id.provincia});

        listView.setAdapter(adapter);
    }

    private void getJSON(){
        class GetJSON extends AsyncTask<Void,Void,String>{

            ProgressDialog loading;
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                loading = ProgressDialog.show(ViewSearch.this,"Fetching Data","Wait...",false,false);
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                loading.dismiss();
                JSON_STRING = s;
                showEmployee();
            }

            @Override
            protected String doInBackground(Void... params) {
                RequestHandler rh = new RequestHandler();
                String s = rh.sendGetRequestParam(Config.URL_GET_SEARCH,nome);
                return s;
            }
        }
        GetJSON gj = new GetJSON();
        gj.execute();
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Intent intent = new Intent(this, ViewEmployee.class);
        HashMap<String,String> map =(HashMap)parent.getItemAtPosition(position);
        String empId = map.get(Config.TAG_ID).toString();
        intent.putExtra(Config.EMP_ID,empId);
        startActivity(intent);
    }
}

nella prima parte ricevo il dato cercato
Codice (Java): [Seleziona]
TextView testo = (TextView) findViewById(R.id.risultato_ricerca);

        Intent intent = getIntent();
        String nome = intent.getStringExtra("nome");

        testo.setText("Hai cercato: " + nome);

e lo visualizza correttamente. Però non mi elenca i dati trovati (e ci sono).

il collegamento al DB è il seguente
Codice (Java): [Seleziona]
protected String doInBackground(Void... params) {
                RequestHandler rh = new RequestHandler();
                String s = rh.sendGetRequestParam(Config.URL_GET_SEARCH,nome);
                return s;
            }

URL_GET_SEARCH è l'indirizzo del database
nome è il parametro di ricerca.

Come mai non funziona?

Grazie