Ciao!
Allora... grazie per le spiegazioni, in effetti ho un libro dove sto imparando, ma lasciamo perdere questo discorso.
Ti ringrazio per le spiegazioni che mi hanno "indirizzato" e fatto in modo che io elaborassi le cose che ho imparato, perchè avevo un po' di confusione, quindi grazie davvero. Ora spiego meglio delle cose:
ti incollo il codice della classe che grazie ai tuoi consigli sono riuscito a modificare con più criterio e correttezza:
Codice PHP:
<?php
/* check_registation_class.php */
class Checkdata
{
const ERRORE1 = "ERRORE: Devi completare tutti i campi obbligatori.";
const ERRORE2 = "ERRORE: Username dev'essere di almeno 3 caratteri e inferiore a 30 caratteri.";
const ERRORE3 = "ERRORE: La password dev'essere di almeno 5 caratteri.";
const ERRORE4 = "ERRORE: Il campo password dev'essere uguale al campo di conferma password.";
const ERRORE5 = "ERRORE: L'email inserita non è corretta, inserire una email valida.";
const ERRORE6 = "ERRORE: Il campo email dev'essere uguale al campo di conferma email.";
const ERRORE7 = "ATTENZIONE: Username inserito è già stato utilizzato da un altro utente, per piacere inserisci un altro Username.";
//private $username, $email, $cemail, $password, $cpassword;
private $query, $result;
private $num_res;
public function checknow($username, $email, $cemail, $password, $cpassword)
{
if($username == "" || $email == "" || $cemail == "" || $password == "" || $cpassword == "")
return Checkdata::ERRORE1;
if(strlen($username) < 3 || ($username) > 30)
return Checkdata::ERRORE2;
if(strlen($password) < 5)
return Checkdata::ERRORE3;
if(strcmp($password,$cpassword) != 0)
return Checkdata::ERRORE4;
if(!preg_match("/^[a-z0-9][_.a-z0-9-]+@([a-z0-9][0-9a-z-]+.)+([a-z]{2,4})/i", $email))
return Checkdata::ERRORE5;
if(strcmp($email,$cemail) != 0)
return Checkdata::ERRORE6;
require_once("mysql.class.php");
$dbmysql = new DbMysql();
$dbmysql->usock();
$this->query = "SELECT user_username FROM user WHERE user_username='".mysql_real_escape_string ($username)."' ";
$this->result = mysql_query($this->query) or die(mysql_error());
$this->num_res = mysql_num_rows($this->result);
if($this->num_res == 1)
return Checkdata::ERRORE7;
}
}
?>
Come vedi il codice è più pulito e gli errori di prima credo di averli risolti.
Nel file iscriviti.php richiamo la classe in questo modo e passo gli argomenti alla funzione:
Codice PHP:
<?php
require_once("../class/check_registation_class.php");
if(isSet($_POST['vai']))
{
$checkdata = new Checkdata();
$obtain = $checkdata->checknow($_POST['username'], $_POST['email'], $_POST['cemail'], $_POST['password'],$_POST['cpassword']);
$code_error = "<table border='1' cellpadding='3' cellspacing='0' style='border-collapse: collapse; padding-left: 20px;' bgcolor='#ffebe8' bordercolor='#dd3c10'>";
$code_error .= "<tr>";
$code_error .= "<td width='5%' valign='center'>";
$code_error .= "[img]../immagini/error.jpg[/img]";
$code_error .= "</td>";
$code_error .= "<td width='95%'>";
$code_error .= "[b]<font face='Verdana, Arial, Helvetica, sans-serif' color='#990000' style='font-size: 11px'>";
$code_error .= $obtain;
$code_error .="</font>[/b]";
$code_error .="</td>";
$code_error .="</tr>";
$code_error .="</table>";
echo $code_error;
}
?>
Bene, ora mi spiego meglio su alcuni punti, perchè penso di non essermi spiegato con chiarezza:
questo è un form di iscrizione, tu mi hai scritto questo:
8) fai la query al database basandoti solo sull'utente... e la password??
è naturale che controllo solo il nome utente, visto che quella funzione serve per controllare se il nome utente è già esistente, e in tal caso l'utente dovrà sceglierne un altro, quindi non vedo cosa c'entri la password, sulla password faccio altri controlli.
Poi hai scritto:
"se la lunghezza di $this->username e' minore di 3 oppure $this->username (misteriosamente racchiuso tra parentesi) contiene un numero maggiore di 30?
Ho corretto la variabile, ma le parentesi non sono un mistero, è proprio la sintassi di php che le richiede, quindi resta if(strlen($username) < 3 || ($username) > 30) e serve per controllare la lunghezza del NUOVO nome utente che sceglie il NUOVO iscritto. Ho preferito mettere un controllo. Se non metto le parentesi mi da errore.
Metterò altri controlli in generale ma per adesso mi serviva solo di elaborare le cose che avevo imparato perchè avevo un po' di confusione, ma grazie a te è più chiaro, poi continuerò a studiare il libro.
Il pezzo di html l'ho messo in iscriviti.php, si senza dubbio ho fatto una cosa insensata a metterlo nella classe, se è pessimo non saprei farlo meglio, è una semplice tabella con un messaggio di errore all'interno, non saprei proprio come renderla migliore, accetto buoni consigli 
Cmq il codice in locale funziona bene, ma sul server no, mi da sempre quello strano errore, allora ho verificato che la versione di php su quel server aruba è: PHP Version 4.4.9, sono senza parole.... in locale ho la versione: PHP Version 5.3.5 quindi sul server non posso nemmeno applicare il tuo buon consiglio sul controllo dell'email, vista la versione necessaria che di cui parla newbobotime nel post da te indicato. Mah, ho scritto ad aruba per capire perchè c'è quella versione di php.
Cmq ti ringrazio, le tue indicazioni mi aiutano, e se ne hai delle altre non puoi che farmi un piacere! Imparare è sempre bello, ma imparare bene è una fortuna
Fammi sapere se il codice è pulito!
Grazie per il tuo tempo 