Problema non mi esegue la ricerca dati

paperinik4

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

Cjhiuedo un vostro aiuto. Ho creato un db chiamato "archivio generale" nel seguente db ci sono diverse tabelle:

1) archdfiabolik

2) archlibrimamma

3) archfilm

In ogni tabella ho eseguto una pagina di ricerca dati ma mi da il seguente errore (inquesto caso parliamo di archfilm):

Errore in SELECT titolofilm FROM archfilm WHERE titolofilm = Altrimenti ci arrabbiamo: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ci arrabbiamo' at line 1
La ricerca viene effettuata tramite titolo. La tabella è composta come segue:

tabella per archfilm:

idnumero INT(11) NOT NULL AUTO_INCREMENT,
numero VARCHAR(4) NOT NULL,
titolofilm VARCHAR(60) NOT NULL,
autore VARCHAR(50) NOT NULL,
genere VARCHAR(50) NOT NULL,
regista VARCHAR(50) NOT NULL,
formato VARCHAR(3) NOT NULL,
originale VARCHAR(2) NOT NULL,
visto VARCHAR(2) NOT NULL
PRIMARY KEY (idnumero)
);

Il listao per la ricerca dati è il seguente:

PHP:
   <?php
        require_once("connetti.php");
    require_once("data.php");
echo "</hr>";

//qui leggi i dati dal db (se non sono già letti dai "require"//
 

    if(!empty($_POST)){ 
   
$titolofilm = trim ($_POST['titolofilm']);

echo '<div id = "messaggio">';



$query = "SELECT titolofilm FROM archfilm WHERE titolofilm = ".$titolofilm."";      // questa è la query che dovrebbe eseguire la ricerca ma mi da quell'errore che ho messo all'inizio


$result = mysql_query ($query) or die ("Errore in $query: ".mysql_error());

if(mysql_num_rows($result)>0){

  while ($row=mysql_fetch_array($result))
  {
      echo '<div id ="table">';
        echo "<tr>";
        
        echo '<div align="center">';
        echo "Scheda Titolo Film::"." ".$titolo;
                     echo"<hr />";
        echo "<p> <p>";
           echo "</div>";               //Chiude il div center

       echo "Titolo: "." ". $row['titolo'];
       
           echo "</p> </p>";
       echo"<hr />";
                    
           echo "</div>";
                   echo "</tr>";

  } 
 
  }else{
 print 'Nessun record trovato';
}
}
echo "</div>";

 ?>
Mi sapreste trovare l'inghippo per favore ??? Sono giorni e giorni che ci provo ma senza ottenere un risultato. So che su un'altro programma che ho fatto la stessa query solo che si cercava tramite "id" funziona alla grande. Qua non so perchè no. Grazie spero di ricevrre un vostro aiuto. Buona domenica.
 

Llorenzen

Nuovo Utente
11 Ago 2013
3
0
1
Ciao, prova a scrivere WHERE titolofilm = '".$titolofilm."' nella query. Ossia apice e virgolette doppie. Ciao.

Inviato dal mio H60-L04 utilizzando Tapatalk
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
perchè è una stringa e non un numero intero, con l'id ti funziona perchè è un intero
sle stinghe pretendono gli apici, gli interi no
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Grazie finalmente qualcuno che mi ha chiarito ancora di più le idee. C'è sempre da imparare nella vita. O una cosa. Ho fatto delle prove di ricerca cambiando il "titolofilm" in "ricerca x genere", "ricerca x autore" e "ricerca x regista" premettendo che tuti i campi sono compilati, il risultato con quella query mi da esito negativo. Gli va bene solo "la ricerca x titolo". Ci sarà una query standard che va bene per tutto immagino ??? Questa è la prova che ho fatto:

ricerca dati:

PHP:
  <?php
        require_once("connetti.php");
    require_once("data.php");
echo "</hr>";

