Ricerca dati

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Salve a tutti,

Ragazzi mi servirebbe di nuovo il vostro aiuto. Dovrei creare un form per ricerca dati. Dovrei digitare il titolo del film e cercarlo nel database "film", indicarmi quanti numerro di film ci sono con quel titolo, e se l'ha trovato in archivio oppure se non l'ha trovato. Inoltre vorrei la ricerca digitando le prime tre iniziali del titolo, oppure quelle di mezz o finali, insomma basta che mi ricordo le lettere che ci stanno nel titolo del fil. Spero di ricevere un vostro aiuto grazie.
 
Come ho già detto più e più volte, in questa sezione non si realizzano script su commissione. Per quello c'è la Bacheca annunci. Se hai già scritto del codice allora possiamo aiutarti a farlo funzionare, altrimenti leggi qualche tutorial/guida/articolo sull'interazione tra PHP e MySQL, sulle ricerche FULLTEXT e sull'autocompletamento (su MRW ci dovrebbe essere materiale per ognuno di questi argomenti) e torna quando avrai fatto qualcosa.
 
Ciao

Allora,

Questa volta ho il codice, e funziona in parte. Non mi accetta le lettere apostrofate e accentate nella ricerca. E devo digitare il titolo completo. posto di seguito il codice, veiamo se mi potete dare una mano a migliorarlo grazie:

PHP:
<?PHP

require_once("connetti.php");                  Richiama la connessione al database
require_once("paginaprotetta.php");         Lo fa rientrare nella sessione protetta
require_once("presenta.php");                  Richiama la scritta che deve apparire in alto

//$query = " SELECT * FROM film WHERE titolofilm = '$titolofilm' ";

$titolofilm = $_POST['titolofilm'];

$query = " SELECT * FROM film WHERE titolofilm='$titolofilm'  ";
$res = mysql_query($query);

if($res && mysql_num_rows($res)>0){
while ($riga = mysql_fetch_array($res)) {
    echo $riga['titolofilm']. " - ". $riga['tipodvd']. " - ".$riga['data'];
   echo "<brZ> <brZ> <brZ/>";
}

} else
    echo "<b>\n";
    echo "Nessun film trovato in archivio";
    echo "<br>\n";
    echo "<a href=\"java-script:history.back();\">\n";
    echo "Ricerca nuovamente";
?>

Spero che sia sufficiente per aiutarmi. Grazie.
 
Ultima modifica di un moderatore:
ciao
io proverei a fare così
PHP:
<?php
//...
$titolofilm = $_POST['titolofilm'];//!!!!!controlli sull'inviio!!!
$query = " SELECT * FROM film WHERE titolofilm='$titolofilm' ";
$res = mysql_query($query);
if($res && mysql_num_rows($res)>0){
	while ($riga = mysql_fetch_array($res)) {//non ti dovrebbe servire il while in uanto il titolo dovrebbe essere unico ?
	echo $riga['titolofilm']. " - ". $riga['tipodvd']. " - ".$riga['data'];
	echo "<brZ> <brZ> <brZ/>";//??? cosa è il <brZ> ???
	}
} else{//NON triovata corridpondenza esatta
	$query_2 = " SELECT * FROM film WHERE titolofilm LIKE '%$titolofilm%' ";//cera la parola/e
	$res_2=mysql_query($query_2);
	if($res && mysql_num_rows($res_2)>0){
		while ($riga = mysql_fetch_array($res)) {
		echo $riga['titolofilm']. " - ". $riga['tipodvd']. " - ".$riga['data'];
		echo "<brZ> <brZ> <brZ/>";
		}//elenca tutti i film che contengono la parola cercata
	}else{
		echo "<b>\n Nessun film trovato in archivio</b>";//i tag si chiudono <b>.... </b>
		echo "<br>\n";
		echo "<a href=\"java-script:history.back();\">\n";
		echo "Ricerca nuovamente";
	}
}
//....
?>

p.s.
usa il tag php e, possibilmente attribuiscilo giusto
 
Ciao

L'ho provato ma non funziona la ricerca delle parole intermedie al titolo. Ad esempio, se cerchi "altrimenti ci arrabiamo", e ti ricordi men oppure mente, oppure qualsiasi altra parola contenuto nel titolo, quello non me lo trova :( Per quanto riguarda il titolo completo, va perfettamente, tranne per il titolo "non c'è due senza quattro" mi dicie film non presente mentre c'è nel database. Però considera che probabilmente è stato memorizzato così: "non c'è due senza quattro".
 
ciao
effettivamente il LIKE %pinco% cerca tutti i titoli che iniziano o finisco con "pinco" (non se in mezzo)
prova a sostituire la select che ti ho postato con
PHP:
//...
 $query_2 = " SELECT * FROM film WHERE titolofilm REGEXP '$titolofilm' ";//cerca la parola/e p.s. togli i %
//...
e dai un occhio a quest'articolo
https://www.mrw.it/mysql/articoli/espressioni-regolari-query-mysql_852.html
poi per quanto riguarda il secondo problema ricordati che è "meglio prevenire che reprimere" quindi quando inserisci un titolo fai in modo che venga scritto come poi puoi cercarlo (es con lettere tutte minuscole)
 
Ciao

Ciao,

Io ho fatto così:

PHP:
<?PHP

require_once("connetti.php");
require_once("paginaprotetta.php");
require_once("presenta.php");

$titolofilm = $_POST['titolofilm'];//!!!!!controlli sull'inviio!!!
//$query = " SELECT * FROM film WHERE titolofilm='$titolofilm' ";

$query = " SELECT * FROM film WHERE titolofilm LIKE '%$titolofilm%' ";
$res = mysql_query($query);
if($res && mysql_num_rows($res)>0){
    while ($riga = mysql_fetch_array($res)) {//non ti dovrebbe servire il while in uanto il titolo dovrebbe essere unico ?
    echo $riga['titolofilm']. " - ". $riga['tipodvd']. " - ".$riga['data'];
    echo "<brZ> <brZ> <brZ/>";//??? cosa è il <brZ> ???
    }
} else{//NON triovata corridpondenza esatta
    $query_2 = " SELECT * FROM film WHERE titolofilm LIKE '%$titolofilm%' ";//cera la parola/e
    $res_2=mysql_query($query_2);
    if($res && mysql_num_rows($res_2)>0){
        while ($riga = mysql_fetch_array($res)) {
        echo $riga['titolofilm']. " - ". $riga['tipodvd']. " - ".$riga['data'];
        echo "<brZ> <brZ> <brZ/>";
        }//elenca tutti i film che contengono la parola cercata
    }else{
        echo "<b>\n Nessun film trovato in archivio</b>";//i tag si chiudono <b>.... </b>
        echo "<br>\n";
        echo "<a href=\"java-script:history.back();\">\n";
        echo "Ricerca nuovamente";
    }
}
?>

E funziona perfettamente, in pratica ho sostituito la query 2 con la query principale e se tu digiti le parole che ti ricordi di un dato film, quindi mettiamo caso "altrimenti ci arrabbiamo", e ti ricordi la parola "men", e la digiti, te la trova. Mi sai spiegare il perkè sostituendola query funziona ???
 
Ultima modifica di un moderatore:
ciao
Mi sai spiegare il perkè sostituendola query funziona ???
ho fatto un piccolo errore di copia incolla, non vorrei dirti quale perchè fare il debag è quasi importante come conoscere php (forse anche di più)
prima di guardare in fondo prova a cercarlo :-)




p.s.
quando scrivi del php per il codice usa il tag php (a sx del pulsante code e html)



PHP:
if([B]$res [/B]&& mysql_num_rows($res_2)>0){
doveva essere $res_2
 
Ultima modifica di un moderatore:
Ciao

Non so se hai letto l'email che ti ho inviato prima. Comunque, c'è un piccolo problema. Quando digito per intero un fil con l'apostrofo tipo: l'ultimo samurau o non c'è due senza quattro (sono un patito di bud spence & terence hill), mi dice film non presente in archivio. mentre ovviamente c'è. Inoltre se digito le parole di mezzo come "l'ult" o "non" mi trova i suddetti film come mai secondo te ??? Po' esse per l'errore tuo di digitura ^????? Un ultima cosa, il <brZ> è stato n errore mio di digitura volevo scrivere <br>. Ma io ho adoperato i tag del php il simbolo cancelletto giusto ????
 
ciao
un po' (con l'apostrofo) di studio di mysql non ti farebbe male.
quando nel form di ricerca o per inserire inserisci delle parole con l'apostrofo, mysql (ignorante perchè non conosce l'italiano) lo interpreta come un apice che divide la stringa.
quindi, in breve, è importante inserire con addslashes e poi leggere con stripslashes es.
PHP:
<?php
//es. per l'insert
$stringa=addslashes("pinco de'pallis");//diventa "pinco de\'pallis" qundi lo gnocco mysql capisce che non è un apice che divide la stringa
//es. di lettura
echo stripslashes($stringa);// toglie lo slash e in uot avrai pinco de' pallis
?>
poi
Ma io ho adoperato i tag del php il simbolo cancelletto giusto ????
i tag php sono <?php //tutto lo script ?> o parli dei tag di formattazione del testo quando scrivi i post, in tal caso sono
[ PHP]//tutto lo script [ /PHP]
il simbolo # può andare bene per altro (es. js), per l'atml puro usa i tag <> e, più a dx, php(nota ho messo lo spazio perche altrimenti non li vedi)
 
Ciao

Si, intendevo i tag per racchiudere il codice, in genere adopero sempre il simbolo #: potrebbe essere stata una svista i simboli "<>". Che squl fosse un po' gnurantello lo sapevo, perchè ci lavoro da parecchio con visual basic. però ho optato in questa maniera:

PHP:
$titolofilm = mysql_real_escape_string ($_POST['titolofilm']);
$autoreprinc = mysql_real_escape_string ($_POST['autoreprinc']);

Scusami ho sempre sbagliato allora adoperando con il cancelletto. Eeheheheh me ne sono accorto ora. Mi hanni fato inserire questa stringa per i caratteri speciali: mysql_real_escape_string E sembra che funzioni anche se nle database va a scrivere tutti i suoi simboli. Inoltre volevo sapere, come posso indicarli nella ricerca il numero di film che ha trovato con quell'autore o titolo di film (se per sbaglio ci sono doppioni) ?????
 
Ciao

La domanda è semplice. Mi piacerebbe indicare nella ricerca, oltre ad aver trovato il film anche il quantitativo cioè se c'è ne sono 5 magari perkè sono stati inseriti a memoria e quindi sbagliati, ecc. e anche dello stesso autore, quindi se io digito nelò campo di ricerca anche il nome dell'autore principale, ad esempio bud spencer, lui mi tirerà fuori che ci sono magari 5 film con lui.
 
