Ultima modifica da un moderatore:
[font='Georgia, Times New Roman, Times, serif']Indice
• Introduzione
• Preparazione al lavoro
• Form Login
• Pagina delle Registrazioni
• Pagina con Classifica Personaggi
• Servizio di ticket (Via Database)
Pagina con Classifica Personaggi
Per prima cosa, in directory "A:/", creiamo un nuovo file che chiamiamo "rank.php". Come al solito ci incolliamo tutto l'html del nostro sito.
Dopodichè, così come abbiamo fatto per la pagina delle registrazione per bloccare gli utenti loggati, facciamo lo stesso per gli utenti non loggati e dunque all'inizio della pagina mettiamo:
Spiego brevemente in quanto è già stato spiegato: Inizia la sessione, se esistono in sessione dati nel campo UserID ed il numero di caratteri assegnatovi è maggiore di 1, leggi funzione "loggato()", altrimenti leggi funzione "loggante()".
Per la funzione "loggante()" rimanda all'index, per la funzione "loggato()" invece visualizza l'html che segue. Ovviamente ricordiamoci che c'è una macro aperta (+1).
Ok, ora passiamo alla parte che riguarda la nostra classifica. A differenza degli altri casi esaminati fin'ora, qui non è un form che da poi vita ad un eseguzione php, ma il contrario, quindi tra i tag <head> (preferibilmente), iniziamo a delineare una classifica dei personaggi:
per prima cosa connettiamoci al database player che è quello che ci interessa:
Dunque definiamo una query per prelevare dei dati sotto forma di forms da player:
Spieghiamo bene questa query così magari chi non se ne intende di SQL impara qualcosuccia:
"mysql_query" penso sia chiaro a tutti, semplicemente esegue una query; SELECT significa "seleziona" e fa proprio questo: seleziona dai forms "*" (* sta per tutto, se per esempio ci fosse stato level, avrebbe selezionato tutti i valori nel field level), "FROM player" dalla tabella "player", "WHERE level>'0'" solo i forms che nel field "level" hanno un valore numerico maggiore di 0.
Questa è una query semplice, potrebbe essere ancora più semplice per esempio così: "SELECT level FROM player" e selezionerebbe tutti i livelli di tutti i personaggi.
Vediamo poi che ci sono altre diciture a seguito di "level>'0'" e sono:
"ORDER BY level,exp DESC" che dà l'ordine di ordinare in ordine decrescente con prima priorità i valori "level" e con seconda priorità i valori "exp".
"LIMIT 51" seleziona i primi 51 forms.
Ora andiamo avanti con il nostro php. Definiamo due stringhe con valori numerici per dare un "senso" alla nostra macro:
$num varia a seconda dei forms che stiamo esaminando (che ci giungono da "$query") e da lui, vedremo che dipenderà anche $i.
While, che incontriamo per la prima volta in questa guida, significa "Mentre" ed è spesso usato per far partire una macro ad ogni condizione (es. While ( 1 = 1 ) {}). Non è comunque il nostro caso, diciamo che in questo caso funziona in questo modo: "Mentre ci sono ancora forms da esaminare...".
Ora abbiamo prima cosa creato una variabile "array", con più campi, cioè che a seconda del modo in cui viene richiamata, restituisce un valore diverso.
Ecco appunto che ora la richiamiamo per alcune caratteristiche: name, level, exp, id and job.
Vi chiederete (se state capendo qualcosa) che ci fa questo "id", ed ecco che ora inizia la parte un po' complicata!
Trovare il regno del personaggio! Infatti il regno del personaggio non è in "player»player" ma in "player»player_index" e quindi andiamo a ricercare gli altri forms con lo stesso id da quest'altra tabella:
Ora vi spiego un po' com'è fatto un form della tabella player_index: come chiave primaria abbiamo l'id dell'account, per esempio 1. Ora come possiamo vedere a quell'account corrisponde un solo regno e 4 personaggi.
Il campo che indica qual'è il regno è chiamato "empire", i campi che collegano a quell'account i personaggi sono "pid1", "pid2", "pid3" e "pid4".
Quindi come potete vedere abbiamo selezionato tutte le caratteristiche di un form da Player_index dove in uno dei "pid" compare l'id del personaggio che stiamo esaminando.
Ora abbiamo definito "row2" come array e ne prendiamo il field "empire" come variabile "empire".
Ok, abbiamo tutti gli elementi necessari per la nostra classifica, o quasi!
Infatti nel caso in cui noi volessimo far comparire delle immagini nella nostra classifica, come ad esempio le bandierine dei regni o le faccine delle razze dei personaggi, dobbiamo aggiungere queste immagini in: "A:/images/rank/". Dobbiamo però seguire un certo ordine in modo da facilitare il compito alla macchina.
Parlo del nome delle immagini: chiameremo infatti "kingdom_1.png" (Bandierina Rossi), "kingdom_2.png" (Bandierina Gialli) e "kingdom_3.png" (Bandierina Blu); per quanto riguarda invece le razze, chiameremo "job_0.png" (Immagine Guerriero Uomo), "job_1.png" (Immagine Ninja Donna), "job_2.png" (Immagine Sura Uomo), "job_3.png" (Immagine Shamana Donna), "job_4.png" (Immagine Guerriero Donna), "job_5.png" (Immagine Ninja Uomo), "job_6.png" (Immagine Sura Donna), "job_7.png" (Immagine Shamano Uomo).
Avremo quindi in "A:/images/rank/", questa list:
# kingdom_1.png
# kingdom_2.png
# kingdom_3.png
# job_0.png
# job_1.png
# job_2.png
# job_3.png
# job_4.png
# job_5.png
# job_6.png
# job_7.png
Proseguiamo quindi con la classifica chiudendo il php
E riaprendolo li dove (nell'html) vogliamo mettere la nostra tabella contenente la classifica dei personaggi:
Come potrete con piacere notare, la classifica continuerà anche la tabella, in dipendenza da $i grazie a quell' "$i++".
[/font]
• Introduzione
• Preparazione al lavoro
• Form Login
• Pagina delle Registrazioni
• Pagina con Classifica Personaggi
• Servizio di ticket (Via Database)
Pagina con Classifica Personaggi
Per prima cosa, in directory "A:/", creiamo un nuovo file che chiamiamo "rank.php". Come al solito ci incolliamo tutto l'html del nostro sito.
Dopodichè, così come abbiamo fatto per la pagina delle registrazione per bloccare gli utenti loggati, facciamo lo stesso per gli utenti non loggati e dunque all'inizio della pagina mettiamo:
PHP:
<?
session_start();
if(isset($_SESSION["UserID"]) && strlen($_SESSION["UserID"])>1){
loggato();
}else{
loggante();
}
function loggante(){
header(location:index.php);
}
function loggato(){
?>
Per la funzione "loggante()" rimanda all'index, per la funzione "loggato()" invece visualizza l'html che segue. Ovviamente ricordiamoci che c'è una macro aperta (+1).
Ok, ora passiamo alla parte che riguarda la nostra classifica. A differenza degli altri casi esaminati fin'ora, qui non è un form che da poi vita ad un eseguzione php, ma il contrario, quindi tra i tag <head> (preferibilmente), iniziamo a delineare una classifica dei personaggi:
per prima cosa connettiamoci al database player che è quello che ci interessa:
PHP:
mysql_connect("Ip", "User", "Password");
mysql_select_db(player);
PHP:
$query = mysql_query("SELECT * FROM player WHERE level>'0' ORDER BY level,exp DESC LIMIT 51");
"mysql_query" penso sia chiaro a tutti, semplicemente esegue una query; SELECT significa "seleziona" e fa proprio questo: seleziona dai forms "*" (* sta per tutto, se per esempio ci fosse stato level, avrebbe selezionato tutti i valori nel field level), "FROM player" dalla tabella "player", "WHERE level>'0'" solo i forms che nel field "level" hanno un valore numerico maggiore di 0.
Questa è una query semplice, potrebbe essere ancora più semplice per esempio così: "SELECT level FROM player" e selezionerebbe tutti i livelli di tutti i personaggi.
Vediamo poi che ci sono altre diciture a seguito di "level>'0'" e sono:
"ORDER BY level,exp DESC" che dà l'ordine di ordinare in ordine decrescente con prima priorità i valori "level" e con seconda priorità i valori "exp".
"LIMIT 51" seleziona i primi 51 forms.
Ora andiamo avanti con il nostro php. Definiamo due stringhe con valori numerici per dare un "senso" alla nostra macro:
PHP:
$num = mysql_num_rows($query);
$i=1;
PHP:
while ($i < $num) {
PHP:
$form = mysql_fetch_array($query);
$nome = $form['name'];
$livello = $form['level'];
$id = $form['id'];
$exp = $form['exp'];
$razza = $form['job'];
Ecco appunto che ora la richiamiamo per alcune caratteristiche: name, level, exp, id and job.
Vi chiederete (se state capendo qualcosa) che ci fa questo "id", ed ecco che ora inizia la parte un po' complicata!
Trovare il regno del personaggio! Infatti il regno del personaggio non è in "player»player" ma in "player»player_index" e quindi andiamo a ricercare gli altri forms con lo stesso id da quest'altra tabella:
PHP:
$query2 = mysql_query("SELECT * FROM player_index WHERE pid1='$id' OR WHERE pid2='$id' OR WHERE pid3='$id' OR WHERE pid4='$id'");
Il campo che indica qual'è il regno è chiamato "empire", i campi che collegano a quell'account i personaggi sono "pid1", "pid2", "pid3" e "pid4".
Quindi come potete vedere abbiamo selezionato tutte le caratteristiche di un form da Player_index dove in uno dei "pid" compare l'id del personaggio che stiamo esaminando.
PHP:
$row2 = mysql_fetch_array($query2);
$empire = $row2['empire'];
Ok, abbiamo tutti gli elementi necessari per la nostra classifica, o quasi!
Infatti nel caso in cui noi volessimo far comparire delle immagini nella nostra classifica, come ad esempio le bandierine dei regni o le faccine delle razze dei personaggi, dobbiamo aggiungere queste immagini in: "A:/images/rank/". Dobbiamo però seguire un certo ordine in modo da facilitare il compito alla macchina.
Parlo del nome delle immagini: chiameremo infatti "kingdom_1.png" (Bandierina Rossi), "kingdom_2.png" (Bandierina Gialli) e "kingdom_3.png" (Bandierina Blu); per quanto riguarda invece le razze, chiameremo "job_0.png" (Immagine Guerriero Uomo), "job_1.png" (Immagine Ninja Donna), "job_2.png" (Immagine Sura Uomo), "job_3.png" (Immagine Shamana Donna), "job_4.png" (Immagine Guerriero Donna), "job_5.png" (Immagine Ninja Uomo), "job_6.png" (Immagine Sura Donna), "job_7.png" (Immagine Shamano Uomo).
Avremo quindi in "A:/images/rank/", questa list:
# kingdom_1.png
# kingdom_2.png
# kingdom_3.png
# job_0.png
# job_1.png
# job_2.png
# job_3.png
# job_4.png
# job_5.png
# job_6.png
# job_7.png
Proseguiamo quindi con la classifica chiudendo il php
PHP:
?>
PHP:
<?
echo "
<table>
<thead>
<tr>
<th>Posizione</th>
<th>Nome del personaggio</th>
<th>Livello</th>
<th>Esperienza</th>
<th>Razza</th>
<th>Regno</th>
</tr>
</thead>
<tr>
<td>$i</td>
<td>$nome</td>
<td>$livello</td>
<td>$exp</td>
<td><img src='./images/rank/job_$razza.png'></td>
<td><img src='./images/rank/kingdom_$empire.png'></td>
</tr>
</table>
";
$i++;
}
}
[/font]