• User

    Controllo ip e confrondo con database MYSQL - URGENTE

    Salve a tutti, sto mettendo su un sistema per bloccare dei determinati ip collegandosi al db che si chiama ip e andando nella tabella ips e confrontando l'ip che si ha con tutti i campi hostname ma non ci sto riuscendo. Questo è il codice per controllare se l'ip è uguale, cosa sbaglio?

    <?php 
    
    $ip=$_SERVER['REMOTE_ADDR']; 
    
    
    $db_host="localhost"; 
    $db_name="ips"; 
    $db_user="root"; 
    $db_password="***"; 
    
    
    $db=mysql_connect($db_host,$db_user,$db_password); 
    if ($db==false) die("Errore nel collegamento a MySQL!"); 
    
    
    mysql_select_db($db_name,$db) 
    or die("Errore nella selezione del database!"); 
    
    
    $query="SELECT ip FROM ips WHERE hostname=$ip LIMIT 1";
    $ris=mysql_query($query,$db);
    if (ris==false) die("Errore nell'invio della query (verifica ip)!");
    
    
    if ($row=mysql_fetch_field($ris))
     die("Non puoi entrare!");
    
    
    
    
    <?php 
    
    
    mysql_close($db); 
    
    
    ?>
    

  • ModSenior

    Ciao,
    prova cosi:

    <?php 
    $ip=$_SERVER['REMOTE_ADDR'];
    $db_host="localhost";
    $db_name="ips"; $db_user="root"; $db_password="***";
    $db=mysql_connect($db_host,$db_user,$db_password); 
    
    if ($db==false) die("Errore nel collegamento a MySQL!");
    mysql_select_db($db_name,$db) or die("Errore nella selezione del database!");
    
    $query="SELECT ip FROM ips WHERE hostname='$ip' LIMIT 1";
    $ris=mysql_query($query,$db);
    
    if (ris==false)
    die("Errore nell'invio della query (verifica ip)!");
    
    if (mysql_num_rows($ris) > 0)
    die("Non puoi entrare!");
    
    
    <?php mysql_close($db); ?>
    

  • User

    Ho provato il tuo codice ma non mi mostra nessun messaggio :S

    P.S. Se vuoi puoi anche cambiare totalmente la struttura, forse è meglio


  • ModSenior

    Se l'ip non è tra i bloccati ovviamente non mostra nulla, per quello hai una pagina bianca. Il codice è molto basilare, non c'è molto che può essere cambiato.


  • User

    Ma io ho provato con il mio stesso ip ma non dice nulla


  • ModSenior

    Stai provando in locale o online?


  • User

    Ho creato il file in un VPS con dominio e ho messo nel db sia il mio ip sia quello del VPS accedendo da entrambi non mi compare nulla


  • ModSenior

    Mi sembra strano, puoi mettere un attimo questo codice e incollarmi cosa mostra? In modo da avere dei dati per capire cosa succede:

    
    <?php 
    $ip=$_SERVER['REMOTE_ADDR'];
    $db_host="localhost";
    $db_name="ips"; $db_user="root"; $db_password="***";
    $db=mysql_connect($db_host,$db_user,$db_password); 
    
    
    if ($db==false) die("Errore nel collegamento a MySQL!");
    mysql_select_db($db_name,$db) or die("Errore nella selezione del database!");
    
    
    $query="SELECT ip FROM ips WHERE hostname='$ip' LIMIT 1";
    $ris=mysql_query($query,$db);
    
    
    if (ris==false)
    die("Errore nell'invio della query (verifica ip)!");
    
    
    if (mysql_num_rows($ris) > 0)
    die("Non puoi entrare!");
    
    
    
    
    echo 'IP: '.$ip.'<br>';
    $query = mysql_query(""SELECT ip FROM ips");
    echo '<pre>';
    while($row = mysql_fetch_array($query))
    {
    	var_dump($row);
    }
    echo '</pre>';
    <?php mysql_close($db); ?>
    
    

  • User

    Niente, non mi mostra nulla nello schermo... ma non è che devo dare dei permessi al file?


  • ModSenior

    No se è vuoto è un semplice errore di sintassi e lo script non viene eseguito.
    Tu il codice lo usi esattamente cosi come l'ho postato io senza modifiche vero? Credevo ci fossero dei pezzi intermedi che avevi tagliato, ma credo proprio non sia cosi.

    Prova cosi:

    
    <?php 
    $ip=$_SERVER['REMOTE_ADDR'];
    $db_host="localhost";
    $db_name="ips"; $db_user="root"; $db_password="***";
    $db=mysql_connect($db_host,$db_user,$db_password); 
    
    
    
    
    if ($db==false) die("Errore nel collegamento a MySQL!");
    mysql_select_db($db_name,$db) or die("Errore nella selezione del database!");
    
    
    
    
    $query="SELECT ip FROM ips WHERE hostname='$ip' LIMIT 1";
    $ris=mysql_query($query,$db);
    
    
    
    
    if (ris==false)
    die("Errore nell'invio della query (verifica ip)!");
    
    
    
    
    if (mysql_num_rows($ris) > 0)
    die("Non puoi entrare!");
    
    
    
    
    
    
    
    
    echo 'IP: '.$ip.'<br>';
    $query = mysql_query(""SELECT ip FROM ips");
    echo '<pre>';
    while($row = mysql_fetch_array($query))
    {
    	var_dump($row);
    }
    echo '</pre>';
    mysql_close($db);
    
    

  • User

    Io inserisco solo quel codice nella pagina php modificando la password del db e non ci sono pezzi intermedi...però non mostra nulla, schermo bianco


  • ModSenior

    Dovresti modificare la configurazione di php e abilitare la visualizzazione degli errori, che sarà sicuramente disattivata.
    Ho provato il codice in locale e c'era un " di troppo per cui l'errore era quello:

    <?php $ip=$_SERVER['REMOTE_ADDR'];
    $db_host="localhost";
    $db_name="ips"; $db_user="root"; $db_password="***";
    $db=mysql_connect($db_host,$db_user,$db_password); 
    
    
    
    
    
    
    
    
    if ($db==false) die("Errore nel collegamento a MySQL!");
    mysql_select_db($db_name,$db) or die("Errore nella selezione del database!");
    
    
    
    
    
    
    
    
    $query="SELECT ip FROM ips WHERE hostname='$ip' LIMIT 1";
    $ris=mysql_query($query,$db);
    
    
    
    
    
    
    
    
    if (ris==false)
    die("Errore nell'invio della query (verifica ip)!");
    
    
    
    
    
    
    
    
    if (mysql_num_rows($ris) > 0)
    die("Non puoi entrare!");
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    echo 'IP: '.$ip.'<br>';
    $query = mysql_query("SELECT ip FROM ips");
    echo '<pre>';
    while($row = mysql_fetch_array($query))
    {
    	var_dump($row);
    }
    echo '</pre>';
    mysql_close($db);
    
    

  • User

    Ho messo il codice tuo e adesso compaiono una serie di scritte:

    IP: 173.245.49.122

    array(2) { [0]=> string(10) "1558095733" ["ip"]=> string(10) "1558095733"}array(2) { [0]=> string(10) "1558095733" ["ip"]=> string(10) "1558095733"}P.S. L'IP che compare è sbagliato, non è quello

    Edit--

    Se salvo quell'ip nel database mi compare la scritta "Non puoi entrare". Ma come mai quell'ip? L'ip del vps è un altro e inizia con 92...


  • ModSenior

    Il problema non è lo script che funziona correttamente, hai le idee un pò confuse su come funziona tutto il discorso, cerco di spiegarti nella maniera più semplice possibile:

    $_SERVER['REMOTE_ADDR'] contiene l'indirizzo IP di chi visita la pagina, per cui se lo visiti tu conterrà il tuo IP, se lo visito io conterrà il mio IP.L'IP del vps non viene preso minimamente in considerazione, se ti serve l'IP del vps dovresti poterlo ottenere usando $_SERVER['SERVER_ADDR']


  • User

    Io vorrei evitare l'accesso di alcuni spammer nel mio sito quindi in questo caso quale devo usare per avere un qualcosa di efficiente e duraturo? $_SERVER['REMOTE_ADDR'] o $_SERVER['SERVER_ADDR']?

    Poi c'è un codice per inserire nel database l'ip, il browser, il giorno e l'ora di chi visita una determinata pagina?


  • ModSenior

    Devi utilizzare $_SERVER['REMOTE_ADDR'] come stai già facendo.
    Puoi fare in modo di avere nel database tutti quei dati, ma considera che potrebbero essere inseriti moltissimi dati se le pagine vengono visualizzate da molti visitatori/bot, e potresti avere problemi.


  • User

    La pagina in cui dovrò utilizzare quel codice sarà una pagina interna e disponibile solo ai registrati quindi nessun bot potrà entrare... ho scoperto il perchè di quell'ip "strano", è di cloudflare...
    Comunque, che codice devo usare per memorizzare i dati? Non sono molto bravo a riguardo


  • ModSenior

    Basta un semplice query INSERT, ma ovviamente devi creare la tabella prima, ad esempio:

    
    
    mysql_query("INSERT INTO tabella(ip, ora)VALUES('".$_SERVER['REMOTE_ADDR']."', ".time().")");
    
    

  • User

    Sto usando questo codice:

    <?php$db_host="localhost";
    $db_name="ips"; $db_user="root"; $db_password="****";
    $db=mysql_connect($db_host,$db_user,$db_password); 
    
    
    
    
    mysql_query("INSERT INTO ip(hostname, ora)VALUES('".$_SERVER['REMOTE_ADDR']."', ".time().")"); ?>
    

    ma se vado nel database che si chiama ips e nella tabella ips non vedo aggiunto nessun ip.


  • ModSenior

    Devi creare una tabella apposita, con la struttura necessaria