Visualizzazione risultati 1 fino 10 di 10

Discussione: [php]Quali controlli mettere su campi form?

  1. #1
    Guest

    Predefinito [php]Quali controlli mettere su campi form?

    Sto creando un form per dei commenti ma sono in dubbio per i filtri/controlli da mettere nel form.
    I miei tre campi sono:
    name
    mail
    comment

    Ed i controlli che avrei in mente sarebbero
    name: rimozione di eventuali tag, conversione caratteri speciali in html, trasformazione di ' in \'
    mail: controllo alfanumericità e presenza della @ e del ., rimozione tag
    comment: rimozione tag, conversione caratteri speciali html, mettere a ogni /n della textarea un <br /> (qualcuno mi dice come si fa?), trasformazione di ' in \'

    Secondo voi vanno bene? O il form non è sicuro e rischio injection e infiltrazioni?

    E inoltre, quali sono inutili?

  2. #2
    Guest

    Predefinito

    conversione di "faccine" ( esempio ":)" ) con immagini di pochi pixel in modo da renderlo più originale (facoltativo). controllo sulla lunghezza dei campi nel caso non hai messo nella inpu type il valore "maxlength" uguale o inferiore alla massima disponibilità di quello del database, anche una casella che ti conta un numero di caratteri "rimanenti" da poter scrivere in modo da non perdere il testo (esempio: http://gestioneclan.altervista.org/g...messaggio.html se vuoi il sorgente te lo faccio avere, ma ti faccio notare che faccio uso di javascript) .
    credo che di inutile non ci sia nulla, anzi, mancano ancora tante cose al fine di diventare "professionale".

  3. #3
    Guest

    Predefinito

    Quali cose?
    Comunque ho raggruppato eliminazione di apici, eliminazione di tag con la funziona htmlspecialchars(); che ti trasforma tutto in html... quindi i < in &gt; ecc...

    Poi per mettere i <br /> ho usato nl2br();

    Va bene?

    Ah, per il controllo delle email ho fatto un'espressione regolare.

    p.s. sarebbe interessante quello dei caratteri rimanenti... mi manti i sorgenti?

    ah... ecco il codice... potrebbe essere migliorato?

    Codice PHP:
    <?php
    function isemail($email) { return pregmatch( '/[.+a-zA-Z0-9-]+@[a-zA-Z0-9-]+.[a-zA-Z]+/', $email ); }

    $art = $_GET['id'];
    $name = $_POST['commentname'];
    $mail = $_POST['commentmail'];
    $text = $_POST['comment'];

    if(empty(
    $art) || empty($name) || empty($mail) || empty($text)) {
    header("Location: error.php?id=0&art=$art");
    exit();
    } elseif(!
    isemail($mail)) {
    header("Location: error.php?id=1&art=$art");
    exit();
    }

    $name = htmlspecialchars($name);
    $mail = strtolower($mail);
    $text = nl2br(htmlspecialchars($text));

    // connessione al atabase e scrittura dati...

    ?>
    Ultima modifica di edo98 : 05-04-2011 alle ore 14.17.07

  4. #4
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    prima imposterei le variabili di default, quindi farei così:
    Codice PHP:
    $art=0;//se numerico
    $name=$mail=$text=null;

    if (
    count($_POST)) {
    //oppure:
    //if (isset($_POST['submit'])) {//pulsante submit o invia o come lo hai chiamato

    //se non vuoi html (e php):
    foreach(array('commentname','commentmail','comment') as $key) {$_POST[$key] = strip_tags($_POST[$key]);}

    if (isset(
    $_GET['id'])) $art = $_GET['id'];
    if (isset(
    $_POST['commentname'])) $name = $_POST['commentname'];
    if (isset(
    $_POST['commentmail'])) $mail = $_POST['commentmail'];
    if (isset(
    $_POST['comment'])) $text = $_POST['comment'];

    //qui il resto del codice

    }//end
    se memorizzi nel db, userei:
    mysql_real_escape_string()

    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  5. #5
    Guest

    Predefinito

    certamente, ho usato il javascript per farlo, ti mando la sintassi e il sorgente.

    Codice:
    // questo và nella parte HEAD
    <script language="JavaScript" type="text/javascript">
     function conta(val) {
    	max=300 // valore massimo
            if (val.testo.value.length > max) {
    	        val.testo.value = val.testo.value.substring(0,max)
    		rest = 0
            } 
    	else {
    		rest = max - val.testo.value.length // cancella quelli al di fuori dei max caratteri
    		}
            val.num.value = rest
     }
    </script>
    
    //questi sono gli INPUT TYPE
    
    // questo se lo vuoi utilizzare nella textarea
    
    <textarea name="testo" rows="4" cols="30" wrap="soft" onKeyUp="conta(this.form)"></textarea>
    
    
    //questo se lo vuoi utilizzare nella text
    
    <input name="oggetto" type="text" size="20" wrap="soft" onKeyUp="conta(this.form)">
    
    <input value="300" size="3" name="num" disabled> //casella conta caratteri

  6. #6
    Guest

    Predefinito

    Ok, ora ho un problema... come posso fare a trasformare gli accenti in &egrave ecc?

    Ho provato questo codice:
    Codice PHP:
    <?php
    function isemail($email) { return preg_match('/[.+a-zA-Z0-9-]+@[a-zA-Z0-9-]+.[a-zA-Z]+/', $email); }
    function
    accenti($text) { return str_ireplace(array('è','ù','à',':)',':(',':D',':P','ì','ò'), array('&egrave;','&ugrave;','&agrave;','Faccina felice','faccina triste','faccina sorridente','pernacchia!','&igrave;','&ograve;'), $text); }
    $art = $_GET['id'];
    $name = $_POST['commentname'];
    $mail = $_POST['commentmail'];
    $text = $_POST['comment'];
    $captcha = $_POST['commentcaptcha'];

    if(
    $captcha !== 'millecinquecento') {
    header("Location: error.php?id=2&art=$art");
    exit();
    }

    if(!
    isemail($mail)) {
    header("Location: error.php?id=1&art=$art");
    exit();
    }

    $name = accenti(htmlspecialchars($name));
    $mail = strtolower($mail);
    $text = nl2br(accenti(htmlspecialchars($text)));

    echo
    $name;
    echo
    $mail;
    echo
    $text;
    ?>
    Ma come codice sorgente mi da:
    Codice HTML:
    Prova accentiedededed@hotmail.it
    <br />
    faccina sorridente faccina triste Faccina felice pernacchia!<br />
    <br />
    a capo<br />
    <br />
    <br />
    <br />
    che bellezza gli accenti!
    prova accenti: �����+�+�+�p��
    <br />
    <br />
    <br />
    <br />
    lol<br />
    
    &lt;b&gt;Ciao&lt;/b&gt;
    come faccio a levare quei punti di domanda?
    il bello è che firefox visualizza bene gli accenti anche se sono fatti con i punti di domanda...
    Ultima modifica di edo98 : 06-04-2011 alle ore 20.39.51

  7. #7
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Non hai bisogno di convertire gli accenti nelle loro entità se imposti la codifica corretta...

    Se proprio non ci riesci, htmlentities/htmlspecialchars sono funzioni apposite per convertire i caratteri "strani" nelle loro relative entità.

  8. #8
    Guest

    Predefinito

    Dici? allora lascio così...

  9. #9
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Ma in che senso lasci così?
    Lascerai i punti interrogativi ( � )?

    Quello che devi fare è salvare il file php in una determinata codifica ( iso-8859-1 o utf-8 ) e impostare come codifica della pagina quella con cui hai salvato il file; quindi le codifiche devono coincidere.
    Ultima modifica di javascripter : 07-04-2011 alle ore 18.10.12

  10. #10
    Guest

    Predefinito

    Devi inserire tra <head> e </head> questo:

    <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

    Poi per sostituire " con &quot puoi ricorrere a str_replace

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •