Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [php] apici e serialize

    Ciao a tutti gente,
    ho qualche problema a far passare stringhe contenenti apici singoli di questo genere
    l'alchimia
    sul database mysql.
    Ho provato ad inserire la funzione serialize() nelle variabili prese ma non ho ottenuto alcun risultato.

    Codice PHP:
    $quotidiano serialize($_POST["quotidiano"]); 
    la query è questa:
    Codice PHP:
        mysql_query("insert into archivio (data, quotidiano, titolo, pdfPath, fileSize, category) values ('$data', '$quotidiano', '$titolo', '$pathFileServer', '$fileSize', '$category');"$conn) or die ("Non è possibile eseguire la query sul database. Contattare l'amministratore del database".mysql_error()); 
    Cosa posso fare?
    Ciao

  2. #2
    Utente di HTML.it L'avatar di grendy
    Registrato dal
    Aug 2003
    Messaggi
    338
    basta mettere due apici e tutto funziona
    esempio: l''alchimia

    «Sono le azioni che contano. I nostri pensieri, per quanto buoni possano essere, sono perle false fintanto che non vengono trasformati in azioni. Sii il cambiamento che vuoi vedere avvenire nel mondo». (Mahatma Gandhi)

  3. #3
    si ma non posso chiedere a gli utenti di sostiuire l'aposrtofo con le virgolette.
    magari se invertissi i doppi con i singoli apici e viceversa nella query avrei meno problemi. Ma credo che non risolva il problema a pieno. Cioè, se comunque un'utente mi infila del testo con le virgolette (pinco " pallino) mi ritornerebbe lo stesso errore.
    Ma questa funzione serialize() cosa serve esattamente?

  4. #4
    Utente di HTML.it L'avatar di grendy
    Registrato dal
    Aug 2003
    Messaggi
    338

    l'utente scrive normalmente,
    tu prima di inserirlo nel database devi formattarlo in modo che non dia errore.
    ti posto un esempio :
    Codice PHP:
    <?php
    $stringa 
    "l'alchimia";
    echo 
    "questa stringa da errore: " $stringa "
    \n"
    ;
    $formatta_stringa = array("'" => "''");
    $nuova_stringa strtr($stringa$formatta_stringa);
    echo 
    "questa invece no: " $nuova_stringa "
    \n"
    ;
    ?>
    naturalmente potresti formattare in questo modo tutto il testo che viene inserito, ma sarebbe più giusto, fare un controllo sul contenuto del testo, e formattare solo il testo che contenga l'apice.
    «Sono le azioni che contano. I nostri pensieri, per quanto buoni possano essere, sono perle false fintanto che non vengono trasformati in azioni. Sii il cambiamento che vuoi vedere avvenire nel mondo». (Mahatma Gandhi)

  5. #5
    Ciao,
    serialize non serve a nulla in questo caso

    l'apice è un carattere riservato (e a volte pericoloso)

    Se il magic quotes di PHP (che aggiunge automaticamente un backslash agli apici) è disattivato (meglio se lo è) applica questa funzione alla stringa che potrebbe contenere gli apici
    http://it.php.net/manual/en/function...ape-string.php
    per favore NIENTE PVT TECNICI da sconosciuti

  6. #6
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    [supersaibal]Originariamente inviato da Sandrocchio_0.1
    si ma non posso chiedere a gli utenti di sostiuire l'aposrtofo con le virgolette.
    magari se invertissi i doppi con i singoli apici e viceversa nella query avrei meno problemi. Ma credo che non risolva il problema a pieno. Cioè, se comunque un'utente mi infila del testo con le virgolette (pinco " pallino) mi ritornerebbe lo stesso errore.
    Ma questa funzione serialize() cosa serve esattamente? [/supersaibal]
    La funzione serialize non è adatta per quello che desideri ottenere...

    Quando invii i dati puoi usare la funzione addslashes oppure mysql_escape_string.

    Poi, quando li recuperi usi la funzione stripslashes.

  7. #7
    Ho dato un'occhiata al link che mi avete dato.
    E ho preso giù quella funziona di esempio:
    Codice PHP:
    // Quote variable to make safe
    function quote_smart($value)
    {
       
    // Stripslashes
       
    if (get_magic_quotes_gpc()) {
           
    $value stripslashes($value);
       }
       
    // Quote if not integer
       
    if (!is_numeric($value)) {
           
    $value "'" mysql_real_escape_string($value) . "'";
       }
       return 
    $value;

    e nella query
    Codice PHP:
        mysql_query("insert into archivio (data, quotidiano, titolo, pdfPath, fileSize, category) values (quote_smart('$data'), quote_smart('$quotidiano'), quote_smart('$titolo'), quote_smart('$pathFileServer'), quote_smart('$fileSize'), quote_smart('$category'));"$conn) or die ("Non è possibile eseguire la query sul database. Contattare l'amministratore del database".mysql_error()); 
    Poi ho provato a passare come variabile di testo
    quotidiano:
    test security fall '
    per vedere come si comportava con la virgoletta.

    Questo è il messaggio di errore:
    MySQL server version for the right syntax to use near '('2005-04-16'), quote_smart('test security fall ''), quote_smar
    Come posso risolverlo?
    Grazie gente

  8. #8
    Utente di HTML.it L'avatar di chris
    Registrato dal
    Sep 1999
    Messaggi
    1,568
    le funzioni le devi passare come funzioni, non come stringhe.

    mysql_query("insert into archivio (data, quotidiano, titolo, pdfPath, fileSize, category) values" .
    " ('" . quote_smart('$data') . "', " .
    "'" . quote_smart('$quotidiano') . "', " .
    "'" . quote_smart('$titolo') . "', " .
    "'" . quote_smart('$pathFileServer') . "', ".
    "'" . quote_smart('$fileSize') . "', " .
    "'" . quote_smart('$category') . "')", $conn)
    or die ("Non è possibile eseguire la query sul database. Contattare l'amministratore del database".mysql_error());
    "Nei prossimi tre anni col mio governo vogliamo vincere anche il cancro, che colpisce ogni anno 250.000 italiani e riguarda quasi due milioni di nostri concittadini"

  9. #9
    onde evitare di impazzire dietro le virgolette
    ho provato a chiamare la funzione prima di eseguire la query
    Codice PHP:
    $data quote_smart($data);
        
    $quotidiano quote_smart($quotidiano);
        
    $titolo quote_smart($titolo);
        
    $pathFileServer quote_smart($pathFileServer);
        
    $fileSize quote_smart($fileSize);
        
    $category quote_smart($category);
        
                
    mysql_query("insert into archivio (data, quotidiano, titolo, pdfPath, fileSize, category) values ('$data', '$quotidiano', '$titolo', '$pathFileServer', '$fileSize', '$category');"$conn) or die ("Non è possibile eseguire la query sul database. Contattare l'amministratore del database".mysql_error()); 
    Ma continua a darmi un errore:

    MySQL server version for the right syntax to use near '2005-04-16'', ''test security fall \ ''', ''sandro'', ''work/upl

    Il backslash lo scostato io perchè non si visualizzava.
    Che succede?

  10. #10
    ok, ho risolto. Mi incasino sempre con le virgolette nelle query.

    Adesso però ho un'altro problemino.
    Ho un form di modifica che nel value pesca una variabile caricata dalla query.

    Solo che così come viene presa me la presenta tagliata.
    Il testo inserito era sandro l'ape" e se vado nel codice html scopro che cè stata un po di confusione con gli apici
    <input type="text" name="quotidiano" id="quotidiano" value="Sandro l'ape " class="form">
    Come posso fare?

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.