ciao
il problema, secondo me, andrebbe diviso in due parti
1. numero di record con lo stesso titolo di film
questo non dovrebbe succedere, inserire e crere due record (o più) es. con il titlo "altrimenti ci arrabbiamo" non dovrebbe essere possibile
questo può essere risolto in fase di inserimento prima verificando se il titolo è giò stato immesso con una query di select con whwre titolo=titolo_immesso
e con mysql_num_rows verificare
se mysql_num_rows == 0 : inserisco, altrimenti NO
2. se nella tabella esiste anche il campo (es.) attore, nel form di ricerca metti oltre a quello del titolo anche quello per cercarlo.
poi dove fai la ricerca ti costruisci il WHERE che ti serve mettere nella query
esempio:
presumo che nella tabella ci sia un campo chiamato attore
PHP:
<?php
//.....
$wh=" WHERE 1=1 ";
if($_POST['titolo'] !=""){
	$wh = $wh." AND titolo='".$_POST['titolo']."'";
}
if($_POST['attore'] !=""){
	$wh = $wh." AND attore='".$_POST['attore']."'";
}
$query ="SELECT * FROM tabella".$wh;
/*in funzione dei post vuoti o no la query puo diventare
"SELECT * FROM tabella WHERE 1=1" entrambi i post vuoti: cerca tutti i titoli esistenti
"SELECT * FROM tabella WHERE 1=1 AND titolo='altrimenti ci arrabbiamo'" cerca solo il film
"SELECT * FROM tabella WHERE 1=1 AND attore='bud'" cerca tutti i film con bud
"SELECT * FROM tabella WHERE 1=1 AND titolo='altrimenti ci arrabbiamo' AND attore='bud'" se bud non c'è o titolo non c' ricerca fallita else presenta
*/
//qui usando sempre mysql_num_roes poi ricavarti quanti film hai trovato
//....
?>
 
Ciao

Ciao,

Innanzi tutto grazxie dei consigli e buona domenica. Secondo poi. la mia tabella chiamata "film", contengo 4 campi che sono:

1) Attore Principale

2) Titolo Film

3) Tipo DvD (Originalte, Tv , Sky)

4) Data

Io ovviamente all'inizio avevo sottovalutato il campo attore principale. Anzi proprio non l'avevo considerato. Invece ieri mi sono reso conto che serviva. Perchè sui dvd originali, c'è sempre scritto l'attore principale. Ora proverò la soluzione ch emi hai dato e ti farò sapere. Quindi tu pensi meglio mettere una verifica prima all'inserimento dei film giusto ??? Tutto sommato credo che tu abbia ragione. Ci sentiamo dopo per l'esetio
 
ciao
ho visto la tabella, secondo me manca un campo importante:
id int(12) autoincrement primarykey
è il campo che identifica i vari record e può servirti inoltre per ulteriori collegamenti
 
Ciao

Ciao,

mi sa che ho di nuovo bisogno del tuo aiuto, se puoi ovviamente. Innanzi tutto, vorrei capire come poter eliminare gli errori notice, ora posto l'errore. mi hanno detto che non lo devo considerare, perchè non è un errore importante, però mi da fastidio all'occhio e un buon programmatore, secondo me deve eliminare anche gli errori non importanti, o sbaglio ???? L'errore è il seguente:


Notice: Undefined index: attoreprinc in C:\xampp\htdocs\Archivio\cerca 2.php on line 6

Perchè da una parte me lo da e da un'altra no ??? La riga interessate a cui segnala l'errore è la seguente:

PHP:
$titolofilm = mysql_real_escape_string ($_POST['titolofilm']);        //da errore notice ecc ecc.

Che differenza c'è con questa riga qua ????

PHP:
$attoreprinc = mysql_real_escape_string ($_POST['attoreprinc']);

La prima riga che ti ho segnato, mi da l'errore per intenderci quella riguardante 8titolofilm), invece la seconda, liscio come l'olio nessun errore. Chi ci capisce è bravo. bah. Mi puoi dare delle spiegazioni per favore ??? Grazie. Scusa rettifico, entrambi danno errore notice.
 
ciao
la differenza potrebbe essere non tanto nella riga, ma dal nome. es.
se nel form di ricerca hai scritto
<input name="totolo" type="text" id="totolo">
cioè totolo al posto di titolo
nella $_POST non trova l'indice 'titolo'.
ricordati una cosa importante:
php indica l'errore dove si inceppa, ma l'errore può (anzi è facile) nascere alcune righe ed anche pagine prima.

comunque prova a mettere il solito var_dump

PHP:
var_dump($_POST['titolofilm']);
$titolofilm = mysql_real_escape_string ($_POST['titolofilm']);        //da errore notice ecc ecc.
e verifica/posta cosa riporta
 

Discussioni simili