Php / My sql motore di ricerca

Sargon

Utente Attivo
22 Mar 2012
45
0
0
Ciao a tutti .
è la prima volta che posto una domanda e ringrazio anticipatamante chi potrà darmi una mano.. Premetto, non sono un esperto di php.. ma grazie alle vostre guide sono riuscito solo per adesso a creare un semplice motore di ricerca... Adesso vorrei passare ad un motore di ricerca avanzato... arriviamo al sodo..... ho creato un form in html composto da tre campi testo, Autore, Titolo, Testo.... tramite questo form... devo effettuare una ricerca su un database my sql (libri)..... dunque se inserisco il nome dell'autore... dovrebbe uscirmi tutte le schede libro riguardanti quell'autore... se inserisco autore e titolo... dovrebbe uscirmi la scheda di quel libro... e così via.... Vi posto la bozza del codice che ho cercato di elaborare....
sapete dirmi dove sta l'errore?

PHP:
<form action=’index.php?ricerca=ok’ method=’POST’>
    <p class=”Stile1″></p>
<p class=”Stile1″><br />
      <input name=”autore” type=”text” value=”" size=”80″ />
    </p>
<p class=”Stile1″>
 <input name=”titolo” type=”text” value=”" size=”80″ />
</p>
<p class=”Stile1″>
 <input name=”descrizione” type=”text” value=”" size=”80″ />
    </p>
<p>
      <input name=”submit” type=’submit’ value=’cerca’ />
</p>
    <p><span style=”clear: both;”>
 
<?php
 
// connettiamoci il nostro database
 
$db_host = “”;
$db_user = “”;
$db_password = “”;
$db_name = “”;
 
//connetto il database
 
$db = mysql_connect($db_host, $db_user, $db_password) or die (‘Errore durante la connessione’);
mysql_select_db($db_name, $db) or die (‘Errore durante la selezione del db’);
 
 
 
 
// recuperiamo ora cerca inviato con post
 
$autore = $_POST['autore'];
$titolo = $_POST['titolo'];
$descrizione = $_POST['descrizione'];
 
 
 
 
$clausola = “”;
if ( $_POST['autore'] != “” ) $clausola = ‘autore LIKE “%’ . $_POST['autore'] . ‘%”‘;
 
$temp = “”;
if ( $_POST['titolo'] != “” ) $temp = ‘titolo LIKE “%’ . $_POST['titolo'] . ‘%”‘;
if ( $clausola != “” ) $clausola .= ” AND “;
$clausola .= $temp;
 
$temp = “”;
if ( $_POST['descrizione'] != “” ) $temp = ‘descrizione LIKE “%’ . $_POST['descrizione'] . ‘%”‘;
if ( $clausola != “” ) $clausola .= ” AND “;
$clausola .= $temp;
 
 
 
if ($clausola != “” ) {
$query .= ” WHERE ( ” . $clausola . ” )”;
}
 
$query = “SELECT * FROM tabella WHERE autore LIKE ‘%$cerca%’ AND titolo LIKE ‘%$cerca%’AND descrizione LIKE ‘%$cerca%’”; 
 
 
 
$autore = $row['autore'];
$titolo = $row['titolo'];
$descrizione = $row['descrizione'];
 
 
 
// stampiamo i nostri dati
echo “<B>Autore:</B> $autore<br>”;
echo “<B>Titolo:</B> $titolo “;
echo “<B>Descrizione:</B> $descrizione<br>”;
 
 
 
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
benvenuto nel forum.
prima di risponderti devo farti una domanda: cosa hai usato per scrivere il codice?
poi ti dico come fare
 

Sargon

Utente Attivo
22 Mar 2012
45
0
0
Buongiorno e grazie :) ho cercato di osservare diversi script e da li ho cercato di capire il funzionamento
delle diverse query, non essendo del settore mi tocca fare così
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ti chiedevo perchè vedo gli apici "bislacchi" che sono quelli che usualmente ritorna word.
metto giù e nel pomeriggio ti invio qualcosa
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao, fatto più in fretta
da un occhio a questo.
guarda che l'ho messo giù in forma didattica (quindi alcune cose possono essere semplificate), ho considerato inoltre che sia il form che la visualizzazione dei risultati siano nella stessa pagina.
leggi i commenti
PHP:
<?php
if(isset($_POST['submit']){//verifico che sia stato premuto il submit
	//premuto SI
	// connettiamoci il nostro database 
	$db_host = ""; 
	$db_user = ""; 
	$db_password = ""; 
	$db_name = "";
	//connetto il database 
	$db = mysql_connect($db_host, $db_user, $db_password) or die ('Errore durante la connessione'); 
	mysql_select_db($db_name, $db) or die ('Errore durante la selezione del db'); 

	/*conviene mettere sia trim per verificare se solo spazi e addslashes perche se es. titolo = l'alba del domani
	l'apice nel db ti fa casino, con addslashes diventa l\'alba del domani
	ricordati di usarlo anche quando inserisci i dati nella tabella del db
	poi quando visualizzi per toglerlo userai stripslashes
	*/
	$autore = addslashes(trim($_POST['autore'])); 
	$titolo = addslashes(trim($_POST['titolo'])); 
	$descrizione = addslashes(trim($_POST['descrizione']));
	//iniziamo a costruire la querystringa
	$query = "SELECT * FROM tabella WHERE 1=1 ";//l' 1=1 ti serve per evitare di tagliare nel caso i post siano vuoti
	//in questo modo puoi cercare per autore+titolo+descrizione, o solo autore+titolo... con tutte le combinazioni possibili
	$w_autore="";
	if($autore != ""){$w_autore=" AND autore LIKE '%".$autore."'% ";}
	$w_titolo="";
	if($titolo!=""){$w_titolo=" AND titolo LIKE '%".$titolo."'% ";}
	$w_descrizione="";
	if($descrizione!=""){$w_descrizione=" AND descrizione LIKE '%".$descrizione."'% ";}
	//se tutte vuoti ti saltano fuori tutti i tiloli ecc... quindi ti conviene mettere in ordine alfabetico es. per autore
	//termino di costruire la querysrtinga concatenando quanto risulta da sopra
	$query .=$w_autore.$w_titolo.$w_descrizione." ORDER BY autore";
	//la seguente istruzione, che non avevi messo, serve per interrogare il database
	$ris=mysql_query($query) or die ('errore: qualcosa è andato storto');
	//ti conviene verificare se qunto richiesto esiste o no
	$esiste=mysql_num_rows($ris);
	echo "<hr>";
	if($esiste > 0){
		//hai trovato qualcosa quindi cicli la tabella
		while($riga=mysql_fetch_array()){
			$autore=stripslashes($riga['autore']);
			$titolo=stripslashes($riga['titolo']);
			$descrizione=stripslashes($riga['descrizione']);
			echo "<b>Autore:</b> $autore<br />";
			echo "<b>Titolo:</b> $titolo<br />";
			echo "<b>Descrizione:</b> $descrizione<hr>";
		}
	}else{
		//non è stato trovato nulla
		echo "<b>NON CI SONO RECORD CON I DATI CERCATI</b><hr>";
	}
	echo "<a href=\"#\">TORNA ALLA RICERCA</a><hr>";
}else{
//visualizzi il form di ricerca
?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="POST"> 
<p class="Stile1"></p> 
	<p class="Stile1"><br /> 
      <input name="autore" type="text" value="" size="80" /> 
    </p> 
	<p class="Stile1"> 
	<input name="titolo" type="text" value="" size="80" /> 
	</p> 
	<p class="Stile1"> 
	<input name="descrizione" type="text" value="" size="80" /> 
    </p> 
	<p> 
	<input name="submit" type="submit" value="cerca" /> 
	</p> 
    <p><span style="clear: both;"> 
  
<?php 
}//chiudi l'if/else del submit
//se submit non premuto visualizzi il form
//altimenti visualizzi i risultati
?>
verifica che non abbia fatto qualche errore di digitazione
 

Sargon

Utente Attivo
22 Mar 2012
45
0
0
Ciao ! innanzitutto grazie !
ho provato a rendere applicativo il codice,.. mi segnalava errore alla seconda riga... ma credo che bisognasse aggiungere una parantesi rotonda........... poi... risolto sto problema.... mi fa nella errore... quando effettuo la ricerca ...cosa sarà mai?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
hai ragione mi ero dimenticato una parentesi.
poi guarda, ho invertito l'apice con il percento
if($autore != ""){$w_autore=" AND autore LIKE '%".$autore."'% ";} anche sugli altri titolo e descrizione

correggi in

if($autore != ""){$w_autore=" AND autore LIKE '%".$autore."%' ";}

"la fretta fa nascere i gattini ciechi"
 

Sargon

Utente Attivo
22 Mar 2012
45
0
0
Correzioni applicate, ..... ma questa volta non mi stampa i risultati a video... :crying:

Può dipendere dagli array?
 

Sargon

Utente Attivo
22 Mar 2012
45
0
0
Graaaaaaazie mille funziona ! ed anche oggi ho imparato qualcosa ;-) alla prox discussione ed ancora grazie grazie grazie !!!!
 

Il Grizly

Nuovo Utente
5 Nov 2012
10
0
0
e se le tabelle del data base avessero un prefisso alfanumerico?

e se le tabelle del data base avessero un prefisso alfanumerico tipo 5dzn_ ? :crying:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
esattamente cosa intendi: es che le tabelle si chiamino
5dzn_pinco
o
5dzn_pallo?
se è così ti basta mettere il nome della tabella che ti interessa nella select es
PHP:
$query = "SELECT * FROM 5dzn_pallo WHERE autore LIKE '%$cerca%' AND titolo LIKE '%$cerca%' AND descrizione LIKE '%$cerca%'";
 

Il Grizly

Nuovo Utente
5 Nov 2012
10
0
0
ciao
esattamente cosa intendi: es che le tabelle si chiamino
5dzn_pinco
o
5dzn_pallo?
se è così ti basta mettere il nome della tabella che ti interessa nella select es
PHP:
$query = "SELECT * FROM 5dzn_pallo WHERE autore LIKE '%$cerca%' AND titolo LIKE '%$cerca%' AND descrizione LIKE '%$cerca%'";

scusa il disturbo ma davvero non so come fare, ti allego uno screen capture delle tabelle del database

-1.jpg
 

Il Grizly

Nuovo Utente
5 Nov 2012
10
0
0
ciao
esattamente cosa intendi: es che le tabelle si chiamino
5dzn_pinco
o
5dzn_pallo?
se è così ti basta mettere il nome della tabella che ti interessa nella select es
PHP:
$query = "SELECT * FROM 5dzn_pallo WHERE autore LIKE '%$cerca%' AND titolo LIKE '%$cerca%' AND descrizione LIKE '%$cerca%'";


perdona tanto la mia confusione ma sono novizio sia di mysql che di php, i dati che devo estrapolare sono nella tabella 5dzn_link , quindi, uso la query che mi hai mandato aggiungendola al motore di ricerca o sostituendola a quella attuale

$query = "SELECT * FROM tabella WHERE 1=1 ";

o ce un modo per fonderle in un unica stringa?
 

Il Grizly

Nuovo Utente
5 Nov 2012
10
0
0
ho provato cosi ma niente, dove sbaglio?

PHP:
<?php 
if(isset($_POST['submit'])){//verifico che sia stato premuto il submit 
    //premuto SI 
    // connettiamoci il nostro database  
    $db_host = "";  
    $db_user = "";  
    $db_password = "";  
    $db_name = ""; 
    //connetto il database  
    $db = mysql_connect($db_host, $db_user, $db_password) or die ('Errore durante la connessione');  
    mysql_select_db($db_name, $db) or die ('Errore durante la selezione del db');  

    /*conviene mettere sia trim per verificare se solo spazi e addslashes perche se es. cachet = l'alba del domani 
    l'apice nel db ti fa casino, con addslashes diventa l\'alba del domani 
    ricordati di usarlo anche quando inserisci i dati nella tabella del db 
    poi quando visualizzi per toglerlo userai stripslashes 
    */ 
    $name = addslashes(trim($_POST['name']));  
    $cachet = addslashes(trim($_POST['cachet']));  
    $description = addslashes(trim($_POST['description'])); 
    //iniziamo a costruire la querystringa
    $query = "SELECT * FROM 5dzn_link WHERE cahet LIKE '%$cerca%' AND name LIKE '%$cerca%' AND description LIKE '%$cerca%'"; 	
    $query = "SELECT * FROM tabella WHERE 1=1 ";
	 
	
	//l' 1=1 ti serve per evitare di tagliare nel caso i post siano vuoti 
    //in questo modo puoi cercare per name+cachet+description, o solo name+cachet... con tutte le combinazioni possibili 
    $w_name=""; 
    if($name != ""){$w_name=" AND name LIKE '%".$name."%' ";} 
    $w_cachet=""; 
    if($cachet!= ""){$w_cachet=" AND cachet LIKE '%".$cachet."%' ";} 
    $w_description=""; 
    if($description!=""){$w_description=" AND description LIKE '%".$description."%' ";} 
    //se tutte vuoti ti saltano fuori tutti i tiloli ecc... quindi ti conviene mettere in ordine alfabetico es. per name 
    //termino di costruire la querysrtinga concatenando quanto risulta da sopra 
    $query .=$w_name.$w_cachet.$w_description." ORDER BY name"; 
    //la seguente istruzione, che non avevi messo, serve per interrogare il database 
    $ris=mysql_query($query) or die ('errore: qualcosa è andato storto'); 
    //ti conviene verificare se qunto richiesto esiste o no 
    $esiste=mysql_num_rows($ris); 
    echo "<hr>"; 
    if($esiste > 0){ 
        //hai trovato qualcosa quindi cicli la tabella 
       
            while($riga=mysql_fetch_array( $ris)){
            $name=stripslashes($riga['name']); 
            $cachet=stripslashes($riga['cachet']); 
            $description=stripslashes($riga['description']); 
            echo "<b>name:</b> $name<br />"; 
            echo "<b>cachet:</b> $cachet<br />"; 
            echo "<b>description:</b> $description<hr>"; 
        } 
    }else{ 
        //non è stato trovato nulla 
        echo "<b>NON CI SONO RECORD CON I DATI CERCATI</b><hr>"; 
    } 
    echo "<a href=\"#\">TORNA ALLA RICERCA</a><hr>"; 
}else{ 
//visualizzi il form di ricerca 
?> 
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="POST">  
<p class="Stile1"></p>  
    <p class="Stile1"><br />  
      <input name="name" type="text" value="" size="80" />  
    </p>  
    <p class="Stile1">  
    <input name="cachet" type="text" value="" size="80" />  
    </p>  
    <p class="Stile1">  
    <input name="description" type="text" value="" size="80" />  
    </p>  
    <p>  
    <input name="submit" type="submit" value="cerca" />  
    </p>  
    <p><span style="clear: both;">  
   
<?php  
}//chiudi l'if/else del submit 
//se submit non premuto visualizzi il form 
//altimenti visualizzi i risultati 
?>
 
Ultima modifica di un moderatore:

Il Grizly

Nuovo Utente
5 Nov 2012
10
0
0
-2.jpg

vado avanti per tentativi :( questo è il contenuto della tabella 5dzn_link ma mi da sempre "errore: qualcosa è andato storto"
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
non capisco queste
$query = "SELECT * FROM 5dzn_link WHERE cahet LIKE '%$cerca%' AND name LIKE '%$cerca%' AND description LIKE '%$cerca%'";
$query = "SELECT * FROM tabella WHERE 1=1 ";
se devi fare la ricerca sulla tabella 5dzn_link
devi fare solo
PHP:
//....
$query = "SELECT * FROM 5dzn_link WHERE 1=1 ";
//....e poi tutto il resto che non so se funzi perchè ho dato solo un'occhiata veloce
 
Discussioni simili
Autore Titolo Forum Risposte Data
D passare valori da database sql a php PHP 1
Emix Select concatenate php sql ajax PHP 2
L form multipla php sql,errore in inserimento MySQL 0
L Insert php sql da una form multipla PHP 6
moustache [RISOLTO] SQL PHP IIS PHP 8
WebmasterFioriniAndrea SQL, PHP Come passo i dati da una tabella? PHP 1
D [MySQL] [PHP] SQL andare da capo MySQL 0
A [PHP] registrazione utente in un database sql con confronto PHP 1
G sql select con array in php PHP 1
trattorino [PHP] sql estrarre in base all'ultima visita PHP 4
A [PHP] Modifica caratteri di una query Oracle SQL PHP 0
trattorino [PHP] sql aggiungere dato in una tabella senza cancellare contenuto PHP 6
Merlina3377 php insert dati su tabella sql PHP 9
V [PHP] Estrazione con SQL PHP 1
K stampa e modifica tabella in php e ms sql PHP 2
G [PHP] Selezionare OGGI anno precedente per query sql PHP 2
S Select Concatenate Ajax, php, sql Presentati al Forum 16
giancadeejay [PHP] istruzione UPDATE SQL PHP 2
M PHP/SQL Inserire più valori in una colonna di tipo integer - Checkbox - PHP 3
S [PHP] Eseguire differenza su dati SQL presenti sulla stessa colonna PHP 1
giuseppe_123 [PHP] ricerca in una tabella con my sql PHP 0
G [Offro] [Retribuito] cerco assistenza per sito internet - programmazione PHP SQL Offerte e Richieste di Lavoro e/o Collaborazione 2
D php sql PHP 0
J PHP Ajax tabella SQL non viene mostrata PHP 0
J Php ajax sql controllare se l'id esiste in una tabella db PHP 2
F Form Multipli con PHP e SQL PHP 0
F PHP problema doppi apici all'interno di una query SQL PHP 1
C [PHP][MY SQL] - Estrazione dati database tramite form PHP 8
C PHP - SQL server PHP 4
M php vs sql PHP 13
R modifica dati in tabella php+sql PHP 12
I Riga tabella HTML creata con cicli PHP e Query Sql che restituisca un campo se si clicca la Riga PHP 4
Sargon Php e My Sql Area ristretta con password PHP 5
F Programma PHP che esegue backup e ripristino di database SQL SERVER PHP 12
Sargon ordine delle parole PHP, My sql PHP 5
Komix Errore sintassi SQL "UPDATE" in file PHP PHP 10
W [OFFRO] script php+sql semplice retribuito Offerte e Richieste di Lavoro e/o Collaborazione 0
I Php + sql PHP 1
E calendario in php + sql PHP 4
I Problema con PHP + SQL ! PHP 13
D [PHP/SQL] Estrarre risultati da 2 database Database 0
B php e sql-server PHP 13
S Query PHP My sql PHP 31
S query sql in php PHP 4
Z query sql e script php per ordinamento dati tabella PHP 2
N [collaborazione] programmatore php/mysql asp/sql server Rovigo, Mantova, Ferrara Offerte e Richieste di Lavoro e/o Collaborazione 2
H Php,Sql.. prendere i dati prima di oggi PHP 7
A PHP e MS SQL PHP 2
F PHP con SQL SERVER PHP 0
S [PHP] Riempire una casella select con query SQL PHP 11

Discussioni simili