//qui leggi i dati dal db (se non sono già letti dai "require"//
 

    if(!empty($_POST)){ 
   
#$titolofilm = trim ($_POST['titolofilm']);

#$genere = trim ($_POST['genere']);

#$autore = trim ($_POST['autore']);

$regista = trim ($_POST['regista']);


echo '<div id = "messaggio">';



$query = "SELECT regista FROM archfilm WHERE regista = '$regista'";


$result = mysql_query ($query) or die ("Errore in $query: ".mysql_error());

if(mysql_num_rows($result)>0){

  while ($row=mysql_fetch_array($result))
  {
      echo '<div id ="table">';
        echo "<tr>";
        
        echo '<div align="center">';
        echo "Scheda del film:";
                     echo"<hr />";
        echo "<p> <p>";
           echo "</div>";               //Chiude il div center

       echo "Numero: "." ". $row['numero'];
       
           echo "</p> </p>";
       echo"<hr />";
           echo "<p> <p>";
             echo "Titolo: "." ".$row['titolofilm'];
                     echo"<hr />";

           echo "</p> </p>";
        
           echo "<p> <p>";
             echo "Autore: "." ".$row['autore'];
                   echo"<hr />";

             echo "</p> </p>";
           
           
                      echo "<p> <p>";
             echo "Genere: "." ".$row['genere'];
           echo "</p> </p>";
          
           echo "<p> <p>";
             echo "Regista: "." ".$row['regista'];
                   echo"<hr />";

             echo "</p> </p>";
             
             echo "<p> <p>";
             echo "Formato: "." ".$row['formato'];
                   echo"<hr />";

             echo "</p> </p>";
             
             echo "<p> <p>";
             echo "Originale: "." ".$row['originale'];
                   echo"<hr />";

             echo "</p> </p>";
             
             echo "<p> <p>";
             echo "Visto: "." ".$row['visto'];
                   echo"<hr />";

             echo "</p> </p>";
           
           echo "</div>";
                   echo "</tr>";

  } 
 
  }else{
 print 'Nessun record trovato';
}
}
echo "</div>";
?>
    </body>
</html>
Mi spieghi gentilmente dove diavolo sbaglio ??? Grazie.
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Mi rispondo da solo. Sono un cojone (scusate il termine). Ma se non modifico il "name" della textbox delll'input ma che pretendo ??? Che funzioni ??? E no ha ragione lui. Non punitemi pe rla parolaccia ma me la sono meritata. E come quando fanno autogol :pLa discussione si può chiudere con un bel risolto. Grazie borgo.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
ti converrebbe fare una query dinamica che si crea in funzione di quanto viene inserito nel form
PHP:
<?php
//......
$titolofilm = trim ($_POST['titolofilm']);
$genere = trim ($_POST['genere']);
$autore = trim ($_POST['autore']);
$regista = trim ($_POST['regista']);
$wh="";// metto la stringa per la ricerca a vuota
//poi in fubnzione dei $_post la riempio
if($titolofilm !=""){$wh .= " AND titolo='$titolofilm' ";}
if($genere !=""){$wh .= " AND genere='$genere' ";}
if($autore !=""){$wh .= " AND autore='$autore' ";}
if($regista !=""){$wh .= " AND regista='$regista' ";}
//e fai la query che si forma in funzione dei post inviati
$query = "SELECT regista FROM archfilm WHERE 1=1 $wh";
/*esempio
se hai messo genere horror e regista fellini
la query diventa
$query = "SELECT regista FROM archfilm WHERE 1=1 AND genere='horror' AND regista='fellini' ";
quindi estrae tutti i fil di horror di fellini come regista
*/
//.....
?>
poi un suggerimento: abbandona le vecchie istruzioni mysql sono deporecata e passa alle nuove mysqli
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Ciao Borgo,

Ho provato ad esegure la query dinamica. Questo è il risutltato di quello che ho ocmbinato non so se l'ho messa nel posto giusto:

ricercafilmpertitolo:

PHP:
<div id = "intestazione">
            <h1>GESTIONE RICERCA FILM</h1>
            <hr> </hr>
        </div>
            
        <div id = "divhr">
            <form method="POST" action="<?php $_SERVER['PHP_SELF'] ?>">
            <p> <p> <p> <p>
              
                <!--Ricerca nominativo x nome: <input type="text" name="nome"  maxlength="50" size ="51">-->
                
                Ricerca x film <input type="text" name="autore"  maxlength="50" size ="52">
                
            </p> </p></p> </p>
      
            <div align ="center">
                <input type="submit" name="reg" value="Avvio ricerca" />
            </div>
            </form>    
        </div>     
        <?php
        require_once("connetti.php");
    require_once("data.php");
echo "</hr>";

