[PHP] Ricerca record tramite post

ONE313

Nuovo Utente
10 Set 2016
36
2
8
Buona sera, ho un problema nel visualizzare il risultato di due tabelle relazonate tra loro, utilizzando anche un select box. Volevo fare una ricerca come siti subito,amazon tramite categoria o prodotto.

PHP:
?php

$Host = "localhost";
$User = "root";
$Pass = "";
$Db = "ricerca_select";

$Conn = mysqli_connect($Host, $User, $Pass, $Db);

if (isset($_POST["submit"])) {
    $citta=$_POST["citta"];

$Query = "SELECT nome,cognome,citta FROM utente,citta where utente.ks_citta=citta.id_citta
  " ;
    /*oppure citta='$Citta' in base se volgio cercarea
    attraverso l'id o la cittas*/

    $Result= mysqli_query($Conn,$Query);

while ($Row=mysqli_fetch_array($Result)) {
   
        echo $Row[0]." ".$Row[1]." ".$Row[2]."<br>";
}
}
?>
HTML:
<!DOCTYPE html>
<html>
<head>
    <title>prova</title>
</head>
<body>
<form action="#" method="POST">
    <select>
        <option name="citta">roma</option>
        <option name="citta">parigi</option>
    </select>
    <input type="text" name="citta">
<input type="submit" name="submit">
   
</form>
</body>
</html>
 
Ultima modifica di un moderatore:

macus_adi

Utente Attivo
5 Dic 2017
1.319
88
48
IT/SW
Crea un middleware per valorizzare l'input (post/get), fai che la var restituisca porzione di query...
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.312
334
83
@ONE313
Quando posti del codice PHP devi usare il TAG
invece del TAG

Grazie
 

Rikk73

Utente Attivo
7 Apr 2015
134
6
18
Arezzo
$Query = "SELECT nome,cognome,citta FROM utente,citta where utente.ks_citta=citta.id_citta
Credo che la query così ti restituisca i soli dati delle colonne "nome,cognome,citta" della tabella utenti e nulla della tabella città,
prova a modificare la query così:

PHP:
//...
$Query = "SELECT utente.nome,utente.cognome,utente.citta, citta.* FROM utente,citta where utente.ks_citta=citta.id_citta
//...
 

ONE313

Nuovo Utente
10 Set 2016
36
2
8
Max1 Ok.
Marcus_adi non so come si creano i middelware e come valorizzare l'imput get/post. Dove posso trovare riferimenti?
 

ONE313

Nuovo Utente
10 Set 2016
36
2
8
Rikk73, i dati me li estrae in entrambe le tabelle bene.
tabella utenti i campi sono:
id_nome(int autoincrement), nome(varchar),cognome(varchar), citta(int..... questo campo è relazionato con id_citta).
tabella citta
id_citta(int autoincrement), citta(carchar)
Ho relazionato le tabelle tra loro e la select ok, se io pero voglio filtrare i dati attraverso un select box o input non riesco.
ho pensato di usare like nella query ma da errore
$Query = "SELECT nome,cognome,citta FROM utente,citta where utente.ks_citta=citta.id_citta like ".$Citta." " ;
 

macus_adi

Utente Attivo
5 Dic 2017
1.319
88
48
IT/SW
$Query = "SELECT nome,cognome,citta FROM utente,citta where utente.ks_citta=citta.id_citta like ".$Citta." " ;
Farei cosi:
PHP:
/**
* Metodo funzionale per effettuare il bind dei parametri
* @param array $bind Array associativo di valori
* @param string $type Stringa contentente i tipi
* @param bool $res Risultato fetchall
*
* @return $this|string
* @throws Exception
*/
private function execute_stmt($query,$bind,$type,$res=true){
   $this->stmt=$this->mysql->prepare($query);
   if($this->stmt->param_count != count($bind)){
      $this->exception='Numero di parametri non corretto per la query selezionata';
      return $this->exception;
   }
   $callArgs = array();
   foreach($bind as $index => $arg) {
      $callArgs[$index] = &$bind[$index];
   }
   try {
      array_unshift($callArgs, $type);
      call_user_func_array(array($this->stmt, 'bind_param'), $callArgs);
      $this->stmt->execute();

      if($res)$this->result=$this->stmt->get_result()->fetch_all(1);
      $this->stmt->close();
   }
   catch (Exception $e) {
      throw $e;
   }
   return $this;
}
$q = "SELECT nome,cognome,citta FROM utente,citta where utente.ks_citta=citta.id_citta like ?" ;
$tipologia='s';
$array_associativo=['citta'=>'Milano'];
$this->conn->execute_stmt($q,$array_associativo_valori,$tipologia)->result;
Questo è stato estratto solo ed esclusivamente da una mia Lib, in alternativa potresti utilizzare medoo.in
Notazione ad oggetti e non procedurale, quindi dovresti cambiare un pò di roba anche perchè i metodi che hai utilizzato sono deprecati già da un pò!
 

ONE313

Nuovo Utente
10 Set 2016
36
2
8
Ok, grazie della dritta. Mi guardo il metodo ad oggetti per capirlo e poi riprovo