due problemi sulla ricerca tramite titolo

paperinik4

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

Ho fatto un programma che raccoglie diversi tipi di archivi tra cui c'è anche "archivio diabolik" ed oggi tratterò di questo problema. Siamo sempre alle solite. Ossia quando vado a fare una ricerca con apostrofata o accentatta mi da il seguente errore. Una volta ero riuscito a sistemare una volta per tutte (scusate il gioco di parole) il problema. Ma adesso sembra che la soluzione che avevo trovato non vada bene. Quindi chiedo a voi esperti. Questo è quanto ho fatto fino ad oggi.

ricercapertitolodk.php

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 dati prova</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 titolo <input type="text" name="titolo"  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"//
 
      header('Content-Type: text/html; charset= utf8'); 

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

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



$query = "SELECT titolo FROM archdiabolik WHERE titolo = '$titolo'";
      header('Content-Type: text/html; charset= utf8'); 

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

      header('Content-Type: text/html; charset= utf8'); 

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 Diabolik::"." ".$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>";

 ?> 
    </body>
</html>

Quando lo eseguo mi da il seguente risulta (se c'è una parola apostrofata o accentata). Ad esempio digito nel campo di ricerca il titolo: "Diabolik l'innafferrabile" e 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

Anche se metto il titolo"C'è stata una rapina" stesso errore perdonatemi se la parola "c'è" non si scrive così ma andrebbe scritto così "cè" ma per le prove va più che bene anche un orrore ortografico. Come posso risolvere definitivamente questo maledetto dilemma ????


Spero che qualcuno di voi mi possa dare dei buoni suggerimenti e consigli grazie.
 
Ciao paperinik4, prova ad utilizzare la funzione Like di Mysql. Ti posto un frammento di codice che utilizzo io:

WHERE (ragione_sociale LIKE '%" . $ValoreRicercaAnagrafica . "%') ORDER BY ragione_sociale

Fammi sapere, ciao.
 
Ciao localhost.nicola,

Ora sto cercando di risolvere il problema dei caratteri speciali. Spero che tu mi possa segure anche in questo. Dunque la prova che ho fatto è la seguente. Ho messo tutto con:

<meta charset="ISO-8859-1">


Quindi anche in questo spezzone di codice che ti posto è con iso:

PHP:
header('Content-type: text/html;charset=utf-8');
$query=("INSERT INTO archdiabolik (numero, annata, raccolta, titolo, formato, neltablet, lettoono)"
. " VALUES('".$numero."','".$annata."','".$raccolta."','".$titolo."','".$formato."','".$neltablet."','".$lettoono."')");
    
header('Content-Type: text/html; charset= ISO-8859-1'); 
    $result=@mysql_query($query) or die("Error query DataBase:".mysql_error());
}
    if($result){
    echo("<p> Inserimento avvenuto correttamente <p>");
} else{
    echo("<br>Inserimento non eseguito");
}
}
}

Stessa cosa nella ricerca dati, inutile che ti posti il codice. Però ti posto il risultato di errore che mi ha restituito. Non badare a ciò che scrivo perchè ci sono orrori di ortografia ma fatti a posta per le prove.

Errore in SELECT titolo FROM archdiabolik WHERE titolo = 'V'affanculo all'ispettore Ginko': 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 'affanculo all'ispettore Ginko'' at line 1

E questo errore me lo da se è presente una lettera accentata come in questo caso:

Errore in SELECT titolo FROM archdiabolik WHERE titolo = 'V'affanculo all'ispettore Ginko è ci vuole': 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 'affanculo all'ispettore Ginko è ci vuole'' at line 1

Si potrebbe essere sputtanato il db ??? Oppure cosa mi consigli di fare ????
 
Che DB usi?
Il campo del DB come è stato valorizzato? Varchar? Text? Char?
Che versione usi di PHP?

Puoi postarmi la query di ricerca che genera quel tipo di errore?
 
Posso fare tutto. Allora innanzi tutto la tabella è strutturata in questa maniera qua:

tabella arhbiabolik:

