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

    Il metodo mysql_real_escape_string() blocca la query

    Ho la necessità di inserire un mio script ma purtroppo joomla va in errore.

    La stringa incriminata è la seguente:
    $query_ip = "SELECT * FROM ingressi WHERE ip = '$ipaddress'";

    il sistema di joomla risponde con:
    Warning: mysql_real_escape_string(): 15 is not a valid MySQL-Link resource in c:\www\j1014\includes\database.php on line 140

    praticamente il metodo "mysql_real_escape_string()" non mi permette di passare nella query il carattere ' (apostrofo)

    Come posso aggirare il problema?

    Grazie,
    ciao.

  2. #2
    Allora... innanzi tutto sembra che tu sbagli a passare la risorsa alla funzione mysql_real_escape_string().

    La stringa $query_ip = "SELECT * FROM ingressi WHERE ip = '$ipaddress'"; non va passata in quella funzione, semmai a mysql_query().
    L'escape da aggiungere lo devi fare sulla variabile $ipaddress, o su qualsiasi altra variabile stringa.

    Nel manuale ufficiale è ben spiegato l'uso della funzione mysql_real_escape_string().
    mysql_real_escape_string — Aggiunge le sequenze di escape ai caratteri speciali in una stringa per l'uso in una istruzione SQL, tenendo conto dell'attuale set di caratteri della connessione.
    Aggiunge l'escape (\) ai caratteri speciali di una stringa DA USARE in una istruzione SQL.
    La tua stringa SQL è: SELECT * FROM TABELLA, mentre la stringa che ci inserisci è $ipaddress.
    Il motivo??? Caratteri che potrebbero più o meno corrompere la query o il DB stesso (pensa ad un attacco hacker) contengono caratteri speciali.
    Come dovresti avere notato da te, il singolo apice identifica l'inizio e la fine di una stringa da inserire in una colonna del DB.
    Se la stringa da inserire contiene apici singoli non parsati, la stringa SQL si chiude inaspettatamente!
    ... e questo è solo un esempio!

    Per dirti che aggirare il problema non è la soluzione, ma il crearne di nuovi.
    Le stringe da salvare nel DB vanno filtrate da caratteri speciali con un certo rigore!
    Di thread che parlano di caratteri speciali, questo forum ne è pieno. Proprio l'altro ieri ho risposto nell'ennesimo, una mia funzione che toglie tutti i caratteri speciali in un solo colpo.

    Ti mando il link ad una discussione dove ho postato una funzione scritta da me che dorebbe fare al caso tuo.
    LINK

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3

    Re: Il metodo mysql_real_escape_string() blocca la query

    Originariamente inviato da Bartjsp
    il sistema di joomla risponde con:
    Warning: mysql_real_escape_string(): 15 is not a valid MySQL-Link resource in c:\www\j1014\includes\database.php on line 140
    per eseguire mysql_real_escape_string() devi prima fare la connessione a mysql. In pratica l'errore ti segnala che il resource id della connessione risulta false, vuoi per errore oppure per mancata connessione al server mysql.

    @edit - dai una occhiata anche alla pillola di Luca200.

    http://forum.html.it/forum/showthrea...ostid=10166292

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Ho letto i link consgiliati e da quel che ho capito lì si parla di apici passati insieme alle variabili. Il mio problema invece risiede nel fatto che non vengono accettati gli apici dell'istruzione SQL, se passo semplicemente WHERE ip = $ipaddress non funzionerà mai visto che in sql le stringhe devono essere racchiuse dagli apici a meno che non ci sia un altro metodo che io non so.

  5. #5
    Originariamente inviato da Bartjsp
    Ho letto i link consgiliati e da quel che ho capito lì si parla di apici passati insieme alle variabili. Il mio problema invece risiede nel fatto che non vengono accettati gli apici dell'istruzione SQL, se passo semplicemente WHERE ip = $ipaddress non funzionerà mai visto che in sql le stringhe devono essere racchiuse dagli apici a meno che non ci sia un altro metodo che io non so.
    ok. Ma adesso spiegami che centra questo where con l'istruzione mysql_real_escape_string() che viene fatta a priori.... e sopratutto con la segnalazione che ricevi.

    Se devi mettere una stringa nel codice SQL tra apici.... mettila tra apici.



    @ edit.... mi viene un dubbio quasi trubbio .... non e' che passi TUTTA la stringa SQL alla funzione mysql_real_escape_string() ????

    Devi passare la sola variabile $ipaddess

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Allora, forse continuo a non spiegarmi bene, posto lo script che ho inserito nella pagina di joomla nella speranza di riuscire a farmi capire:

    Codice PHP:
    $ipaddress $_SERVER['REMOTE_ADDR'];
    $data date("Y-m-d");

    $conn connetti();
    $query_ip "SELECT * FROM ingressi WHERE ip = '$ipaddress' AND data = '$data';";
    $exeQuery_ip mysql_query($query_ip,$conn) or die (mysql_error());
    if (
    $record_ip mysql_fetch_array($exeQuery_ip))
    {
        
    $sql_ip "INSERT INTO ingressi (data,ora,ip) VALUES (
            NOW(),
            NOW('hh:mm:ss'),
            '
    $ipaddress'
        );"
    ;
        
    $exeQuery_ip mysql_query($sql_ip,$conn) or die (mysql_error);
        }
    disconnetti($conn); 
    con questa query
    Codice PHP:
    $query_ip "SELECT * FROM ingressi WHERE ip = '$ipaddress' AND data = '$data';"
    si presenza l'errore di cui al primo post

    se invece scrivo semplicemente la query così:
    Codice PHP:
    $query_ip "SELECT * FROM ingressi;"
    non ho nessun errore.

    Quindi, come faccio a passare alla condizione WHERE una stringa senza apici ?

  7. #7
    forse sono io che non mi sono spiegato.

    NON SEI CONNESSO AL SERVER MYSQL..... forse perche' ti disconnetti oppure perche' non esporti dalla funzione la variabile con il resource id di connessione... oppure non hai risultati....

    non vedo poi la funzione soggetto del titolo del thread

    edit ....

    dimenticavo... NOW() e' void cioe' non ha parametri e rende un valore DATETIME yyyy-mm-dd hh:mm:ss. Probabilmente inserisce 00:00:00 perche' ora non valida e tu non la trovi con la condizione where.... mentre senza condizioni la trovi.

    Un campo time in presenza di un datetime identico e' comunque un valore duplicato ed inutile.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da Bartjsp
    posto lo script che ho inserito nella pagina di joomla
    E dove sarebbe mysql_real_escape_string() nello "script che hai inserito"?

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.