Error message

  • Notice: Undefined property: XMLTag::$places in Box->parseTimeSeriesXml() (line 388 of /var/www/sebeto-drupal/sites/all/modules/ccmmma_weather/MeteoBox/box.inc).
  • Notice: Trying to get property of non-object in Box->parseTimeSeriesXml() (line 388 of /var/www/sebeto-drupal/sites/all/modules/ccmmma_weather/MeteoBox/box.inc).
  • Notice: Trying to get property of non-object in Box->parseTimeSeriesXml() (line 388 of /var/www/sebeto-drupal/sites/all/modules/ccmmma_weather/MeteoBox/box.inc).

[TW] GameTrade

 

Un bundle è una combinazione di più prodotti messi in vendita ad un prezzo particolarmente vantaggioso. Alcuni siti permettono di acquistare bundle di videogames (solo su PC) fornendo le chiavi di attivazione per ogni singolo gioco da riscattare nei vari negozi online (Steam, Origin, Uplay) e scaricare successivamente sul proprio PC.

 

 

Spesso accade di acquistare bundle che contengono uno o più giochi già posseduti o acquistati in precedenza e ritrovarsi con delle chiavi di attivazione da non poter utilizzare. Cosa fare in questi casi?

C'è GameTrade che permette all’utente, una volta registrato, di inserire le chiavi di attivazione in eccedenza e di scambiarle con altri giocatori, creare una wishlist di giochi, visualizzare le chiavi disponibili e contattare il proprietario per scambiarle.


 

Indice

  1. Gestione Grafica – Barra di navigazione
  2. Gestione Grafica – Colonne home page
  3. JavaScript – Controllo dei form
  4. Database (Modello E-R)
  5. Trovare le chiavi in base alla wishlist
  6. Inserimento di una nuova chiave
  7. Sviluppi Futuri

Gestione Grafica - Barra di navigazione

Il CSS (Cascading Style Sheets) ci permette di definire la formattazione di documenti HTML. La pseudoclasse :hover associato all’identificatore (o ID) navigazione permette di definire il comportamento dinamico della barra di navigazione.

file .css

#navigazione{
  padding-top:30px;
   padding-left: 50px;
}
#navigazione li {
    float: left;
}
#navigazione li a {
     display: block;
     line-height: 40px;
     padding-left: 20px;
     padding-right: 20px;
     text-decoration: none;
     color: #00B4CC;
     font-family: 'Roboto', sans-serif;
     font-size: 24px;
     border:1px solid #00B4CC;

} #navigazione li a:hover {
     background-color:#00B4CC;
     color:#343838;
}

file .html

<!--Collego il foglio di stile esterno all’HTML-->

<link href="css/style.css" rel="stylesheet" type="text/css">

[…]

<!-- Richiamo  l’identificatore nella pagina -->

<ul id="navigazione">

     <li><a href="index.php">Home</a></li>

     <li><a href="tuttigiochi.php">Giochi</a></li>

 […]

 </ul>

Risultato finale della pagina

 

 

Gestione Grafica - Colonne home page

Alla classe .col-singola associamo proprietà sia per il font che per l’elemento.

file .css

.col-singola {
	width: 460px;
	height: 400px;
	float: left;
	margin-left: 10px;
	margin-right: 10px;
	background-color:#00B4CC;
	margin-top: 20px;
	color:#ffffff;
	font-size: 23px;
	font-family: 'Roboto', sans-serif;
}

Sfruttando la possibilità del metodo get di inserire URL con parametri opportuni all’interno di una pagina HTML, creiamo un collegamento diretto dall’hompage al database tramite link.

file .html

<div class="col-singola">

<a href=«…/getgioco.php?nomeg=metal gear solid v"><img src="immagini giochi/mgsv.jpg"></a>

<br>

 Portando il franchise di METAL GEAR in una nuova era, grazie…

</div>

Risultato finale:

 

JavaScript – Controllo dei form

La function contollo permette di controllare i campi del form nel login.

Definiamo gli script:

