ciao a tutti,
il mio sistema di registrazione si articola secondo 3 moduli :
config.php
reg.lib.php
register.php
se non inserisco il campo sesso la registrazione dovrebbe interrompersi e dire all' utente che :
Sesso : Il campo non può essere lasciato vuoto
ed invece non funziona mentre per tutti gli altri campi il controllo regge.
in particolare sesso è type="radio" mentre gli altri sono tutti type="text"
a seguire estratto da : "reg.lib.php"
...la funzione reg_register accetta come parametro un array associativo contenete i dati dell'utente ....
Codice PHP:
function reg_register(&$data)
{
//.... creo una password utente in md5
//... altro codice
//... ancora altro codice
/*
La funzione reg_check_data viene utilizzata per effettuare un controllo sui dati inseriti dall'utente; per ogni dato presente
all'interno dell'array passato come argomento, questa funzione richiama una callback associata precedentemente
all'interno del file config.php, la quale si occuperà di validare o meno il dato; nel caso in cui siano stati riscontrati
errori, questa funzione li restituirà al blocco di codice chiamante, in modo che questi possa gestirli correttamente.
*/
function reg_check_data(&$data)
{
global $_CONFIG;
$errors = array();
# esempio $data è nome mentre $field_name è marco
foreach($data as $field_name => $value)
{
$func = $_CONFIG['check_table'][$field_name];
if(!is_null($func))
{
$ret = $func($value); # es. check_global(marco)
if($ret !== true)
$errors[] = array($field_name, $ret);
}
}
return count($errors) > 0 ? $errors : true;
}
/*... inserisco nel db i dati utente
che arrivano POST dal form di
registrazione */
mysql_query ("INSERT INTO ".$_CONFIG['table_utenti']."...etc etc
VALUES(..etc '".$id."',...'".$data['sesso']['0']."')");
/*... eseguiti i controlli invio la mail con
username e password e link di conferma
attivazione all' utente */
//... altro codice
// FINE DELLA FUNZIONE !!!
a seguire estratto da : "config.php"
Il parametro check_table è invece un array associativo strutturato in modo da associare ad ogni chiave, rappresentante
un campo del form di registrazione, una funzione che ne controlli il valore. Questa funzione di callback accetta come
parametro il valore del campo, e restituisce true in caso di successo, oppure una stringa che rappresenta il valore
testuale dell'errore. In caso un valore del form non sia presente come chiave dell'array, il valore viene interpretato
automaticamente come corretto.
Le funzioni check_* sono quelle di callback.
Codice PHP:
$_CONFIG['check_table'] = array(
"nome" => "check_global",
"cognome" => "check_global",
"indirizzo" => "check_global",
"occupazione" => "check_global",
"username" => "check_username",
"email" => "check_email",
"codfisc" => "check_global",
"sesso" => "check_global" // QUI HO PROBLEMI
);
/* QUI HO PROBLEMI !
per sesso : $sesso['0']
m <input name="sesso[]" value ="m" type="radio">
f <input name="sesso[]" value ="f" type="radio">
e serve estrarre il dato... e qui mi incasino ...
mentre per le altre è semplice : $nome
<input type="text" name="nome">
*/
define('REG_ERRORS', 107);
define('REG_SUCCESS', 108);
define('REG_FAILED', 109);
// RICHIAMATA DA : reg_check_data(&$data) in reg.lib.php
function check_global($value)
{
global $_CONFIG;
$value = trim($value);
if($value == "")
return "Il campo non può essere lasciato vuoto";
return true;
}
e per finire ; a seguire estratto da : "register.php"
che è la pagina in cui si segnala lo stato positivo o meno del processo di registazione
Codice PHP:
<?php
$sesso = $sesso[0];
global $sesso;
include_once("../XXX/config.php");
include_once("../XXX/reg.lib.php");
include_once("../XXX/codfisc.lib.php");
if(isset($_POST['action']) and $_POST['action'] == 'Invia')
{
$ret = reg_check_data($_POST) ;
$status = ($ret === true) ? reg_register($_POST):REG_ERRORS;
switch($status)
{
case REG_ERRORS:
?>
<span class="style1">Sono stati rilevati i seguenti errori:</span>
<?php
foreach($ret as $error)
printf("[b]%s[/b]: %s
", $error[0], $error[1]);
?>
Premere "indietro" per modificare i dati
<?php
break;
case REG_FAILED:
echo "Registrazione Fallita a causa di un errore interno.";
break;
case REG_SUCCESS:
echo "Registrazione avvenuta con successo.
Vi è stata inviata una email contente le istruzioni per confermare la registrazione.";
break;
}
}
?>
credo che :
$ret = reg_check_data($_POST) ;
$status = ($ret === true) ? reg_register($_POST):REG_ERRORS;
il problema sia proprio in quel $_POST ... il valore di sesso è un ' array è non una semplice variabile come gli altri tag input del form.
anche se io per richiamarla uso :
$sesso = $sesso[0];
global $sesso;
insomma come faccio a modificare la funzione reg_check_data ?!?
è settimane che mi perdo se qualcuno potesse fare un pò di luce ne sarei davvero grato io ormai mi sono un pò demotivato...
grazie
carmine