PHP:
create table archdiabolik (
	
idnumero 	INT(11) NOT NULL AUTO_INCREMENT,
numero 		VARCHAR(3) NOT NULL,
annata		VARCHAR(4) NOT NULL,
raccolta        VARCHAR(50) NOT NULL,
titolo          VARCHAR(90) NOT NULL,
formato         VARCHAR(3) NOT NULL,
neltablet	VARCHAR(2) NOT NULL,
lettoono	VARCHAR(2) NOT NULL,    
PRIMARY KEY (idnumero)
);

Come vedi adopero il varchar sia se è numero che non per comodità.

La query è la seguente di ricerca dati che è valida per tutti glio altri archivi che ho fatto ed è questa:

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"//
 
      header('Content-Type: text/html; charset= ISO-8859-1'); 

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

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

      header('Content-Type: text/html; charset= ISO-8859-1'); 


$query = "SELECT titolo FROM archdiabolik WHERE titolo = '$titolo'";       //Questa è la query 
      header('Content-Type: text/html; charset= ISO-8859-1'); 

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

      header('Content-Type: text/html; charset= ISO-8859-1'); 

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 Diabolik::"." ".$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>";

 ?>


Non riesco a trovare la versione del db e del php pur avendo fatto php(info). devo cercare meglio appena la trovo te le mando.
 
Caro marino,

So perfettamente che per i numeri non vanno messi chaset. Ma come dicevo in qualche post precedente molto spesso fa comodo vederli come charset anzicchè numerico e non influisce di certo nella ricerca: Tant'è com'è ho sottolineato più di una volta il problema non sta nella query ma sta nel fatto che non visualizza correttamente i caratteri speciali ossia l'apostrofo e le lettere accentate.......So di ripetermi ma alcune volte bisognerebbe leggere bene ciò che uno chiede invece di lanciare sentenze sensa senso.
 
Salve,

C'è qualcuno che ha risolto il problema dei caratteri accentati ???? Io ho questa query qua per la ricerca dati:

PHP:
$query = "SELECT titolo FROM provacharset WHERE titolo = ".$titolo."";

E mi restituisce l'errore quando metto un titolo del tipo "C'è stata una rapina e l'hanno arrestati" so che "c'è" non si scrive così ma mi serviva per fare le prove. L'errore è il seguente:

Errore in SELECT titolo FROM provacharset 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

Mi potreste aiutare per favore ??? Non riesco ad andare avanti. Grazie.
 
Ragazzi ho risolto il problema dei caratteri speciali a chi può essered i aiuto metto il frammento di codice:

Innanzi tutto quando si crea la pagina html/php all'inizio della pagina c'è la seguente digitura di default:

digitura default ossia dovrebbe comparire una cosa del genere:

<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">

<title></title>

</head>

La stringa meta che contiene il charset utf-t ossia questa:

<meta charset="UTF-8">

Anche se molti dicono che è la più usata non è vero perchè è incompleta e non contiene le lettere accentate, quindi va corretta con il seguente caharset:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

Il codice "ISO-8859-1" contengono anche le lettere accentate. A questo punto avrete una nuova situazione del tipo questa:

PHP:
<!DOCTYPE html>

<html>
    <head>
     
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />        

        <title></title>
          
    </head>
    <body>

Questo è solo per quanto rigurada la ricercadati e la visualizzazione corretta dei dati. E questa è la query giusta:

PHP:
$query = "SELECT titolo FROM provacharset WHERE titolo='".$titolo."'";

Nella pagina "inserimento dati" fare la stessa modifica ossia mettere il seguente codice iso all'inizio ossia:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

Quindi pe rla pagina inserimento dati" avrete la nuova situazione che si dovrebbe presentare così:

<!DOCTYPE html>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

<title>INSERIMENTO DATI</title>


</head>

Questo è tutto. A me ha funzionato alla grande...... Grazie a tutti. Il post si può chiudere.
 
Ragazzi ho risolto il problema dei caratteri speciali a chi può essered i aiuto metto il frammento di codice:

Innanzi tutto quando si crea la pagina html/php all'inizio della pagina c'è la seguente digitura di default:

digitura default ossia dovrebbe comparire una cosa del genere:

sure, my computer is wrong

Cattura.PNG
 

Discussioni simili