//qui leggi i dati dal db (se non sono già letti dai "require"//
 

    if(!empty($_POST)){ 
   
$titolofilm = trim ($_POST['titolofilm']);

$genere = trim ($_POST['genere']);

$autore = trim ($_POST['autore']);

$regista = trim ($_POST['regista']);


echo '<div id = "messaggio">';


$titolofilm = trim ($_POST['titolofilm']);
$genere = trim ($_POST['genere']);
$autore = trim ($_POST['autore']);
$regista = trim ($_POST['regista']);
$wh="";// metto la stringa per la ricerca a vuota
//poi in fubnzione dei $_post la riempio
if($titolofilm !=""){$wh .= " AND titolo='$titolofilm' ";}
if($genere !=""){$wh .= " AND genere='$genere' ";}
if($autore !=""){$wh .= " AND autore='$autore' ";}
if($regista !=""){$wh .= " AND regista='$regista' ";}
//e fai la query che si forma in funzione dei post inviati
$query = "SELECT regista FROM archfilm WHERE 1=1 $wh"; 

$result = mysql_query ($query) or die ("Errore in $query: ".mysql_error());

if(mysql_num_rows($result)>0){

  while ($row=mysql_fetch_array($result))
  {
      echo '<div id ="table">';
        echo "<tr>";
        
        echo '<div align="center">';
        echo "Scheda del film:";
                     echo"<hr />";
        echo "<p> <p>";
           echo "</div>";               //Chiude il div center

       echo "Numero: "." ". $row['numero'];
       
           echo "</p> </p>";
       echo"<hr />";
           echo "<p> <p>";
             echo "Titolo: "." ".$row['titolofilm'];
                     echo"<hr />";

           echo "</p> </p>";
        
           echo "<p> <p>";
             echo "Autore: "." ".$row['autore'];
                   echo"<hr />";

             echo "</p> </p>";
           
           
                      echo "<p> <p>";
             echo "Genere: "." ".$row['genere'];
           echo "</p> </p>";
          
           echo "<p> <p>";
             echo "Regista: "." ".$row['regista'];
                   echo"<hr />";

             echo "</p> </p>";
             
             echo "<p> <p>";
             echo "Formato: "." ".$row['formato'];
                   echo"<hr />";

             echo "</p> </p>";
             
             echo "<p> <p>";
             echo "Originale: "." ".$row['originale'];
                   echo"<hr />";

             echo "</p> </p>";
             
             echo "<p> <p>";
             echo "Visto: "." ".$row['visto'];
                   echo"<hr />";

             echo "</p> </p>";
           
           echo "</div>";
                   echo "</tr>";

  } 
 
  }else{
 print 'Nessun record trovato';
}
}
echo "</div>";
?>
Se provo a cercare per titolo o per genere mi dice "nessun record. Forse va modificato anche l'input ??? O ho sbagliato io a metterla ???? Grazie spero in una tua correzione grazie.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
da quello che vedo nel form mancano i vari campi di input
HTML:
<!--.....-->
 Ricerca x autore <input type="text" name="autore"  maxlength="50" size ="52">
 Ricerca x titolo <input type="text" name="titolofilm"  maxlength="50" size ="52">
 Ricerca x genere <input type="text" name="genere"  maxlength="50" size ="52">
 Ricerca x regista <input type="text" name="regista"  maxlength="50" size ="52">
<!--.....-->
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Ciao Borgo,

Ho la seguente situazione. Un menù chiamato "Archiviio film" in questo menù c'è un sotto-menu che comprendono le seguenti voci:

sottomenu:

1) Inserimento film

1) Ricerca film per.... Qua c'è un ulteriore menu composto così: --> Titolo Film
--> Autore
--> Genere
--> Regista
2) Cancellazione film

3) Elenco completo film

Ora volendo utilizzare una sola pagina di ricerca e applicare la tua query dinamica, come si potrebbe fare ???? Ti rimando il listato completo. Vedi se c'è una soluzione. Perchè se ci fosse le applicherei anche negli altri archivi che ho sempre in quell menu. Grazie.

ricfilmpertitolo:

PHP:
<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        
            <style type="text/css">
             
#intestazione{
width:100%;
height:100px;
position:absolute;
top:0px;
left:0px;
text-align: center;
font-family: Comic Sans MS;
font-size: 100%
}    

#txtdx {
 width:100%;
height:100px;
position:absolute;
top:0px;
right:0px;
text-align: right;
font-family: Comic Sans MS;
font-size: 100%   
}    

#divhr{
position:absolute;
top: 125px;
font-family: Comic Sans MS;
font-size: 100%;
display: block;
}

    #footer
{
    position: fixed;
    bottom: 0;
    left: 0;
    text-align: center;
    background: white;
    color: black;
    font-family: Comic Sans MS;
    font-size: 15px;
    width: 100%;
   /* padding: 5px 0;*/
    opacity: 0.9;
    -moz-opacity: 0.9;
    filter: alpha(opacity=90);
}
#messaggio{
position:absolute;
top:220px;    
font-family:Comic Sans MS;
color:#ff0000;
}
</style>

    </head>
    <body>
        
        <div id = "intestazione">
            <h1>GESTIONE RICERCA FILM</h1>
            <hr> </hr>
        </div>
            
        <div id = "divhr">
            <form method="POST" action="<?php $_SERVER['PHP_SELF'] ?>">
            <p> <p> <p> <p>
              
                <!--Ricerca nominativo x nome: <input type="text" name="nome"  maxlength="50" size ="51">-->
                
                Ricerca x film <input type="text" name="autore"  maxlength="50" size ="52">
                
            </p> </p></p> </p>
      
            <div align ="center">
                <input type="submit" name="reg" value="Avvio ricerca" />
            </div>
            </form>    
        </div>     
        <?php
        require_once("connetti.php");
    require_once("data.php");
echo "</hr>";

//qui leggi i dati dal db (se non sono già letti dai "require"//
 

    if(!empty($_POST)){ 
   
$titolofilm = trim ($_POST['titolofilm']);

$genere = trim ($_POST['genere']);

$autore = trim ($_POST['autore']);

$regista = trim ($_POST['regista']);


echo '<div id = "messaggio">';


$titolofilm = trim ($_POST['titolofilm']);
$genere = trim ($_POST['genere']);
$autore = trim ($_POST['autore']);
$regista = trim ($_POST['regista']);
$wh="";// metto la stringa per la ricerca a vuota
//poi in fubnzione dei $_post la riempio
if($titolofilm !=""){$wh .= " AND titolo='$titolofilm' ";}
if($genere !=""){$wh .= " AND genere='$genere' ";}
if($autore !=""){$wh .= " AND autore='$autore' ";}
if($regista !=""){$wh .= " AND regista='$regista' ";}
//e fai la query che si forma in funzione dei post inviati
$query = "SELECT regista FROM archfilm WHERE 1=1 $wh"; 

$result = mysql_query ($query) or die ("Errore in $query: ".mysql_error());

if(mysql_num_rows($result)>0){

  while ($row=mysql_fetch_array($result))
  {
      echo '<div id ="table">';
        echo "<tr>";
        
        echo '<div align="center">';
        echo "Scheda del film:";
                     echo"<hr />";
        echo "<p> <p>";
           echo "</div>";               //Chiude il div center

       echo "Numero: "." ". $row['numero'];
       
           echo "</p> </p>";
       echo"<hr />";
           echo "<p> <p>";
             echo "Titolo: "." ".$row['titolofilm'];
                     echo"<hr />";

           echo "</p> </p>";
        
           echo "<p> <p>";
             echo "Autore: "." ".$row['autore'];
                   echo"<hr />";

             echo "</p> </p>";
           
           
                      echo "<p> <p>";
             echo "Genere: "." ".$row['genere'];
           echo "</p> </p>";
          
           echo "<p> <p>";
             echo "Regista: "." ".$row['regista'];
                   echo"<hr />";

             echo "</p> </p>";
             
             echo "<p> <p>";
             echo "Formato: "." ".$row['formato'];
                   echo"<hr />";

             echo "</p> </p>";
             
             echo "<p> <p>";
             echo "Originale: "." ".$row['originale'];
                   echo"<hr />";

             echo "</p> </p>";
             
             echo "<p> <p>";
             echo "Visto: "." ".$row['visto'];
                   echo"<hr />";

             echo "</p> </p>";
           
           echo "</div>";
                   echo "</tr>";

  } 
 
  }else{
 print 'Nessun record trovato';
}
}
echo "</div>";
?>
    </body>
</html>
Grazie spero di avere dei tuoi consigli.
 

localhost.nicola

Utente Attivo
11 Dic 2015
58
2
8
Ciao paperinik4, per stampare i risultati della ricerca nella stessa pagina da dove la esegui devi utilizzare Ajax o $.post() di JQuery, per lo meno io utilizzo JQ.

Io non ho mai provato con un menù ma credo basti creare una funzione apposita per ogni elemento del menu o figlio.

(Con Ajax devi prestare molta più attenzione e tenere il codice molto pulito perchè se prima ti capitava di scordarti di cambiare un nome a una text con Ajax ti fanno il TSO [trattamento sanitario obbligatorio] dopo 20 min.)

Ho notato un altro errore che volevo farti presente, per stampare su tabella i risultati la medesima non deve essere aperta dentro al ciclo While. Per ovvi motivi.

Ciao
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
Ciao localhost.nicola,

Come posso ovviare a while ??? Ed inoltre ho trovato un'altro se si può chiamare difetto o bug. Ossia quando cerco un dato elemento con lettera accentata o con l'apostrofo mi da il seguente errore:

Errore in SELECT titolo FROM archdiabolik WHERE titolo = 'Diabolik l'innafferrabile': You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'innafferrabile'' at line 1
e questo è l'errore se c'è una lettera accentata:

Errore in SELECT titolo FROM archdiabolik WHERE titolo = 'C'è stata una rapina e l'hanno arrestati': You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? stata una rapina e l'hanno arrestati'' at line 1
Ora come posso risolvere a questo problema ??? Considerando che su myphpadmin è scritto correttamente e si legge correttamente ???? Spero che mi potrai aiutare a risolvere. Grazie.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
secondo me hai fatto un po' di caos
ti schematizzo
PHP:
<!-- ........... -->
<form method="POST" action="<?php $_SERVER['PHP_SELF']; ?>">
	Ricerca x titolo <input type="text" name="titolofilm"  maxlength="50" size ="52">
	Ricerca x genere <input type="text" name="genere"  maxlength="50" size ="52">
	Ricerca x film <input type="text" name="autore"  maxlength="50" size ="52">
	Ricerca x autore <input type="text" name="autore"  maxlength="50" size ="52">
	se tutti vuoti trova tutti i film
    <input type="submit" name="reg" value="Avvio ricerca" />
</form>
<!-- ........... -->
<?php
//dati di connessione
if(isset($_POST['reg'])){//non empety post
	$titolofilm = addslashes(trim ($_POST['titolofilm']));
	$genere = addslashes(trim ($_POST['genere']));
	$autore = addslashes(trim ($_POST['autore']);
	$regista = addslashes(trim ($_POST['regista']));
	$wh="";// metto la stringa per la ricerca a vuota
	//poi in fubnzione dei $_post la riempio
	if($titolofilm !=""){$wh .= " AND titolo='$titolofilm' ";}
	if($genere !=""){$wh .= " AND genere='$genere' ";}
	if($autore !=""){$wh .= " AND autore='$autore' ";}
	if($regista !=""){$wh .= " AND regista='$regista' ";}
	//e fai la query che si forma in funzione dei post inviati
	$query = "SELECT regista FROM archfilm WHERE 1=1 $wh"; 
	$result = mysql_query ($query) or die ("Errore in $query: ".mysql_error());
	//tabella da sistemare coi css
	echo "<table>";
	if(mysql_num_rows($result)>0){
		echo "<td colspan='2'>scheda film</td>";
		while ($row=mysql_fetch_array($result)){
			echo "<tr><td>Numero:</td><td>". stripslashes($row['numero'])."</td></tr>";
			echo "<tr><td>Titolo:</td><td>".stripslashes($row['titolofilm'])."</td></tr>";
			echo "<tr><td>Autore:</td><td>".stripslashes($row['autore'])."</td></tr>";
			echo "<tr><td>Genere:</td><td>".stripslashes($row['genere'])."</td></tr>";
			echo "<tr><td>Regista:</td><td>".stripslashes($row['regista'])."</td></tr>";
			echo "<tr><td>Formato:</td><td>".stripslashes($row['formato'])."</td></tr>";
			echo "<tr><td>Originale:</td><td>".stripslashes($row['originale'])."</td></tr>";
			echo "<tr><td>Visto:</td><td>".stripslashes($row['visto'])."</td></tr>";
  		}
	}else{
 		echo "<td colspan='2'>nessun record trovato</td>";
	}
		echo "<table>";	
}
?>
<!--....-->
</body>
</html>
po se non hai problemi di ricaricamento pagina jq non ti serve
dimenticavo:
guarda che le istruzioni php DEVONO terminare con il ; anche se sono dentro l'atml (vedi ...$_SERVER[]; ?>