Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Basi di dati ~ informatica triennale
 
Un buon uso di php :)
Clicca QUI per vedere il messaggio nel forum
NoWhereMan
oggi ho chiacchierato con un paio di voi a proposito di php e dell'uso di $_POST e $_SESSION; riflettendoci credo che ai vostri fini sia molto meglio usare $_POST, dovete solo rivedere un attimo l'organizzazione del vostro codice.

Non pensate ai file *.php come a delle unità che eseguono codice: costruite un file che nei richiami altri attraverso include(), piuttosto (qui nel codice ho usato require())!

Se il vostro scopo è definire un file dove "vengono eseguite le transazioni", costruite piuttosto N funzioni all'interno di questo file e poi includetelo!

se la sessione vi serve ESCLUSIVAMENTE nel momento in cui salvate o tentate il salvataggio dei dati, è COMPLETAMENTE inutile!

Ecco del codice che spero possa esservi di aiuto (abbiate pietà per gli eventuali errori di sintassi... non l'ho testato e sono tornato un'ora fa :D)


PHP:

transactions.php
---------------------
<?php

/*
  ritorna un array vuoto se non ci sono errori
  oppure un array associativo 
  con i nomi dei campi non validi come chiavi
  
  NOTA: array vuoto valuta == false, quindi bisogna dare un
  if ( !trans_registration_errors($_POST)  )
  
  
*/

function trans_user_exist($username) {
    
// controlla se lo username esiste
    // inserire qui il codice
    
return false;
}

function 
trans_registration_errors($data) {

    
// nota: se vi dà noia usare $data['campo'] usate la funzione 
    // extract($data) :  genererà variabili aventi il nome del campo
    // si usa così: supponiamo di avere $data['pippo']=&quot;pluto&quot;;
    // extract($data);
    // ora potete usare $pippo che avrà valore 'pluto'
    

    
     
$messaggi = array();
     if (empty(
$data['usr']) {
           
$messaggi['usr'] = 'Non hai inserito il nome!';
     } elseif (
trans_user_exist($data['usr'])) {
        
// in questo modo se un utente fa refresh sulla pagina con il postdata non viene creato un nuovo utente!
        
$messaggi['usr'] = &quot;Il nome utente esiste giàsceglierne un altro&quot;;
     }
     
     
     if (
strlen($data['pwd'])<6) {
           
$messaggi['usr'] = &quot;La password dev'essere lunga almeno 6 caratteri&quot;;
     }
     
     // altri if vanno qui. nota: io uso di solito gli if, perché
     // lo switch/case fa solo test di uguaglianza

     return $messaggi;

}

/*
    inserisce i dati nel database my_sql
    ritorna true o false
*/
    

function trans_registration_insert($data) {
    
    // fa cose varie....
    return true;
    
}

// altro codice andrà qui

?>
FINE transactions.php
-------------


forms.php
---------------------
<?php

    function register_form_show() {
?>

<form enctype=&quot;multipart/form-data&quot; action=&quot;<?php echo $_SERVER['
PHP_SELF'] ?>&quot; 
            method=&quot;POST&quot; name=&quot;vbform&quot;>
            
    <p>
    Inserisci i tuoi dati personali
    </p>
    
    <p>
    <label for=&quot;usr&quot;>Username</label>
    <input type=&quot;text&quot; name=&quot;usr&quot; id=&quot;usr&quot;>
    </p>
    
    <p>
    <label for=&quot;usr&quot;>Password</label>
    <input type=&quot;password&quot; name=&quot;pwd&quot; id=&quot;pwd&quot;>
    </p>    

</form>    
    
<?php
    }
    
    // altri form utili...

?>




register.php
-------------
<?php

require('
transactions.php');
require('
forms.php');

?>
<!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot;
   &quot;http://www.w3.org/TR/html4/strict.dtd&quot;>
<html>

   <head>
      <title>Blog</title>
   </head>


   <body>
      <?php
        if ( !empty($_POST) && !($array_errori = trans_registration_errors($_POST)) ) {
            
            // successo!
            echo &quot;<p>Registrazione di $_POST['
usr'] effettuata con successo</p>&quot;;
            // non è necessario che sia un if/else, ovviamente
            
        } else {
            
            /*
            Se ci sono stati errori, visualizziamoli prima del form, formattati
            in un'
elegante lista ;)
            */
            
            if (
$array_errori) {
            
                echo &
quot;<ul>&quot;
                foreach (
$array_errori as $chiave => $valore) {
                    echo &
quot;<li>$valore</li>\n&quot;;
                }
                echo &
quot;</ul>&quot;;
            
            }
            
            
register_form_show();
      }
      
?>
   </body>

</html>




naturalmente questo è UN modo, ma mi sembra meglio della SESSION, che è utile in altri casi, ossia quando vorrete gestire il login :)

PS: nel database è meglio memorizzare l'hash md5 della password

$pwdhash = md5($pwd);


ciao!

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate