Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    30

    Non riesco a risolvere il problema degli apostrofi nonostante le guide

    Salve a tutti.
    Ho uno script php che si occupa di leggere una frase da una textarea e mandarla ad un database. Uso questo (pezzo di) codice:
    Codice PHP:
    $messaggio=$_POST['messaggio']; 
    E poi
    Codice PHP:
    $query=mysql_query("insert into guestbook(messaggio) values('$messaggio')"); 
    il campo "messaggio" è di tipo VARCHAR, con codifica latin1_swedish_ci e il motore di memorizzazione della tabella è InnoDB.
    In php.ini la situazione è questa:
    magic_quotes_gpc = Off
    magic_quotes_runtime = Off
    magic_quotes_sybase = Off
    Se provo a scrivere nella textarea Anch'io!, la query non va a buon fine.

    Ho cercato nel forum ma le soluzioni date agli altri utenti e scritte nelle PILLOLE non mi hanno aiutato, quindi ho aperto questa discussione sperando che avendone una tutta per me mi venga più facile trovare la soluzione.

    Mi date una mano?

  2. #2
    Codice PHP:
    $messaggio mysql_escape_string($_POST['messaggio']); 

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    30
    Non va...
    E ora c'è un problema più grosso... Non accetta NIENTE! Facciamo così... Posto tutto:
    Codice PHP:
    <html>
    <head>
      <title>Guestbook</title>
    </head>
    <body>
    <table border ="1">
    <?
    include("../conn.php");
    conn();

    if (isset(
    $_POST['autore'])){
    $autore=$_POST['autore'];
    $data=date("d/m/y");
    $ora=date("H:i:s");
    $messaggio=$_POST['messaggio'];
    $colore=$_POST['colore'];

    $query=mysql_query("insert into guestbook(autore,data,ora,messaggio,colore) values('$autore','$data','$ora','$messaggio','$colore')");
    if(
    $query) {
    echo
    "oh yeah";
    } else {
    echo
    "no no no!";}

    } else {

    echo 
    '
    Il tuo nome:

    <form method=post action="invia.php">
    <input type=text name="autore" maxlength=20>

    Scrivi il tuo messaggio:

    <textarea name="messaggio" rows="6" cols="50" maxlength=255></textarea>

    Colore del testo:

    <select name="colore">
    <option value="#000000" selected>Nero
    <option value="#ff0000">Rosso
    <option value="#00ff00">Verde
    <option value="#0000ff">Blu
    <option value="#ffff00">Giallo
    <option value="#ffa020">Arancione
    <option value="#ff80a0">Rosa
    <option value="#802080">Viola
    </select>

    <input type=submit value="Invia messaggio">
    </form>'
    ;
    }
    echo 
    "\n";?>
    </table>
    </body>
    </html>

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Io uso addslashes per inserire e stripslashes dopo la lettura.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Codice PHP:
    $sql="insert into guestbook(messaggio) values('$messaggio')";
    $query=mysql_query($sql) || die("$sql: " mysql_error); 
    Non dirmi "non va", scrivimi il messaggio di errore completo.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    30
    Mmm...
    Codice PHP:
    Notice: Use of undefined constant mysql_error assumed 'mysql_error' in C:\www\guestbook\invia.php on line 19
    insert into guestbook
    (autore,data,ora,messaggio,colorevalues('Un nome','25/11/07','21:22:05','L\'apostrofo','#000000'): mysql_error 

  7. #7
    Sorry, mi sono dimenticato le parentesi dopo mysql_error:

    Codice PHP:
    $sql="insert into guestbook(messaggio) values('$messaggio')";
    $query=mysql_query($sql) || die("$sql: " mysql_error ()); 
    Comunque nella query si vede di busso che non slasha lo slashabile. Non applichi mysql_escape_string() sulla stringa "L'apostrofo", non ce ne sono di banane. Questo ti dimostra il tutto:

    Codice PHP:
    $testo "L'apostrofo";
    echo 
    "<pre>$testo</pre>\n";

    $testo mysql_escape_string($testo);
    echo 
    "<pre>$testo</pre>\n"

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    30
    Ho provato l'esempio che mi hai fatto in un altro script e funge, ma nel mio script scrivo
    Codice PHP:
    $messaggio mysql_escape_string($_POST['messaggio']); 
    e il messaggio d'errore che mi da è
    insert into guestbook(autore,data,ora,messaggio,colore) values('ccdd','25/11/07','23:08:48','L\'apostrofo','#000000'): Duplicate entry '0' for key 1
    Ho provato
    Codice PHP:
    echo $messaggio
    e in effetti stampa L'apostrofo con lo slash, ma persevera a non inserirlo!
    Continuo a non capire...

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    30
    Allora... Ho buttato giù la tabella e l'ho rifatta... Ora funge (con mysql_escape_string)... Non capisco perché prima non facesse...
    Che voleva dire "Duplicate entry '0' for key 1"?

  10. #10
    Originariamente inviato da pimple
    Allora... Ho buttato giù la tabella e l'ho rifatta... Ora funge (con mysql_escape_string)... Non capisco perché prima non facesse...
    Che voleva dire "Duplicate entry '0' for key 1"?
    Così a occhio l'errore era nel database, non nel PHP. "Duplicate entry ..." significa che il comando INSERT era corretto, ma non poteva comunque inserire il record. Le cause più ovvie sono una "primary key" specificata nell'INSERT ma già esistente o un indice impostato come "unique" che non sarebbe più univoco dopo l'inserimento del nuovo record.

    Se per esempio ho una tabella con i campi "id" (intero, chiave primaria), "commento" (testo) e "user" (testo) e imposto un indice unique su "user", inserendo due record SENZA specificare "user" genera questo errore perché prenderebbe per due volte lo stesso valore di default (per cui non posso più avere l'indice unique su "user").

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.