Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Errore query (problema apici)

    Ciao ragazzi...sono nuovissimo!!!
    Prima di tutto un grande saluto

    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??

    Vi spiego quello che ho provato a fare io:
    1. Nella pagina di inserimento dei dati nel db la funzione htmlentities per codificare gli apici singoli (') come apostrofi, e tutti i caratteri speciali. Ma non funzionava ugualmente..
    2. Allora sempre in quella pagina ho aggiunto la funzone str_replace che mi modifica la codifica dell'apice in apostrofo vero e proprio (&prime)
    Questo è il codice della pagina di inserimento
    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">
            Scrivi</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);
       $titolomod =  str_replace ("&#039", "&prime",$titolo);
        $aut = htmlentities($_POST['autore'],ENT_QUOTES);
       $sql_text = "INSERT INTO articoli (titolo, testo, autore) VALUES
          ('$titolomod','$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 "
    
     Articolo inserito correttamente 
    
    ";}
            }
            $conn -> close() ?>
    Mentre la pagina che accede al database per visualizzare i risultati, è molto semplice.
    Ora non mi dà errore nella query, ma non mi associa alcun valore all'echo, perchè, credo, nel url il get del titolo mi aggiunge alcuni caratteri (ad esempio %%"%)..
    Questo è il codice
    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  {if($rec = $ris -> fetch_assoc()) {
                          $ric = $rec['testo'];
                          echo $ric;
                          echo $rec['titolo']; }
                          else                      {echo "nessuna corrispondenza";}
            $ris -> close();
            $conn -> close();}
          }
          ?>
    Qualcuno ha qualche suggerimento o idea???
    Grazie sto impazzendo da 5 giorni...

  2. #2
    nella stringa della query sostituisci l'apice con mettendoci la barra davanti.
    in pratica con la barra davanti non te lo interpreta.

    $query= ereg_replace("'", "\'", $query);

  3. #3
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193
    Usa mysql_real_escape_string() passando l'id della connessione o addslashes() per una soluzione più blanda.

  4. #4
    Grazie mille dei consigli, ma purtroppo nessunos dei vostri metodi sembra funzionare!!

    Non capisco veramente dove sbaglio!!
    Potete aiutarmi??

    Se avete bisogno che posto qualcosa ditemelo..

  5. #5
    Nessuno ha qualche dritta... non riseco ad andare avanti..
    Sono 5 giorni che sono piantato sullo stesso problema!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.