salve a tutti! mi sono appena iscritto e sto seguendo il corso di php
io volevo creare una classifica autoggiornabile come questa http://pesol.forumcommunity.net/
Un mio amico ha iniziato a crearmela ma non ci riesce,fino ad ora ha creato questo:
Io sò solo le basi minime del php,c'è qualcuno di voi in grado di finirla?
codice:
<u>index.php</u>
<?php
require_once("config.php");
require_once("functions.php");
mysql_connect($db_server, $db_user, $db_pass) or die("Connessione database fallita");
mysql_select_db($db_name) or die("Selezione database fallita");
$op = $_GET['op'];
$my_ip = $_SERVER['REMOTE_ADDR'];
$my_nick = "";
$my_id = -1;
clean_online();
$sql = "SELECT u.ID_UTENTE, u.nick FROM tblUtente AS u, tblSession AS s ";
$sql .= "WHERE u.ID_UTENTE=s.nick AND s.ip='$my_ip'";
$result = mysql_query($sql);
if ($row = mysql_fetch_assoc($result))
{
$my_id = $row['ID_UTENTE'];
$my_nick = $row['nick'];
$data = date("U");
$sql = "UPDATE tblSession SET data=$data WHERE nick=$my_id";
mysql_query($sql);
}
echo "
<html>
<head>
<title>CLASSIFICA</title>
<meta http-equiv=\"Cache-Control\" CONTENT=\"no-cache\">
</head>
<body>
";
echo "
<a href=\"index.php\">Home</a> - ";
if ($my_id != -1)
{
echo "
<a href=\"index.php?op=logout\">Logout</a> - <a href=\"index.php?op=view\">View</a> - <a href=\"index.php?op=submit\">Inserisci risultato</a>
Benvenuto $my_nick
";
}
else
{
echo "
<a href=\"index.php?op=login\">Login</a> - <a href=\"index.php?op=register\">Register</a>
";
}
echo "</p>";
switch($op)
{
case "":
home();
break;
case "register":
register();
break;
case "login":
login();
break;
case "logout":
logout();
break;
case "submit":
submit();
break;
case "view":
view();
break;
case "activate":
activate();
break;
default:
error();
break;
}
?>
</body>
</html>
<?php
mysql_close();
?>
[/SPOILER]
<u>config.php</u>
[SPOILER]
codice:
<?php
define("ERR_DEFAULT", 0);
define("ERR_VIEW", 1);
define("ERR_LOGIN", 2);
define("ERR_LOGOUT", 3);
define("ERR_SUBMIT", 4);
define("ERR_CODE", 5);
define("ERR_CODE2", 6);
define("ERR_ACTIVATE", 7);
$db_server = "localhost";
$db_user = "";
$db_pass = "";
$db_name = "";
?>
[/SPOILER]
<u>functions.php</u>
[SPOILER]
codice:
<?php
function home()
{
echo "
HOME PAGE</p>";
}
function view()
{
global $login, $my_ip, $my_id, $my_nick;
$sql = "SELECT * FROM tblUtente WHERE attivo=1 ORDER BY punti DESC, nick";
$result = mysql_query($sql);
echo "
<table border=\"1\">
<tr><th>#</th><th>Nick</th><th>Punti</th></tr>
";
$c = 0;
while ($row = mysql_fetch_assoc($result))
{
$c++;
echo "
<tr><td>$c</td><td>{$row['nick']}</td><td>{$row['punti']}</td></tr>
";
}
echo "
</table>
";
}
function register()
{
global $my_ip;
$errors = -1;
$nick = $_POST['nick'];
$pass = $_POST['pass'];
$pass2 = $_POST['pass2'];
$mail = $_POST['mail'];
if ($_POST['submit'] == 1)
{
$errors = 0;
$sql = "SELECT * FROM tblUtente WHERE nick='$nick'";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0)
{
$errors = 1;
echo "<span style=\"color:red\">Username già esistente</span>
";
}
if (!check_mail($mail))
{
$errors = 1;
echo "<span style=\"color:red\">Email non corretta</span>
";
}
if ($pass != $pass2)
{
$errors = 1;
echo "<span style=\"color:red\">Password non corrispondenti</span>
";
}
}
if (!$errors)
{
$passc = sha1($pass);
$data = date("U");
$sql = "INSERT INTO tblUtente(nick, password, email, data, ip) ";
$sql .= "VALUES('$nick', '$passc', '$mail', $data, '$my_ip')";
mysql_query($sql);
$sql = "SELECT * FROM tblUtente WHERE data=$data";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$code = "\${$row['ID_UTENTE']}\$" . sha1($nick . $data);
$dest = $mail;
$oggetto = "Attivazione utente";
$messaggio = "Clicca link per attivare utente\n\n";
$messaggio .= "http://easyprog.altervista.org/pgw_classifica/index.php?op=activate&code=$code";
mail($dest, $oggetto, $messaggio);
echo "Registrazione effettuata con successo
";
echo "Seguire istruzioni nella mail per attivare utente.";
}
else
{
echo "
<form action=\"\" method=\"post\">
<input type=\"hidden\" name=\"submit\" value=\"1\">
Nick: <input type=\"text\" name=\"nick\">
Password: <input type=\"password\" name=\"pass\">
Password2: <input type=\"password\" name=\"pass2\">
Email: <input type=\"text\" name=\"mail\">
<input type=\"submit\" value=\"Registrati\">
</form>
";
}
}
function login()
{
global $login, $my_ip, $my_id;
if ($my_id != -1)
{
error(ERR_LOGIN);
return;
}
$errors = -1;
$nick = $_POST['nick'];
$pass = $_POST['pass'];
$passc = sha1($pass);
if ($_POST['submit'] == 1)
{
$errors = 0;
$sql = "SELECT * FROM tblUtente WHERE nick='$nick' AND password='$passc' AND attivo=1";
$result = mysql_query($sql);
if (mysql_num_rows($result) == 0)
{
$errors = 1;
echo "<span style=\"color:red\">Username e/o password errati</span>
";
}
}
if (!$errors)
{
$data = date("U");
$sql = "SELECT ID_UTENTE FROM tblUtente WHERE nick='$nick'";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$idnick = $row['ID_UTENTE'];
$sql = "INSERT INTO tblSession(nick, data, ip) ";
$sql .= "VALUES('$idnick', $data, '$my_ip')";
mysql_query($sql);
echo "
Login effettuato con successo
Ora sarai reindirizzato alla home page tra 5 secondi oppure clicca <a href=\"index.php\">qui</a>.
<script language=\"javascript\">
setInterval(\"location.href = 'index.php'\", 5000);
</script>
";
}
else
{
echo "
<form action=\"\" method=\"post\">
<input type=\"hidden\" name=\"submit\" value=\"1\">
Nick: <input type=\"text\" name=\"nick\">
Password: <input type=\"password\" name=\"pass\">
<input type=\"submit\" value=\"Login\">
</form>
";
}
}
function logout()
{
global $login, $my_ip, $my_id;
if ($my_id == -1)
{
error(ERR_LOGOUT);
return;
}
$sql = "DELETE FROM tblSession WHERE ip='$my_ip'";
mysql_query($sql);
echo "
Logout effettuato con successo
Ora sarai reindirizzato alla home page tra 5 secondi oppure clicca <a href=\"index.php\">qui</a>.
<script language=\"javascript\">
setInterval(\"location.href = 'index.php'\", 5000);
</script>
";
}
function submit()
{
global $login, $my_ip, $my_id, $my_nick;
if ($my_id == -1)
{
error(ERR_SUBMIT);
return;
}
$nick1 = $_POST['nick1'];
$nick2 = $_POST['nick2'];
$ris = $_POST['ris'];
if ($_POST['submit'] == 1)
{
$data = date("U");
$sql = "INSERT INTO tblRisultato(nick1, nick2, ris, data) ";
$sql .= "VALUES($nick1, $nick2, $ris, $data)";
mysql_query($sql);
$sql = "UPDATE tblUtente SET punti=punti+$ris WHERE ID_UTENTE=$nick1";
mysql_query($sql);
$sql = "UPDATE tblUtente SET punti=punti-$ris WHERE ID_UTENTE=$nick2";
mysql_query($sql);
echo "ok";
}
else
{
echo "
<form action=\"\" method=\"post\">
<input type=\"hidden\" name=\"submit\" value=\"1\">
Nick1: <select name=\"nick1\">
<option selected=\"selected\" value=\"$my_id\">$my_nick</option>
</select>
Nick2: <select name=\"nick2\">
";
$sql = "SELECT * FROM tblUtente WHERE ID_UTENTE<>'{$my_id}' AND attivo=1 ORDER BY nick";
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result))
{
echo "<option value=\"{$row['ID_UTENTE']}\">{$row['nick']}</option>";
}
echo "
</select>
Risultato: <select name=\"ris\">
<option selected=\"selected\" value=\"2\">2 - 0</option>
<option value=\"1\">2 - 1</option>
<option value=\"-1\">1 - 2</option>
<option value=\"-2\">0 - 2</option>
</select>
<input type=\"submit\" value=\"Invia\">
</form>
";
}
}
function activate()
{
$code = $_GET['code'];
$dol = strpos($code, '$', 1);
if ($dol === false)
{
error(ERR_CODE);
return;
}
$id = substr($code, 1, $dol - 1);
$cript = substr($code, $dol + 1);
$sql = "SELECT * FROM tblUtente WHERE ID_UTENTE=$id";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
if ($row['attivo'] != 0)
{
error(ERR_CODE2);
return;
}
$cript2 = sha1($row['nick'] . $row['data']);
if ($cript != $cript2)
{
error(ERR_CODE);
return;
}
$sql = "UPDATE tblUtente SET attivo=1 WHERE ID_UTENTE=$id";
mysql_query($sql);
}
function error($type = ERR_DEFAULT)
{
echo "
ERRORE: ";
switch($type)
{
case ERR_VIEW:
case ERR_LOGOUT:
case ERR_SUBMIT:
echo "login non effettuato";
break;
case ERR_LOGIN:
echo "login già effettuato";
break;
case ERR_CODE:
echo "codice non valido";
break;
case ERR_CODE2:
echo "partita già registrata";
break;
}
echo "</p>";
}
function check_mail($email)
{
if (preg_match("/[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}/", $email))
return true;
return false;
}
function clean_online()
{
$data = date("U") - 15*60; // 15 min * 60 sec
$sql = "DELETE FROM tblSession WHERE data<$data";
mysql_query($sql);
}
?>
[/SPOILER]
Sono necessarie tre tabelle:
[SPOILER]
codice:
CREATE TABLE `tblRisultato` (
`ID_RISULTATO` int(11) NOT NULL auto_increment,
`nick1` int(11) NOT NULL default '0',
`nick2` int(11) NOT NULL default '0',
`ris` int(11) NOT NULL default '0',
`data` int(11) NOT NULL default '0',
`data2` int(11) NOT NULL default '0',
PRIMARY KEY (`ID_RISULTATO`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE `tblSession` (
`ID_SESSION` int(11) NOT NULL auto_increment,
`nick` int(11) NOT NULL default '0',
`data` int(11) NOT NULL default '0',
`ip` varchar(20) NOT NULL default '',
PRIMARY KEY (`ID_SESSION`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE `tblUtente` (
`ID_UTENTE` int(11) NOT NULL auto_increment,
`nick` varchar(50) NOT NULL default '',
`password` varchar(50) NOT NULL default '',
`email` varchar(255) NOT NULL default '',
`attivo` int(11) NOT NULL default '0',
`data` int(11) NOT NULL default '0',
`ip` varchar(20) NOT NULL default '',
`punti` int(11) NOT NULL default '0',
PRIMARY KEY (`ID_UTENTE`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;