• Super User

    Apostrofo in form mail diventa \

    Dopo aver risolto la storia degli accenti adesso è il momento degli apostrofi...
    ho questa form funzionante e tutto il resto...
    Il tutto si svolge in una pagina php dove c'è la form e php che processa i dati inseriti.
    Una volta inviata stampa a video le cose scritte dentro i campi.
    Il problema soggiunge quando si inseriscono nell'oggetto e nel messaggio un bell'apostrofo che SOLO nella mail appare così ""...

     <?php
    define("_destinatario","[email protected]");
    define("errore_oggetto_predefinito","Non ha inserito un oggetto!");
    define("errore_email_predefinito","L'indirizzo email che ha inserito non è corretto!");
    define("errore_messaggio_predefinito","Il messaggio è vuoto!");
    define("segnaposto_oggetto","Inserisca un oggetto");
    define("segnaposto_email","Inserisca la Sua email");
    define("segnaposto_messaggio","Inserisca il Suo messaggio");
    function generaModulo($oggetto=segnaposto_oggetto,$email=segnaposto_email,$messaggio=segnaposto_messaggio,$errore_oggetto="",$errore_email="",$errore_messaggio=""){
    ?>
     <form action="<?php echo $_SERVER['file:///C|/DOCUME~1/ciao/IMPOST~1/Temp/_tc/PHP_SELF']; ?>" method="post" id="form1">
    
    <p>Per ricevere informazioni e preventivi potete compliare la form sottostante. Invieremo al pi&ugrave; presto una risposta.</p>
        <table>
      <tr>
        <td>Il Suo indirizzo e-mail*</td>
        <td><label>
        <?php if (!$errore_email=="") { echo"<span><strong>$errore_email</strong></span>";} else { echo"";}?><br />
          <input name="email" type="text" id="mail" value="<?php echo $email;?>" />
        </label></td>
      </tr>
      <tr>
        <td>Oggetto*</td>
        <td><label>
        <?php if (!$errore_oggetto=="") { echo"<span><strong>$errore_oggetto</strong></span>";} else { echo"";}?><br />
          <input name="oggetto" type="text" id="oggetto" value="<?php echo $oggetto;?>" />
        </label></td>
      </tr>
      <tr>
        <td>Messaggio*</td>
        <td>
        <?php if (!$errore_messaggio=="") { echo"<span><strong>$errore_messaggio</strong></span>";} else { echo"";}?><br />
    <textarea name="messaggio" cols="30" rows="5" id="messaggio" ><?php echo $messaggio;?></textarea>
        </td>
      </tr>
      <tr>
        <td><label>*I campi sono obbligatori
          
        </label></td>
        <td><label>
         <input type="submit" value="Invia il modulo" name="bottone_invio" /> <input type="reset" name="cancella" id="cancella" value="Ripristina" />
        </label></td>
      </tr>
    </table>
       
        </form>
        <?php
    }
    function isValidEmail($email){
       $pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$";
         
       if (eregi($pattern, $email)){
          return true;
       }
       else {
          return false;
       }   
    }
    
    function controlla($stringa,$lunghezza){
       if (strlen($stringa)<$lunghezza){
          return true;
       }
       else {
          return false;
       }   
    }
    
    ?>
    <?php if (!isset($_POST['bottone_invio']))  {
        generaModulo();
    } else  {
          $oggetto = isset($_POST['oggetto']) ? $_POST['oggetto'] : "";
          $email   = isset($_POST['email'])   ? $_POST['email'] : "";
          $commenti = isset($_POST['messaggio']) ? $_POST['messaggio'] : "";
            
    
          $error  = false;
          $errore_oggetto = '';
          $errore_email = '';
                $errore_messaggio = '';
    
             if (controlla($oggetto,1) or ($oggetto==segnaposto_oggetto)) {
              $error = true;
              $errore_oggetto = errore_oggetto_predefinito;
          }
                
     
          if (!isValidEmail($email)){
              $error = true;
              $errore_email = errore_email_predefinito;
          }
          if ((controlla($messaggio,1)) or ($messaggio==segnaposto_messaggio)) { 
              $error = true;
              $errore_messaggio = errore_messaggio_predefinito;
          }
    
          if ($error){
             generaModulo($oggetto,$email,$messaggio,$errore_oggetto,$errore_email,$errore_messaggio);
          }
          else {
                ?>
                <p>
                Ha inserito i seguenti dati:<br />
                <br />
                <b>Oggetto:</b> <?php echo stripslashes($oggetto) ?>
                <br />
                <b>Email:</b> <?php echo stripslashes($email) ?>
                <br />
                <b>Messaggio:</b> <?php echo stripslashes($messaggio) ?>
                <br />
                </p>
              <?php 
                        if ($telefono == segnaposto_telefono) $telefono="-";
                        mail(_destinatario,"contatto dal sito sito sito","Oggetto: $oggetto\nEmail: $email \nMessaggio:$messaggio","From:$email");
                        echo"<p>Grazie per aver inviato il messaggio</p>";?>
                        <?php  }  }
                            
        ?>
    ```Prima appariva così anche quando stampava a video le informazioni inserite poi ho aggiunto questo : 
    <?php echo stripslashes($oggetto) ?>  nella parte che andrà visualizzata dall'utente che invia...e funziona...
    Purtroppo chi riceve la mail la riceve con queste belle lettere comprese di apostrofo..." l\'apostrofo..."
    
    Cosa posso fare perchè anche nella mail si visualizzi un messaggio senza apostrofi strani??
    Nella form che usavo prima avevo messo questa stringa e tutto funzionava, ma in questo non so proprio dove metterlo...
    
    $body .= "testo: " . trim(stripslashes($_POST["body"])) . "\n";
    
    :bho:
    Grazie in anticipo...:D

  • User

    Esegui stripslahes una volta per tutte appena leggi i dati da $_POST.

    [php]$oggetto = isset($_POST['oggetto']) ? stripslashes($_POST['oggetto']) : "";
    $email = isset($_POST['email']) ? stripslashes($_POST['email']) : "";
    $commenti = isset($_POST['messaggio']) ? stripslashes($_POST['messaggio']) : "";[/php]A questo punto non serve più nelle istruzioni seguenti

    [php]<p>
    Ha inserito i seguenti dati:<br />
    <br />
    <b>Oggetto:</b> <?php echo $oggetto; ?>
    <br />
    <b>Email:</b> <?php echo $email; ?>
    <br />
    <b>Messaggio:</b> <?php echo $messaggio; ?>
    <br />
    </p>[/php]e questa riga a ora va bene così perché le variabili le hai già strippate all'inizio

    [php]mail(_destinatario,"contatto dal sito sito sito","Oggetto: $oggetto\nEmail: $email \nMessaggio:$messaggio","From:$email");[/php]Spero di aver interpretato bene il codice, prova un po'.


  • Super User

    Funziona...ma che scema, e dire che ci avevo pure provato a metterli lì...lo sai quale è stato l'errore a parte toglierle "stripslashes"??

    ***$commenti ***= isset($_POST['messaggio']) ? stripslashes($_POST['messaggio']) : "";

    La variabile $commenti era sbagliata...io ho preso questa form da uno script trovato un pò di tempo fa su internet, l'ho modificato come piaceva a me e riadattato modificando quello che era "commenti" con "messaggio"...però quello era fatto appunto per i commenti, questo per le mail...ho dimenticato di cambiare la variabile $commenti con $messaggio...così anche provando a mettere stripslashes dove andava messo il messaggio mi risultava sempre con l'apostrofo strano....insomma un errore di nome 🙂
    Gmassi, ogni volta che apri bocca ci prendi, grazie mille :D.
    Menomale che oltre a te stasera ho avuto un uccellino vicino che mi ha fatto notare l'errore della variabile 😄
    Sono "stracca" e non certe volte proprio non ci arrivo, nemmeno il codice nei tag giusti ho messo nel post di apertura...povera me....:D

    Grazie di nuovo


  • User

    Di nulla figurati. Non avevo notato lo scambio di variabile, capita con il copia-incolla da script diversi.


  • Super User

    @gmassi said:

    Di nulla figurati. Non avevo notato lo scambio di variabile, capita con il copia-incolla da script diversi.

    Nemmeno io, alle volte una virgoletta o una parolina fa la differenza 😄
    Grazie di nuovo.