Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085

    alert .. problemi con gli apici (penso)

    Ciao,
    ho un problemino con il seguente script che fa uscire un alert .. mi verrebbe da dire che il problema sia legato agli apici, ma non ci giurerei ..

    questo è lo script in questione:

    codice:
    function popup_errore($err)
      { 
       echo "<script language=\"Javascript\">  \n"   ;     
       echo "x='" . $err       . "'            \n"   ;  
       echo "alert(x);      \n"   ;  
       echo "</script>" ;                                    
      }
    in generale, se dentro a '$err' ci fosse un apice singolo, lo script non mi uscirebbe, per cui ho risolto con una sostituzione degli apici dentro alla variabile (da apice singolo a doppio):

    codice:
    $err = strtr($err,"'","\"")
    se però '$err' viene valorizzato con campi di mysql, e se la stringa contiene stì benedetti apici, lo script non mi funziona, nonostante la sostituzione.
    quello che è strano, è che se io forzo dentro a '$err', quello che è contenuto nel campo valorizzato da mysql (il contenuto lo vedo con una 'echo' del php), il tutto mi funziona


    CASO NON FUNZIONANTE:

    codice:
    $err = "Errore durante la select anagrafe: " .	mysql_error() . " - " . mysql_errno();
    dove '$err' contiene (visto attraverso una 'echo'):

    codice:
    Errore durante la select anagrafe: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND b.id_ana = a.id_ana ) ORDER BY a.nominativo, ' at line 5 - 1064
    CASO FUNZIONANTE (con lo stesso contenuto del caso precedente non funzionante):

    codice:
    $err = "Errore durante la select anagrafe: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND b.id_ana = a.id_ana ) ORDER BY a.nominativo, ' at line 5 - 1064";
    Spero di essere stato chiaro !

    qualche idea ?

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Premesso che è tutto poco chiaro, per il poco che ho capito è un problema php.
    Ma attendi commente più autorevoli
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    È php+javascript.
    Per quel poco che conosco php, posso immaginare...
    codice:
    $err = strtr($err,"'","\\\'")

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    Originariamente inviato da carlomarx
    È php+javascript.
    Per quel poco che conosco php, posso immaginare...
    codice:
    $err = strtr($err,"'","\\\'")
    scusa ..
    cosa avresti fatto così ?

  5. #5
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Dovrei aver sostituito l'apostrofo nell'html restituito dal php con i due caratteri: \', che in javascript verranno nuovamente interpretati come apostrofo. Ma non conosco abbastanza php. Ciao.

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Ma da quanto ne so (studio da poco php) la "sistemazione" degli apici si fa cosi:
    $err = str_replace($err,"'","\'") #se nella stringa c'è un apice gli antepongo un backslash
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Io ne so meno di te di php. Ma se php ragiona come javascript avviene questo: se dichiari il contenuto di una stringa così: "\'", verrà salvato in memoria un solo carattere, l'apostrofo; se dichiari il contenuto di una stringa così: "\\'" (ma in javascript è meglio scrivere così: "\\\'") verranno salvati due caratteri, il backslash e l'apostrofo. Ciao.

  8. #8
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    No Carlo, il php non ragiona proprio come il javascript, anche se è molto simile e come l'inglese e l'americano il "ceppo" è quello ma si differenziano in certe cose.
    E comunque da quanto ho capito non deve salvare nulla ma inserire un backslash davanti apice perché non venga interpretato come fine stringa.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  9. #9
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    "Salvare" in una variabile, parlo in questo caso della variabile $err.
    E tu in php come fai a scrivere \\' ???? Visto che se scrivi "\\'" ottieni solo l'apostrofo?! In javascript si fa così: \\\\'

    codice:
    alert("\\\\'");
    Il php deve restituire nell'html esattamente il contenuto di quell'alert per ogni apostrofo contenuto nella stringa iniziale prima del replace.

    Per intenderci, se ci trovassimo in javascript e volessimo fare la stessa cosa che ha fatto lui con un'ipotetica variabile err, dovremmo fare così:

    codice:
    err = err.replace("\\'", "\\\\'");
    Così da sostituire ciascun apostrofo con backslash + apostrofo...

    codice:
    // output prima della sostituzione
    var err = "L\\'amore incombe.";
    alert(err);
    // output dopo la sostituzione
    err = err.replace("\\'", "\\\\'");
    alert(err);

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    $err = strtr($err,"'","\"")

    lo slash serve per far dire a php che quello che trova dopo è un carattere da prendere per quello che è .. e non come un delimitatore !

    infatti l'apice singolo è contenuto da due delimitatori che sono un doppio apice ..
    e lo stesso dicasi per il doppio apice che è delimitato da due doppi apici.

    comunque sia, il punto è che se io valorizzo '$err' con il contenuto di quello che mi restituisce mysql (l'errore), lo script funziona (sostituisce il singolo apice con un doppio apice .. e quindi il discorso dello slash funziona) ..
    mentre non funziona se '$err' è valorizzato direttamente da mysql:

    $err = "Errore durante la select anagrafe: " . mysql_error() . " - " . mysql_errno();

    che altro non è che:

    Errore durante la select anagrafe: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND b.id_ana = a.id_ana ) ORDER BY a.nominativo, ' at line 5 - 1064

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.