- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Tutorial] Area privata
-
Perfetto ora viualizza solo la scritta "Account Attivato" come dovrebbe.
Ora provo a farmi da solo un po di pagine, se ho bisogno ripasso più tardi
-
Bene
Buon Lavoro
-
Rieccomi!
Problema di oggi, ho fatto un pagina membri.php, dove appunto vedere la lista di tutti i membri in ordine di username, e (miracolo!) ci sono quasi riuscito, ho solo il problema che mi fa vedere tutte le informazioni visibili dal database, ad esempio anche la password (criptata, ma comunque non è bello da vedere e manco sicuro, penso).
Quindi chiedo come posso fare per visualizzare solo le voci che voglio io?
Il codice:
[php]<?php
// Includo la connessione al database
require('config.php');
$query="select * from utenti order by user";
$result= mysql_query($query);
$numfields = mysql_num_fields($result);
echo "<table>\n<tr>";
for ($i=0; $i < $numfields; $i++)
{
echo '<th>'.mysql_field_name($result, $i).'</th>';
}
echo "</tr>\n";while ($row = mysql_fetch_row($result))
{
echo '<tr><td>'.implode($row,'</td><td>')."</td></tr>\n";
}
echo "</table>\n";
?>
[/php]Inoltre, in questo modo se ho per esempio 10 utenti o 1000, mi mostra comunque la lista utenti su una pagina.. Come fare per dividere la lista in pezzi, per esempio 20 nomi per pagina?
Come sempre mi sa che chiedo poco , grazie a chi può rispondermi
-
Per stampare solo il nome utente puoi fare cosi:
[php]
<?php
// Includo la connessione al database
require('config.php');// Query per ottenre la lista utenti
$query="select * from utenti order by user";
$result= mysql_query($query);echo '<table>';
while($row = mysql_fetch_array($result))
{
echo '<tr><td>'.$row['username'].'</td></tr>';}
echo "</table>\n";
?>
[/php]
-
Il codice funziona ed è anche più pulito e comprensibile
Per la cosa di stabilire un numero massimo di utenti da visualizzare per pagina come si può fare?
Se ho 32 utenti e voglio fare per ogni pagina 10 utenti, per far fare quest suddivisione in automatico come si può fare?
-
Ciao Gigi991,
Puoi fare cosi:
[php]
<?php
// Includo la connessione al database
require('config.php');// Pagina
$page = (isset($_GET['page'])) ? $_GET['page'] : 1;// Numero record di partenza per la selezione
$limit = ($page-1)*10;// Query per ottenre la lista utenti
$query="select * from utenti ORDER BY user LIMIT $limit,10";
$result= mysql_query($query);
// Numero utenti = mysql_num_rows($result)
// Dividiamo per 10 che è il numero di utenti per pagina
// ceil arrotonda per eccesso
$pagine = ceil(mysql_num_rows($result)/10);echo '<table><tr><td>';
// Pagine
for($i=1; $i<=$pagine; $i++)
{
echo '<a href="membri.php?page='.$i.'">'.$i.'</a> ';
}
echo '</td></tr>';
while($row = mysql_fetch_array($result))
{
echo '<tr><td>'.$row['username'].'</td></tr>';}
echo "</table>\n";
?>
[/php]Se hai dubbi sul codice chiedi pure
-
Si visto che ci sono queste 2 cose:
// Numero record di partenza per la selezione
$limit = *($page-1)20;E quindi anche il pezzo aggiunto dove è richiamata la variabile
// Query per ottenre la lista utenti
$query="select * from utenti ORDER BY user LIMIT $limit,20";Non li ho capiti bene, sopratutto il significato del -1 vicino a $page..
Per il ceil una conferma
// ceil arrotonda per eccesso
$pagine = ceil(mysql_num_rows($result)/20);Questo in pratica dice che se per esempio ho 46 utenti /20 verrà 2,XX, e quindi arrotonda a 3 perchè serve comunque una terza pagina per gli ultimi 12 nomi, giusto?
-
Ciao Gigi991,
Il -1 serve a far si che:
Se la pagina richiesta è la 1, Farà 1-120, quindi deve partire dal record numero 0
Se la pagina richiesta è la 2, Farà 2-120, quindi deve partire dal record numero 20I record ovviamente partono da 0, non da 1.
**LIMIT $limit,20
**Dice di partire dal record $limit, e prendere 20 record.
Per il ceil è esatto in quel modo.Spero di essere stato chiaro, se hai altri dubbi chiedi pure
-
Tutto chiaro per quello sritto sopra.
Ora, sono tornato alla pagina di registrazione, e tanto per complicarmi di più la vita ho deciso di inserire un menu a tendina con tutte le province italiane..
Per non sprecare spazio nel database ho creato una nuova tabella 'province' con i campi "id" e "nome", in modo da registrare come dato nella tabella utenti solo il numero id della provincia, e rendere visibile sulle pagine php (e nel menù a tendina) il nome per intero.
Nella vecchia tabella 'utenti' ho aggiunto il campo residenza.Nella pagina registrati.php ho aggiunto dentro l campo form:
[PHP] <select name="provincia">
<?php
$strQuery="select * from province";
$elenco=mysql_query($strQuery) or die(mysql_error());
while($row_province=mysql_fetch_array($elenco)){
$id=$row_province[id];
$nome=$row_province[nome];
echo '<option value="'.$id.'">'.$nome.'</option>';
}
?>
</select>[/PHP]Si vedono tutte le provincie, solo che non me lo registra nel database..
Ho provato anche a fare non so quante modifiche,ma il risultato era lo stesso..
Torno a chieervi aiuto dopo ore per fare sta cavolata
-
L'elaborazione dovresti farla cosi:
[php]
<?php
// Se il modulo viene inviato...
if(isset($_POST['registra']))
{// Dati Inviati dal modulo $user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default '' $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default '' $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default '' $provincia = (isset($_POST['provincia'])) ? trim($_POST['provincia']) : ''; // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) { $user = addslashes($user); $pass = addslashes($pass); $mail = addslashes($mail); $provincia = addslashes($provincia); } // Controllo il Nome Utente if(strlen($user) < 4 || strlen($user) > 12) die('Nome Utente troppo corto, o troppo lungo'); // Controllo la Password elseif(strlen($pass) < 4 || strlen($pass) > 12) die('Password troppo corta, o troppo lunga'); // Controllo l'email elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail)) die('Email non valida'); // Controllo il nome utente non sia già occupato elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1) die('Nome Utente non disponibile'); // Controllo l'indirizzo email non sia già registrato elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1) die('Questo indirizzo email risulta già registrato ad un altro utente'); // Registrazione dell'utente nel database else { // Crypt della password per garantire una miglior sicurezza $pass = md5($pass); // Genero una stringa casuale di Attivazione $attivazione = ''; for($x=1; $x<=32; $x++) $attivazione.=rand(0,9); $attivazione = md5($attivazione); $message = 'Per attivare il Suo account deve visitare il seguente link:<br><a href="http://www.sito.ext/attivazione.php?code='.$attivazione.'">Attiva account</a>'; // Header dell'email, per madnarla in formato html $headers = "From: NomeSito <[email protected]>\r\n"; $headers .= "Reply-To: [email protected]\r\n"; $headers .= "Return-Path: [email protected]\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; // Invio L'email mail($mail, 'Registrazione Tutorial TheDarkITA', $message, $headers); // Query per l'inserimento dell'utente nel database $strSQL = "INSERT INTO utenti (user,pass,mail,attivazione, provincia)"; $strSQL .= "VALUES('$user', '$pass', '$mail', '$attivazione', '$provincia')"; mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error()); // Reindirizzo l'utente ad una pagina di conferma della registrazione header('Location: registrato.php'); exit; }
}
?>
[/php]Bisognerebbe fare dei controlli sull'input provincia, in modo da evitare che si possano inviare valori nn validi...
-
Ecco, non ci crederai ma ho provato anche prima che mi crvevi tu ad inserire le stesse righe di codice, ma comunque non mi inserisce i dati nel database, l'unica cosa che penso è che da qualche parte forse sbaglio i nomi delle variabili o dell tabelle nel database..
Ti riscrivo tutti i nomi che ho dato alle tabelle del database, e le righe di codice aggiunte, cosi vediamo se ho magari invertito qualche variabile..Nel database ho tabella 'utenti' con campi (in ordine così): id, user, pass, mail, residenza, attivazione.
Nella tabella 'province' ho i campi: id, nome.Nel codice PHP, nei "Dati inviati dal modulo" ho aggiunto:
[php] $residenza = (isset($_POST['residenza'])) ? trim($_POST['residenza']) : '';[/php]Nel filtro di dati magic_quotes ho aggiunto:
[php]$residenza = addslashes($residenza);[/php]Nella query per l'inserimento utente nel database ho messo:
[php]
$strSQL = "INSERT INTO utenti (user,pass,mail,residenza,attivazione)";
$strSQL .= "VALUES('$user', '$pass', '$mail', '$residenza', '$attivazione')";
mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error());[/php]E per finire nel campo form tra input name mail e **registra **ho aggiunto:
<select name="provincia">
<?php
$strQuery="select * from province";
$elenco=mysql_query($strQuery) or die(mysql_error());
while($row_province=mysql_fetch_array($elenco)){
$id=$row_province[id];
$nome=$row_province[nome];
echo '<option value="'.$id.'">'.$nome.'</option>';
}
?>
</select>Con uesti pezzi aggiunti nella form di registrazione il menu a tendina ha dentro tutte le provincie, quindi la parte del fom dovrebbe essere corretta, ma non inserisce il dato nella tabella utenti, il campo rsidenza mi rimane vuoto..
Quando avete tempo se potete vedere se ho sbagliato qualche richiamo o sbagliato variabili vi faccio santi
Intanto io continuo con le prove, magari di mattina il cervello lavora meglio..EDIT: Altra cosa, mettendo <select> tra input mail e registra, nella form non mi fa più vedere il tasto "Registrati", come mai?
-
Ciao gigi991,
Il nome del select è provincia non residenza...
Per il tasto registrati, avrai fatto qualche errore nella sintassi html...
Posta tutta la pagina, se non riesci a risolvere, altrimenti cosi posso capire ben poco....
-
Eccola..
[php]
<?php
// Se il modulo viene inviato...
if(isset($_POST['registra']))
{// Dati Inviati dal modulo $user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default '' $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default '' $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default '' $residenza = (isset($_POST['province'])) ? trim($_POST['province']) : ''; // Metto nella variabile 'residenza' il dato inviato dal modulo, se non viene inviato dò di default '' // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) { $user = addslashes($user); $pass = addslashes($pass); $mail = addslashes($mail); $provincia = addslashes($residenza); } // Controllo il Nome Utente if(strlen($user) < 6 || strlen($user) > 12) die('Nome Utente troppo corto, o troppo lungo'); // Controllo la Password elseif(strlen($pass) < 6 || strlen($pass) > 12) die('Password troppo corta, o troppo lunga'); // Controllo l'email elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail)) die('Email non valida'); // Controllo il nome utente non sia già occupato elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1) die('Nome Utente non disponibile'); // Controllo l'indirizzo email non sia già registrato elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1) die('Questo indirizzo email risulta già registrato ad un altro utente'); // Registrazione dell'utente nel database else { // Crypt della password per garantire una miglior sicurezza $pass = md5($pass); // Genero una stringa casuale di Attivazione $attivazione = ''; for($x=1; $x<=32; $x++) $attivazione.=rand(0,9); $attivazione = md5($attivazione); $subject = "Attivazione al sito"; $message = 'Per attivare il Suo account deve visitare il seguente link:<br><a href="sito/attivazione.php?code='.$attivazione.'">Attiva account</a>'; // Header dell'email, per madnarla in formato html $headers = "From: NomeSito <miamail>\r\n"; $headers .= "Reply-To: miamail\r\n"; $headers .= "Return-Path: miamail\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; // Invio L'email mail($mail, $subject, $message, $headers); // Query per l'inserimento dell'utente nel database $strSQL = "INSERT INTO utenti (user,pass,mail,residenza,attivazione)"; $strSQL .= "VALUES('$user', '$pass', '$mail', '$provincia', '$attivazione')"; mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error()); // Reindirizzo l'utente ad una pagina di conferma della registrazione header('Location: registrato.php'); exit; }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<head>
<title>Registrazione</title>
</head>
<body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
<input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
<input name="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br />
<select name="province">
<?php
$strQuery="select * from province";
$elenco=mysql_query($strQuery) or die(mysql_error());
while($row_province=mysql_fetch_array($elenco)){
$id=$row_province[id];
$nome=$row_province[nome];
echo '<option value="'.$id.'">'.$nome.'</option>';
}
?>
</select>
<input name="registra" type="submit" value="Registrati" /><br />
</form>
</body>
</html>
[/php]
-
Hai cambiato il nome una marea di volte...
Prova cosi:
[php]
<?php
// Se il modulo viene inviato...
if(isset($_POST['registra']))
{// Dati Inviati dal modulo $user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default '' $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default '' $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default '' $provincia = (isset($_POST['province'])) ? trim($_POST['province']) : ''; // Metto nella variabile 'residenza' il dato inviato dal modulo, se non viene inviato dò di default '' // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) { $user = addslashes($user); $pass = addslashes($pass); $mail = addslashes($mail); $provincia = addslashes($residenza); } // Controllo il Nome Utente if(strlen($user) < 6 || strlen($user) > 12) die('Nome Utente troppo corto, o troppo lungo'); // Controllo la Password elseif(strlen($pass) < 6 || strlen($pass) > 12) die('Password troppo corta, o troppo lunga'); // Controllo l'email elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail)) die('Email non valida'); // Controllo il nome utente non sia già occupato elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1) die('Nome Utente non disponibile'); // Controllo l'indirizzo email non sia già registrato elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1) die('Questo indirizzo email risulta già registrato ad un altro utente'); // Registrazione dell'utente nel database else { // Crypt della password per garantire una miglior sicurezza $pass = md5($pass); // Genero una stringa casuale di Attivazione $attivazione = ''; for($x=1; $x<=32; $x++) $attivazione.=rand(0,9); $attivazione = md5($attivazione); $subject = "Attivazione al sito"; $message = 'Per attivare il Suo account deve visitare il seguente link:<br><a href="sito/attivazione.php?code='.$attivazione.'">Attiva account</a>'; // Header dell'email, per madnarla in formato html $headers = "From: NomeSito <miamail>\r\n"; $headers .= "Reply-To: miamail\r\n"; $headers .= "Return-Path: miamail\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; // Invio L'email mail($mail, $subject, $message, $headers); // Query per l'inserimento dell'utente nel database $strSQL = "INSERT INTO utenti (user,pass,mail,residenza,attivazione)"; $strSQL .= "VALUES('$user', '$pass', '$mail', '$provincia', '$attivazione')"; mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error()); // Reindirizzo l'utente ad una pagina di conferma della registrazione header('Location: registrato.php'); exit; }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<head>
<title>Registrazione</title>
</head>
<body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
<input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
<input name="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br />
<select name="province">
<?php
$strQuery="select * from province";
$elenco=mysql_query($strQuery) or die(mysql_error());
while($row_province=mysql_fetch_array($elenco)){
$id=$row_province[id];
$nome=$row_province[nome];
echo '<option value="'.$id.'">'.$nome.'</option>';
}
?>
</select>
<input name="registra" type="submit" value="Registrati" /><br />
</form>
</body>
</html>
[/php]
-
Ora va, dipendeva tutto da un errore banale, facendo copia incolla vari mi sono perso il pezzo dove includo il file di configurazione, messo quello è tutto perfetto, è tornato anche il tasto registrati.. x
Alla prossima... cagnata
-
Salve!
Dilemma di oggi:
Nella pagina registrati.php, all'invio del form vengo rendirizzato alla pagina registrato.php, è possibile eliminare la pagina registato.php e scrivere un breve codice html direttamente nella pagina registrati.php che si vede dopo l'invio del form?
in pratica penso si dovrebbe sostituire il comando
header('Location: registrato.php');
Purtroppo ora non ho i miei file perchè sto su un altro pc e non posso fare prove.
Chiedo: Se metto al posto di header un echo ottengo quello che voglio fare? Se è sbagliato illuminatemi please..
-
Ciao Gigi991,
Devi sostuire
[php]
header('Location: registrato.php');
exit;
[/php]con
[php]
echo 'codice html 1';
exit;
[/php]Se il codice è breve puoi anche usare die, che è come la funzione exit, ma ti permette di inviare un output.
[php]
die('codice html 1');
[/php]
-
Ottimo, e senti nella pagina di attivazione nel body c'è:
<?=($attivato == 1) ? 'Account Attivato' : 'Errore, link non valido' ?>
se metto:
<?php =($attivato == 1) ? 'Account Attivato' : 'Errore, link non valido' ?>
è la stessa cosa?
Che cambia a mettere <? e <?php ? Qual'è meglio usare?
-
Ciao Giggi991,
La sintassi <?=$variabile?> è un abbreviativo di <?php echo $variabile; ?>
<? è uno short tag, però il file di configurazione di php(php.ini) potrebbe disabilitare gli short tag, e invece di essere elaborati te li ritrovi mostrati a schermo.
-
In questo caso quindi è così:
[php]<?php ($attivato == 1) ? echo 'Account Attivato' : echo 'Errore, link non valido' ?>[/php]
?