problema apici in query sql

  • Creatore Discussione Creatore Discussione Giacca
  • Data di inizio Data di inizio

Giacca

Nuovo Utente
8 Mag 2008
13
0
0
Ciao ragazzi...sono nuovissimo!!!
Prima di tutto un grande saluto :byebye:

Avrei bisogno del vostro aiuto..
Io non me ne intendo molto di php, ma devo realizzare un sito per un corso all'università..
Vi spiego il mio problema..
Ho una query sql che legge da un db il campo "titolo", che è una variabile GET, e mi restituisce in echo il titolo e il testo dei vari campi..
Il problema è che quando ho titoli con apostrofi, me li interpreta come apici , quindi mi da' errore nella query.. che diavolo posso fare??

questo è il codice della pagina
Codice:
 <?
 $art = $_GET['risultato'] ;
 $art2 = $_GET['articolo'];
 include ('variabile.inc');
   $conn = @new mysqli($host, $user, $pwd, $db_name);
   if (mysqli_connect_errno() != 0) {
    $err_no = mysqli_connect_errno();
    $err_msg = mysqli_connect_error();
      echo "Errore nella connessione: $err_msg ($err_no)";
    }
    else {
      $conn -> query("SET NAMES 'utf8'");
      $sql = "SELECT * FROM articoli where titolo = '$art' or titolo = '$art2'";
      $ris = @$conn -> query($sql);
      if ( $ris === FALSE ) {
        $err_no = $conn -> errno;
        $err_msg = $conn -> error;
        echo "Errore nella query: $err_msg ($err_no)";
      }
      else  {($rec = $ris -> fetch_assoc() ) ;
                      $ric = $rec['testo'];
                      echo $ric;
        $ris -> close();
        $conn -> close();}
      }
      ?>
Aiuto..grazie mille
P.S se potete passate anche nella sezione ajax..anche lì ho un altro problemino..
Grazie mille:elvis:
 
prova:
PHP:
 $art = addslashes($_GET['risultato']) ;
 $art2 = addslashes($_GET['articolo']);
 
prova:
PHP:
 $art = addslashes($_GET['risultato']) ;
 $art2 = addslashes($_GET['articolo']);

Purtoppo non mi funziona.. o meglio funziona solo in parte..
Cioè non mi visualizza messaggi di errore, ma la schermata rimane completamente bianca..
Cioè l'echo non mi restituiisce nulla..
Non saprei..:confused:
 
Utilizzando str_replace ti manca la corrispondenza perchè in effetti la stringa viene modificata.
Prova a daro uno sguardo nel database, come vengono salvate le stringhe con l'accento?
 
Per inserire il titolo nel database con l'apostro ho dovuto attivare la funziona htmlentities nella pagina di inserimento.
Quindi nel db mi risulta la stringa con al posto dell'apostrofo il carattere
&#039..Ho provato allora a fare il replace del ' con quel carattere..ma nemmeno così mi da corrispondenze!!!
Aiutatemi sto impazzendo..:dipser::dipser::dipser::dipser::dipser:
 
Quindi se tu passi il valore di GET per htmlentities la corrispondenza la dovrebbe trovare..
PHP:
$art = htmlentities($_GET['risultato']) ;
$art2 = htmlentities($_GET['articolo']);
 
Grazie Eliox, ma non mi funge lo stesso...

Qui sotto vi posto la pagina di inserimento dei dati, e dopo quella del form di interrogazione..Aiutatemi per piacere sono 5 giorni che nn riesco ad andare avanti!!!
Codice:
<? session_start();
 ?>
<div align="right">
    <table width="85%" id="titoli" cellpadding="5">
    <tr>
        <td align="center" valign="top" width="15%"><font face="Verdana" size="4">Leggi</font></td>
        <td align="center" valign="top" width="15%"><font face="Verdana" size="4">
        <a href="articolo_scrittura.php">Scrivi</a></font></td>
        <td align="center" valign="top" width="15%"><font face="Verdana" size="4">Modifica</font></td>
        <td align="center" valign="top" width="15%"><font face="Verdana" size="4">Segnala</font></td>
        </tr></table></div>
               <?
//creo una nuova connessione con i parametri della variabile.inc
include("variabile.inc");
$conn = @new mysqli($host, $user, $pwd, $db_name);
//controllo la connessione, e eventualmente gestisco l'errore
    if (mysqli_connect_errno() != 0) {
      $err_no = mysqli_connect_errno();
      $err_msg = mysqli_connect_error();
      echo "Errore nella connessione: $err_msg ($err_no)";
    } 
    else { $conn -> query("SET NAMES 'utf8'");
    $testo = htmlentities ($_POST['text'],ENT_QUOTES);
    $titolo = htmlentities ($_POST['titolo'],ENT_QUOTES);
    $titolo2 = AddSlashes ($titolo);
   $aut = htmlentities($_POST['autore'],ENT_QUOTES);
   $sql_text = "INSERT INTO articoli (titolo, testo, autore) VALUES
      ('$titolo2','$testo','$aut')";
      $ris_text = $conn -> query($sql_text);
      if ( $ris_text === FALSE ) {
        $err_no = $conn -> errno;
        $err_msg = $conn -> error;
        echo "Errore nella query: $err_msg ($err_no)";}
        else {
        echo "<p> Articolo inserito correttamente <P>";}
        }
        $conn -> close() ?>
