Script PHP e modifica che non lo fa funzionare più...

Ho fatto uno script per un giochino idiota di quelli che si trovano in rete... il codice è questo:

<?php 
// Connection with database
$db_host = 'localhost';
$db_name = '*********';
$db_user = '**********';
$db_pass = '********';
$dbcon = mysql_connect($db_host, $db_user, $db_pass);
// Verifica della connessione e selezione del database
if (!$dbcon) 
{
   die('Errore connessione : ' . mysql_error());
}
$db_select = mysql_select_db($db_name, $dbcon);
if (!$db_select) 
{
   die ('Errore selezione database : ' . mysql_error());
}
if (isset($_COOKIE['z3rolabs_soul']))
{
   echo ('
   <div align="center">
  <p class="title"><strong>Tu possiedi una sola anima e, tuo malgrado, è stata già rubata da: ' . $_COOKIE['z3rolabs_soul_user'].'</strong>                        </p>
  <p class="title"><img src="images/Satan.jpg" alt=""></p>
  </div>');

}
else
{
   $query = "SELECT * FROM soul WHERE username='$_GET[user]'";
   $result = mysql_query($query, $dbcon);
   $row = mysql_fetch_array($result);
   if ($row['ban'] == "1")
   {
      echo ('<div align="center" class="title">Utente bannato</div>');
      
   }
   else
   {
      $souls = $row['souls']+1;
      $ip = $_SERVER['REMOTE_ADDR'];
      $query = "UPDATE soul SET souls = $souls WHERE username = '$_GET[user]' LIMIT 1";
      $result = mysql_query($query, $dbcon);
      setcookie("z3rolabs_soul","$souls",time()+365*24*60*60);
      setcookie("z3rolabs_soul_user","$_GET[user]",time()+365*24*60*60);
      echo ('
      <div align="center">
     <p class="title"><strong>' . $row['username'] . ' Ha rubato la tua anima!</strong>                        </p>
     <p class="title"><img src="images/Satan.jpg" alt=""></p>
   </div>');
   }

}
if ($action == "register")
{
   if ($send == "true")
   {
      if (trim($user_name == ""))
      {
         echo ('<div align="center" class="title">I campi devono essere riempiti! <br> Clicca <a href="soul.php?action=register">Qui</a></div>');
         
      }
      else
      {
         $user_name = htmlspecialchars($user_name);
         if (!get_magic_quotes_gpc()) 
         {
            $user_name = addslashes($_POST['user_name']);
         }
         else 
         {
            $user_name = $_POST['user_name'];
         }
         $query = "SELECT username from soul WHERE username = '$user_name'"; 
         $risultato = mysql_query($query); 
         $num_righe = mysql_num_rows($risultato); 
         if($num_righe)
         {
            echo ('<div align="center" class="title">Questo username è già stato inserito.<br> Clicca <a href="soul.php?action=register">Qui</a></div>');
         exit;
         }
         $query = "INSERT INTO soul (username) VALUES ('$user_name')"; 
         if (mysql_query($query, $dbcon))
         {
            echo ('<div align="center" class="title">Grazie per esserti registrato!<br>Il link per cominciare a rubare anime è questo: http://z3rolabs.altervista.org/soul.php?user='.$user_name.'</a></div>');
            exit;
         }
      }
   }
   else
   {
      echo ('<div align="center" class="title">
      <form name="form1" method="post" action="soul.php?action=register&send=true">
         Username: 
         <input name="user_name" type="text" maxlength="32">
         <input type="submit" name="Submit" value="invia">
         <br>
      </form>
      </div>');
   }
}
if ($action == "top")
{
   $query = "SELECT * from soul ORDER BY souls DESC LIMIT 0,10";
   $result = mysql_query($query, $dbcon);
   echo ('<div align="center">
      <span class="title"><p>Classifica Top 10:</p></span>
   <table width="500" border="0" cellspacing="0" cellpadding="0">
    <tr class="title">
      <th scope="col">Posizione</th>
      <th scope="col">&nbsp;</th>
      <th scope="col">Username</th>
      <th scope="col">&nbsp;</th>
      <th scope="col"># Anime </th>
    </tr>');
    $posizione = 1;
   while ($row = mysql_fetch_array($result))
   {
      echo "
      <tr class=\"text\">
        <th scope=\"col\">$posizione</th>
        <th scope=\"col\">&nbsp;</th>
        <th scope=\"col\">$row[username]</th>
        <th scope=\"col\">&nbsp;</th>
        <th scope=\"col\">$row[souls]</th>
      </tr>";
      $posizione = $posizione + 1;
   }
   echo ('</table></div>');
   
}
?>

per renderlo più sicuro avevo pensato di fare un controllo dell'ip... ovvero quando "un'anima viene rubata" io salvo l'ip (in un campo VARCHAR)... se uno cancella i cookie prova a farsi rubare l'anima nuovamente subentra il controllo dell'ip se l'ip dell'utente risulta uguale all'ultimo inserito nel database l'inserimento non è valido e l'utente viene bannato di conseguenza.

Per fare tutto questo ho aggiunto le seguenti righe di codice (questo è il primo Else che si incontra, dopo la verifica dell'esistenza del cookie):

else
{
   $query = "SELECT * FROM soul WHERE username='$_GET[user]'";
   $result = mysql_query($query, $dbcon);
   $row = mysql_fetch_array($result);
   $ip = $_SERVER['REMOTE_ADDR'];
   if ($row['ban'] == "1")
   {
      echo ('<div align="center" class="title">Utente bannato</div>');
      exit;
   }
   if ($row['ip'] == "$ip")
   {
      echo ('<div align="center" class="title">Odio i cheater... Utente bannato...</div>');
      $query = "UPDATE soul SET ban = 1 WHERE username = '$_GET[user]' LIMIT 1";
      $result = mysql_query($query, $dbcon);
      exit;
   }
   else
   {
      $souls = $row['souls']+1;
      $ip = $_SERVER['REMOTE_ADDR'];
      $query = "UPDATE soul SET souls = $souls, ip = $ip WHERE username = '$_GET[user]' LIMIT 1";
      $result = mysql_query($query, $dbcon);
      setcookie("z3rolabs_soul","$souls",time()+365*24*60*60);
      setcookie("z3rolabs_soul_user","$_GET[user]",time()+365*24*60*60);
      echo ('
      <div align="center">
     <p class="title"><strong>' . $row['username'] . ' Ha rubato la tua anima!</strong>                        </p>
     <p class="title"><img src="images/Satan.jpg" alt=""></p>
   </div>');
   }

}

non riesco a capire perchè non funziona lo script; in particolare:

1- Non viene aggiornato l'ip

2- Non viene aggiornato $souls

sapete aiutarmi?

Grazie

p.s buon anno nuovo a tutti  ;)

inviato 10 anni fa
z3ro
z3ro
1
X 0 X

Bisognerebbe spulciarsi tutto il codice per capire dov'è il problema... :o

Comunque ti do qualche consiglio per venirne a capo:

1) Poiché il tuo script fa uso di cookies ti conviene mettere all'inizio un print_r($_COOKIES) in modo da sapere sempre quali dati ti arrivano da li.

2) Siccome hai molti "IF" per capire come mai durante lo script, il flusso prenda una determinata strada ti basta far precedere ogni if con degli echo che ti mostrino il valore delle variabili confrontate o testate.

Facendo così scoprirai che una determinata variabile ha in un punto un valore inatteso. Ti basterà quindi tracciare i cambiamenti di questa variabile fino a trovare il punto in cui c'è l'errore.

3) se non hai trovato ancora l'errore allora probsbilmente dipende da una istruzione all'interno dei blocchi IF - ELSE ma a questo punto avrai già individuato il blocco in questione. Ti basterà quindi verificare l'esito di ogni singola istruzione del blocco.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

c'erano un paio di problemi che sono riuscito a risolvere controllando se le query davano errore utilizzando questo sistema:

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

il problema stava che la variabile per gli ip era di 12 caratteri e io non avevo contato i possibili punti tra le terzine dei numeri  ;D

il secondo stava in questa query:

$query = "UPDATE soul SET souls = $souls, ip = $ip WHERE username = '$_GET[user]' LIMIT 1";

corretta è così:

$query = "UPDATE soul SET souls = '$souls', ip = '$ip' WHERE username = '$_GET[user]' LIMIT 1";

Ciao a tutti e buon anno  :bye:

risposto 10 anni fa
z3ro
z3ro
1
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda