[PHP] filtro

steve97

Utente Attivo
30 Mar 2017
53
0
6
nel mio db ho 2 tabelle, 1-utenti, 2-raccolta, nel primo registro tutti i nuovi utenti, nell'altro registro i gusti musicali dei miei utenti. nella tabella utenti ho il campo nazione, nell'altra ho i campi, artista e disponibilita che incrementa ogni volta che a un utente piace l'artista di un altro utente.
dunque nella homepage ho un formulario di ricerca con 2 campi, 1-artistta, 2-nazione, detto cio vorrei avere un filtro nei risultati, in tal modo che se un utente fa la ricerca con il nome di un artista vorrei che gli venisse mostrato tutti gli utenti che piacciono lo stesso artista e la nazionalita di questi utenti.
invece se qualcuno vuole sapere i gusti degli utenti della sua zona puo fare una ricerca per nazione e ottenere la lista di tutti gli utenti di quella precisa zona. un classico esempio e una bacheca degli annunci, se si cerca qualcosa si riceve la lista dei venditori e la posizione di queesti, invece se si cerca solo per zona si ottiene solo la lista di oggetti venduti in quella zona

visto la quantita di codice dei miei script ho preferito lasciarlo su github
https://github.com/stevenpro/sistema-di-prestiti-
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
Ciao steve97,
sempre che abbia bene interpretato ciò che chiedevi, ho fatto alcune prove, per le quali mi sono creato due tabelle, stilizzate al massimo:

PHP:
CREATE TABLE UTENTI (
        ID int(3) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        UTENTE varchar(10) NOT NULL,
        NAZIONE varchar(10) NOT NULL,
);      

CREATE TABLE RACCOLTA (
        ID int(3) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        ID_UTENTE int(3) NOT NULL,
        ARTISTA varchar(10) NOT NULL,
);


questo è il form, anch'esso molto stilizzato:


PHP:
<?php
echo '<form action="contrform.php" method="get">';
echo '    Cerca per: artista: ';
echo '    <input type="text" name="artista">';
echo '    nazione: ';
echo '    <input type="text" name="nazione">';
echo '    <br><br><input type="submit" name="invia" value="Invia i dati">';
echo '</form>';
?>

e infine il controllo:

PHP:
<?php
$artista = $_GET['artista'];
$nazione = $_GET['nazione'];

$connessione = new mysqli('.....','....','...-','....');

// verifica su eventuali errori di connessione
if ($connessione->connect_errno) {
    echo "Connessione fallita: ". $connessione->connect_error . ".";
    exit();
}

if ($artista != '') {
    if (!$result = $connessione->query("SELECT UTENTI.*,RACCOLTA.* FROM UTENTI INNER JOIN RACCOLTA ON RACCOLTA.ID_UTENTE = UTENTI.ID WHERE RACCOLTA.ARTISTA = '$artista'")) {
        echo "Errore della query: " . $connessione->error . ".";
    } else {
        // conteggio dei record
        if ($result->num_rows > 0) {
            // conteggio dei record restituiti dalla query
            while($row = $result->fetch_array(MYSQLI_ASSOC)) {
                  $id = $row['ID'];
                  $utente = $row['UTENTE'];
                  $nazione = $row['NAZIONE'];

                 echo $utente.' '.$nazione.'<br>';
           }
        }
    }
} else {
    if (!$result = $connessione->query("SELECT * FROM UTENTI WHERE NAZIONE = '$nazione'")) {
        echo "Errore della query: " . $connessione->error . ".";
    } else {
        // conteggio dei record
        if ($result->num_rows > 0) {
            // conteggio dei record restituiti dalla query
            while($row = $result->fetch_array(MYSQLI_ASSOC)) {
                  $id = $row['ID'];
                  $utente = $row['UTENTE'];
                  $nazione = $row['NAZIONE'];

                 echo $utente.' '.$nazione.'<br>';
           }
        }
    }

}

// liberazione delle risorse occupate dal risultato
$result->close();

?>


Zorro
 

steve97

Utente Attivo
30 Mar 2017
53
0
6
Ciao steve97,
sempre che abbia bene interpretato ciò che chiedevi, ho fatto alcune prove, per le quali mi sono creato due tabelle, stilizzate al massimo:

PHP:
CREATE TABLE UTENTI (
        ID int(3) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        UTENTE varchar(10) NOT NULL,
        NAZIONE varchar(10) NOT NULL,
);     

CREATE TABLE RACCOLTA (
        ID int(3) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        ID_UTENTE int(3) NOT NULL,
        ARTISTA varchar(10) NOT NULL,
);


questo è il form, anch'esso molto stilizzato:


PHP:
<?php
echo '<form action="contrform.php" method="get">';
echo '    Cerca per: artista: ';
echo '    <input type="text" name="artista">';
echo '    nazione: ';
echo '    <input type="text" name="nazione">';
echo '    <br><br><input type="submit" name="invia" value="Invia i dati">';
echo '</form>';
?>

e infine il controllo:

PHP:
<?php
$artista = $_GET['artista'];
$nazione = $_GET['nazione'];

$connessione = new mysqli('.....','....','...-','....');

// verifica su eventuali errori di connessione
if ($connessione->connect_errno) {
    echo "Connessione fallita: ". $connessione->connect_error . ".";
    exit();
}

if ($artista != '') {
    if (!$result = $connessione->query("SELECT UTENTI.*,RACCOLTA.* FROM UTENTI INNER JOIN RACCOLTA ON RACCOLTA.ID_UTENTE = UTENTI.ID WHERE RACCOLTA.ARTISTA = '$artista'")) {
        echo "Errore della query: " . $connessione->error . ".";
    } else {
        // conteggio dei record
        if ($result->num_rows > 0) {
            // conteggio dei record restituiti dalla query
            while($row = $result->fetch_array(MYSQLI_ASSOC)) {
                  $id = $row['ID'];
                  $utente = $row['UTENTE'];
                  $nazione = $row['NAZIONE'];

                 echo $utente.' '.$nazione.'<br>';
           }
        }
    }
} else {
    if (!$result = $connessione->query("SELECT * FROM UTENTI WHERE NAZIONE = '$nazione'")) {
        echo "Errore della query: " . $connessione->error . ".";
    } else {
        // conteggio dei record
        if ($result->num_rows > 0) {
            // conteggio dei record restituiti dalla query
            while($row = $result->fetch_array(MYSQLI_ASSOC)) {
                  $id = $row['ID'];
                  $utente = $row['UTENTE'];
                  $nazione = $row['NAZIONE'];

                 echo $utente.' '.$nazione.'<br>';
           }
        }
    }

}

// liberazione delle risorse occupate dal risultato
$result->close();

?>


Zorro
grazie zorro ma io avrei preferito un fork da parte tua, cosi da provare subito la tua soluzione. d'altronde io non uso il paradigma opp.
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
Ciao, se per fork intendi un esempio pratico, eccolo. Ovviamente dovrai adattarlo alle tue esigenze, inoltre penso che non importi molto come ti connetti, ma la query che usi per estrapolare i dati
 

steve97

Utente Attivo
30 Mar 2017
53
0
6
Ciao, se per fork intendi un esempio pratico, eccolo. Ovviamente dovrai adattarlo alle tue esigenze, inoltre penso che non importi molto come ti connetti, ma la query che usi per estrapolare i dati
ma nel campo di ricerca, non c'entra la nazione dell'artista ma la nazione dell'utente, comunque grazie, io sono ancora alle prime armi con php e non domino il paradigma opp e mi confondo. comunque con fork intendevo di prendere il mio codice e modificarlo, e poi ricaricarlo nella mia repository.
forse e meglio se facciamo x i libri. ad esempio se cerco il libro di harry potter e lascio il campo nazione vuoto dovrei avere nei risultati tutti i libri di harry potter e il luogo in cui e disponibile. invece se lascio il campo titolo del libro vuoto e metto lombardia nel campo nazione, dovrei avere tutti i libri che sono disponibili in quella zona, spero che sia chiaro il concetto, grazie.
la pagina e www.wardrivers.altervista.org

recapitolando tutto brevemente, nella mia homepage ho 3 sezioni,
1. form di login, 2 form di registrazione, 3 campo dei risultati, di default qui mi mostra tutti i dati estrapoltati nel db
 
Ultima modifica:

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
ma nel campo di ricerca, non c'entra la nazione dell'artista ma la nazione dell'utente,


ma infatti la nazione (o regione) è dell'utente, non dell'artista (infatti si trova nella tabella UTENTI). Se tu inserisci la nazione nel form di ricerca, ti estrapola tutti gli utenti che risiedono in quella nazione/regione; se fai la ricerca per artista invece ti fa vedere solo gli utenti, con la relativa nazione, amanti di quel particolare artista
 

steve97

Utente Attivo
30 Mar 2017
53
0
6
ma infatti la nazione (o regione) è dell'utente, non dell'artista (infatti si trova nella tabella UTENTI). Se tu inserisci la nazione nel form di ricerca, ti estrapola tutti gli utenti che risiedono in quella nazione/regione; se fai la ricerca per artista invece ti fa vedere solo gli utenti, con la relativa nazione, amanti di quel particolare artista
scusa ma la freccia destra nel codice x cosa sta, come sarebbe il codice normalmente senza quello
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
Cosa intendi con freccia destra e in quale parte del codice; spiegati meglio
 

steve97

Utente Attivo
30 Mar 2017
53
0
6
vorrei avere in un solo risultato la disponibilita e la ubicazione del libro

PHP:
<?php

$nome = $_GET['nome'];
$nazione = $_GET['nazione'];

$conex = mysql_connect('localhost', 'wardrivers');
mysql_select_db('my_wardrivers', $conex);

$sql = "SELECT * FROM raccolta WHERE nome='$nome'";
$result = mysql_query($sql);

if(mysql_num_rows($result) == 0) {echo "non ce ancora niente";}
elseif(mysql_num_rows($result) >= 1) {

while($reg = mysql_fetch_array($result)) {
echo "<div id='risultati'>";
echo "nome :".$reg['nome']."<br>";
echo "disponibilita :".$reg['disponibilita']."<br>";
echo "nazione :".$reg['nazione']."<br>";


}
?>
 
Ultima modifica di un moderatore:

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
la 'freccia destra' si chiama appunto operatore freccia, si scrive col trattino seguito dal simbolo di maggiore e si usa nella
oop, in particolare con le classi, e serve per accedere ad una proprietà o ad un metodo della classe.
Farò qualche prova con i libri; quindi, se ho capito bene, tu vorresti che, di un particolare libro, conoscere la disponibilità totale e le nazioni dove si trova es: disp. 5 nazioni: germania 2 italia 1 olanda 2
 
  • Like
Reactions: steve97

steve97

Utente Attivo
30 Mar 2017
53
0
6
la 'freccia destra' si chiama appunto operatore freccia, si scrive col trattino seguito dal simbolo di maggiore e si usa nella
oop, in particolare con le classi, e serve per accedere ad una proprietà o ad un metodo della classe.
Farò qualche prova con i libri; quindi, se ho capito bene, tu vorresti che, di un particolare libro, conoscere la disponibilità totale e le nazioni dove si trova es: disp. 5 nazioni: germania 2 italia 1 olanda 2
si e propio quello che voglio, ho cercato in rete ma mi confondo
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
....Fatto
Ho leggermente modificato le due tabelle (UTENTI e LIBRI). Ho inserito 4 libri dil prova: harry potter, il corsaro nero, cenerentola e bambi. Questo il link di esempio. Fai la prova con tuttli e 4 i libri. Spero vada bene


Zorro
 

steve97

Utente Attivo
30 Mar 2017
53
0
6
scussa adesso funziona il link e anche il sito bravo, ma adesso come faccio a integrarlo nel mio sito, potresti caricare il codice su git o qua, grazie
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
Prima di tutto le tabelle

PHP:
CREATE TABLE UTENTI (
        ID int(3) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        ID_LIBRO int(3) NOT NULL,
        UTENTE varchar(10) NOT NULL,
        NAZIONE varchar(10) NOT NULL,
);  

CREATE TABLE LIBRI (
        ID int(3) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        LIBRO varchar(10) NOT NULL,
);

quindi il form

PHP:
<?php
echo '<form action="contrform.php" method="get">';
echo '    Cerca per: libro: ';
echo '    <input type="text" name="libro">';
echo '    <br><br><input type="submit" name="invia" value="Invia i dati">';
echo '</form>';
?>

e infine il controllo

PHP:
<?php
$libro = $_GET['libro'];
$nazione = $_GET['nazione'];
$tot_libri = 0;
$arr_libri = array();
$indice = 0;
$nazione = '';

$connessione = new mysqli($host, $user, $password, $db);

// verifica su eventuali errori di connessione
if ($connessione->connect_errno) {
    echo "Connessione fallita: ". $connessione->connect_error . ".";
    exit();
}


if (!$result = $connessione->query("SELECT UTENTI.*,LIBRI.* FROM LIBRI INNER JOIN UTENTI ON LIBRI.ID = UTENTI.ID_LIBRO WHERE LIBRI.LIBRO = '$libro' ORDER BY NAZIONE")) {
    echo "Errore della query: " . $connessione->error . ".";
} else {
    // conteggio dei record
    if ($result->num_rows > 0) {
        // conteggio dei record restituiti dalla query
        while($row = $result->fetch_array(MYSQLI_ASSOC)) {
              $id = $row['ID'];
              $utente = $row['UTENTE'];
              $nazione = $row['NAZIONE'];
                 
              $tot_libri++;
              $arr_libri[$indice]['utente'] = $utente;
              $arr_libri[$indice]['nazione'] = $nazione;
              $indice++;
        }
        echo 'Totale libri disponibili: '.$tot_libri.'<br><br>';
        for ($ind=0;$ind<$tot_libri;$ind++) {
             if ($arr_libri[$ind]['nazione'] != $nazione) {
                 $nazione = $arr_libri[$ind]['nazione'];
                 echo '<br><b>'.$nazione.'</b><br>';
             }
             echo '&emsp;'.$arr_libri[$ind]['utente'].'  '.$arr_libri[$ind]['nazione'].'<br>';
        }
    } else {
        echo 'Spiacenti. Libro non disponibile.';
    }
}


// liberazione delle risorse occupate dal risultato
$result->close();

?>

Come vedi, ho creato un array (arr_libri) a due dimensioni misto (il primo indice numerico, il secondo 'associativo'). Se hai qualche dubbio, posta pure. Ciao


Zorro
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
PS
Ho dimenticato di cambiare il method del form in post (e quindi anche le variabili $_POST.....)
 
Discussioni simili
Autore Titolo Forum Risposte Data
Shyson Spostare filtro php di WordPress WordPress 0
M [PHP] Filtro da TXT con collegamento ipertestuale PHP 13
M [PHP] o [APACHE] - Filtro geo per accesso sito PHP 6
sandropochi [PHP] Form per creare filtro di ricerca su DB PHP 8
M [PHP - MYSQL] Mantenere filtro query in tabelle paginate PHP 3
I Datagrid Jquery PHP, mi servirebbero alcune soluzioni... Insrimento immagine e filtro PHP 2
davidec Disabilitare il filtro XSS (cross site scripting) via PHP PHP 3
G filtro in php con Drupal CMS (Content Management System) 3
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1

Discussioni simili