Codice:
<script>
 function setXMLHttpRequest() {
       var xhr = null;
       // browser standard con supporto nativo
       if (window.XMLHttpRequest) {
         xhr = new XMLHttpRequest();
       }
       else if (window.ActiveXObject) {
         xhr = new ActiveXObject("Microsoft.XMLHTTP");
       }
       return xhr;
     }

     var xhrObj = setXMLHttpRequest();

     function populateList() {
       var par = document.forms[0].elements[0].value;
       var url = 'leggi.php?par=' + par;
       xhrObj.open('GET', url, true);
       xhrObj.onreadystatechange = getRicerca;
       xhrObj.send(null);
     }

     function getRicerca() {
       if(xhrObj.readyState == 4 && xhrObj.status == 200) {
         document.getElementById('risultati').innerHTML = "<label for='risultati'>Scelgi:</label><select id='risultato' class='text' name='risultato'>" + xhrObj.responseText + "</select>";
       }
       else {
         document.getElementById('risultati').innerHTML = 'Errore: ricerca fallita!';
       }
     };

     function populateList2() {
       var aut = document.forms[0].elements[1].value;
       var url = 'leggi2.php?aut=' + aut;
       xhrObj.open('GET', url, true);
       xhrObj.onreadystatechange = getArticolo;
       xhrObj.send(null);
     }

     function getArticolo() {
       if(xhrObj.readyState == 4 && xhrObj.status == 200) {
         document.getElementById('articoli').innerHTML = "<label for='articoli'>Scelgi:</label><select id='articolo' class='text' name='articolo'>" + xhrObj.responseText + "</select>";
       }
       else {
         document.getElementById('articoli').innerHTML = 'Errore: ricerca fallita!';
       }
     }
</script>
 <?session_start();?>
  <table width="95%" id="titoli" cellpadding="5">
    <tr>
        <td align="center" valign="top" width="20%">
        <img border="0" src="matita_bnmod.JPG" width="219" height="138"></td>
        <td align="center" width="13%"><font face="Verdana" size="4">
        <a href="lettura.php"><font color="#FF6600">Leggi</font></a></font></td>
        <td align="center" width="13%"><font face="Verdana" size="4">
        <a href="articolo_scrittura.php"><font color="#FF6600">Scrivi</font></a></font></td>
        <td align="center" width="13%"><font face="Verdana" size="4">
        <a href="modifica.html"><font color="#FF6600">Modifica</font></a></font></td>
        <td align="center" width="13%">
        <font face="Verdana" size="4" color="#FF6600">Segnala</font></td>
        <td width="*"></td></tr>
        </table>
            
<FORM METHOD="GET" ACTION="articolo_leggi.php">
 <p align="center">
  <label for="parametri">Cerca:</label>
  <select id="par" class="text" name="par" onchange="populateList()">
    <option value="">Seleziona un criterio</option>
    <option id="autore" value="autore">Autore</option>
    <option id="titolo" value="titolo">Titolo</option>
      </select>
  </p>
  <p align="center" id="risultati" name="risultato" onchange="populateList2()">
   </p>
    <P align="center" id="articoli" name="articolo">
   </p>
  <P align="center">
  <INPUT TYPE="Submit" VALUE="Leggi">
 </P>
</FORM>
 
in che senso non ti funziona? Da errore o non trova la corrispondenza?
 
Ragazzi non rieco a venirne a capo!!! :eek: :eek:

Allora..ricapitolo brevemente. Nella pagina di inserimento nel db ho attivato la funzione htmlentities, per codificare i caratteri accentati, inoltre ho aggiunto la funzione AddSlashes per permettere l'insertimento degli apostrofi in modo che non me li riconosca
(L'INSERIMENTO FUNZIONA..anche se secondo me qualcosa dipende anche da quello!)

Nella pagina di interrogazione ho due variabili get, anche esse codificate con la funzione htmlentities..
Quando la funzione contiene solo accenti..tutto ok: mi torva il record
Quando la funzione contiene solo apostrofi, o apostrofi e lettere accentate NON MI ASSOCIA ALCUN RECORD...LA QUERY NN DA' ERRORE, ma nemmeno risultati!!!

AIUTO DEVO ASSOLUTAMENTE USCIRE DA QUESTO PUNTO MORTO!!!:gun:
 
scustate se mi intrometto, ma ho avuto un problema simile con l'immissione er cerca di province e regioni
provincia l'aquila
regione valle d'aosta

io ho fatto così (pseudocodice)

inserimento nel database da form

$dainserireEFFETTIVO= stringa rimpiazza apostrofo con cancelletto in stringa da form

ricerca della voce sempre da form

$dacercareEFFETTIVO=stringa rimpiazza apostrofo con cancelletto in stringa da form

$davisualizzare=srtinga rimpiazza cancelletto con apostrofo

quindi quando inserisco o cerco nel input del form scrivo L'AQUILA che trasformo in L#AQUILA (l'utente non se ne accorge)

dentro il db ho L#AQUILA

quando stampo inverto per cuo avrò L'AQUILA (in fondo cosa c'è dentro il db o cosa faccia lo script poco interessa all'utente)

inoltre evito sempre le parole accentate (salvo in word) e trasformo sempre es. è in e' (anche se su http://www.w3schools.com/tags/ref_symbols.asp sono previste)


-----------------------------------------------------------
per eliox meno 849
 

Discussioni simili