<script language="JavaScript">
function controllo()
{
  var usr2 = document.modulo.usr.value;
  var pwd = document.modulo.pwd.value;
  if( (usr2 == "") || (pwd == "") )
    {
      alert("Campi inseriti non correttamente");
      return ;
    }
    document.modulo.action = "login.php";
    document.modulo.submit();
}
function registrazione()
{
  document.modulo.action = "formregistrazione.php";
  document.modulo.submit();
}
</script>

Associamo la rispettiva function al bottone:

<form method=post name="modulo">

<p>Nome utente:

<input type="text" size=30 name=usr>

Password:

<input type="text" size=30 name=pwd>

</p><br><br>

<input class="bottone" type="button"

   value="Log In" onClick="controllo()">

<input class="bottone" type="button"

    value="Registrati" onClick="registrazione()">

</form>

Database (Modello E-R)

Il database permette di memorizzare la wishlist e le chiavi possedute da ogni utente con le relative informazioni del gioco.

•L'entità Gioco non rappresenta la singola copia ma solo il titolo e le sue caratteristiche.
•L’attributo Chiave dell’associazione Possiede è la chiave primaria in quanto la chiave di attivazione è univoca per qualsiasi gioco.
 
 

Trovare le chiavi in base alla wishlist

Killer application del sito. In base ai giochi inseriti nel tempo nella propria wishlist il sito all’aperture della pagina Per te permette di visualizzare tutte le chiavi disponibili nel database e i contatti del proprietario. Lo script PHP comunica con il database ed esegue la query per l’utente connesso in quella sessione.

// prendo lo username dalla sessione

$user=$_SESSION['username'];

[...]

// creo la query per creare  la corrispondenza tra wishlist e quelle disponibili

$query="select possiede.fk_gioco, possiede.fk_utente

  from desidera join possiede on possiede.fk_gioco = desidera.fk_gioco

  where desidera.fk_utente=\"".$user."\";";

// eseguo la query

$ris = mysql_query($query)

[...]

// creo la tabella del risultato  prendendo la mail del proprietario

$temp= $row['fk_gioco'];

print("<td> $temp </td>");

$temp=$row['fk_utente'];

print("<td> $temp </td>");

$query2="select email from utente where nome_utente=\"".$temp."\";";

$ris2=mysql_query($query2);

$row2=mysql_fetch_array($ris2);

$mail=$row2['email'];

print ("<td> <a href=\"mailto:\"\"$mail\">Contatta</a></td>");

Inserimento di una nuova chiave

Lo script PHP comunica con il database ed esegue la query per l’utente connesso in quel momento.

// prendo i dati dalla sessione e dal form

$usr=$_SESSION['username'];

$nome=$_POST['nome'];  $tipo=$_POST['tipo'];  $pegi=$_POST['pegi'];  $chiave=$_POST['chiave'];

//controllo che il gioco è già presente nella tabella gioco altrimenti  crea una nuova istanza

$query="select * from gioco where nome_gioco=\"".$nome."\";";

$ris = mysql_query($query)  or die("Query non valida: " . mysql_error());

$num_righe=mysql_num_rows($ris);

if($num_righe==0)  {

  $query="insert into gioco values(\"".$nome."\",\"".$tipo."\",\"".$pegi."\");";

  $ris = mysql_query($query)

   or die("Query non valida: " . mysql_error());

}

//controllo che non è già presente la chiave

$query="select * from possiede where chiave=\"".$chiave."\";";

$ris = mysql_query($query)  or die("Query non valida: " . mysql_error());

$num_righe=mysql_num_rows($ris);

if($num_righe>0) […]

//controllo che non è nella wishslist

$query="select * from desidera where fk_gioco=\"".$nome."\" and fk_utente=\"".$usr."\";";

$ris = mysql_query($query)  or die("Query non valida: " . mysql_error());

$num_righe=mysql_num_rows($ris);

if($num_righe>0) […]

$query="insert into possiede values(\"".$usr."\",\"".$nome."\",\"".$chiave."\");";

$ris = mysql_query($query)  or die("Query non valida: " . mysql_error());

 if($ris)

 print("<h1>Inserimento avvenuto con successo!</h1>");

Sviluppi Futuri

•Integrazione con i social network (Facebook, Twitter)
•Chat interna al sito per la comunicazione
•Migliorare la ricerca
•Implementare Isotope e Masonry

Marco Coseglia
Mirko Sirleto