Visualizzazione dei risultati da 1 a 7 su 7

Discussione: mysql - auto_increment

  1. #1

    mysql - auto_increment

    Salve a tutti, ho questo script per visualizzare gli utenti online... vorrei aggiungere una colonna al database chiamata "id_utente" assegnato a ogni utente collegato che si auto incrementa (1, 2 , 3,... ma a causa delle scarse conoscenze in php e mysql (vado a tentativi :P) non riesco a farlo qualcuno sa darmi una dritta?
    Questo script mi serviva per individuare i primi 5 utenti online e farli vedere una foto, mentre dagli id_utente 6 in poi volevo farne vedere un'altra...

    ecco lo script:
    Codice PHP:
    tabella che conterrà le informazioni degli utenti:

    CREATE TABLE useronline (
        timestamp int(15) DEFAULT '0' NOT NULL,
        ip varchar(40) NOT NULL,
        file varchar(100) NOT NULL,
        PRIMARY KEY (timestamp),
        KEY ip (ip),
        KEY file (file));

     Fatto ciò andiamo a creare il codice php che mostrerà le informazioni lette dal database:

    <?php 
    //si connette al db
    mysql_connect("localhost","","");
    mysql_select_db(""); 
    //Tempo di inattivita del contatore
    $timeoutseconds 300;
    $timestamp=time();
    $timeout=$timestamp-$timeoutseconds
    //ip dell'utente
    $ip $_SERVER['REMOTE_ADDR']; 
    //url della pagina
    $self $_SERVER['PHP_SELF']; 
    //Verifica se l'ip dell'utente è ancora presente
    $verif mysql_query ("SELECT ip FROM useronline WHERE ip = '$ip'");
    $evo mysql_num_rows($verif); 
    //se è presente aggiorna
    if ($evo "0"){
    mysql_query("UPDATE useronline SET file='$self',timestamp='$timestamp' WHERE ip='$ip'") or die("Database UPDATE Error"); 
    //se è nuovo inserisci
    } else {
    mysql_query("INSERT INTO useronline VALUES ('$timestamp','$ip','$self')") or die("Database INSERT Error");

    //cancella ogni $timeoutseconds le persone online
    mysql_query("DELETE FROM useronline WHERE timestamp<$timeout") or die("Database DELETE Error");
    $result=mysql_query("SELECT DISTINCT ip FROM useronline WHERE file='$self'") or die("Database SELECT Error"); 
    //mostra i risultati
    $user  =mysql_num_rows($result);                                                                             
    if (
    $user==1) {echo"$user on line";} else {echo"$user on line";} 
    ?>
    io ho provato a creare la tabella così:
    Codice PHP:
    CREATE TABLE useronline (
        
    timestamp int(15) DEFAULT '0' NOT NULL,
        
    ip varchar(40NOT NULL,
        
    file varchar(100NOT NULL,
        
    utente_id int(4unsigned NOT NULL auto_increment,
        
    PRIMARY KEY (timestamp),
        
    KEY ip (ip),
        
    KEY file (file),
        
    KEY utente_id (utente_id)); 
    ma lo script mi restiuisce l'errore Database INSERT Error

  2. #2
    Prova così, ho dato una lettura molto veloce però

    CREATE TABLE useronline (
    timestamp int(15) DEFAULT '0' NOT NULL,
    ip varchar(40) NOT NULL,
    file varchar(100) NOT NULL,
    utente_id int(4) unsigned NOT NULL auto_increment,
    PRIMARY KEY (timestamp),
    KEY ip (ip),
    KEY file (file)
    KEY utente_id (utente_id));

  3. #3
    Originariamente inviato da Samleo
    Prova così, ho dato una lettura molto veloce però

    CREATE TABLE useronline (
    timestamp int(15) DEFAULT '0' NOT NULL,
    ip varchar(40) NOT NULL,
    file varchar(100) NOT NULL,
    utente_id int(4) unsigned NOT NULL auto_increment,
    PRIMARY KEY (timestamp),
    KEY ip (ip),
    KEY file (file)
    KEY utente_id (utente_id));
    grazie per il suggerimento, cmq ho provato a inserirlo nel database e da lo stesso errore "Database INSERT Error.
    è per caso qualche problema con il codice php se si aggiunge una tabella? (purtroppo sono ancora un pò neofita in questo campo )

  4. #4
    E certo l'errore non è nella tabella errata, ma nell'insert

    Codice PHP:
    INSERT INTO useronline VALUES ('$timestamp','$ip','$self'
    Che devi modificare in

    Codice PHP:
    INSERT INTO useronline (timestamp,ip,fileVALUES ('$timestamp','$ip','$self'
    Quando fai una insert, e inserisci SOLO ALCUNI campi della tabella, devi specificare quali campi stai inserendo. Nel caso in cui inserisci TUTTU i campi della tabella invece non hai bisogno di dichiararli


  5. #5
    Grazie 1000 Samleo ora funziona perfettamente!

  6. #6

  7. #7
    risolto un problema e se ne presenta un'altro

    siccome vorrei identificare gli utenti online da gli id, mi serve che quest'ultimo riparta a contare sempre da 1 o 0 se liberi (nel mio caso necessito che gli utenti online con id da 1 a 5 vedano una cosa, mentre gli utenti da 6 a 10 ne vedano un'altra...) lo script che ho postato qui sopra elimina dal database gli utenti non attivi da un tot di tempo. nonostante non ci siano più id attivi (la tabella rimane vuota) o che se ne liberino alcuni l'auto_increment (ora o capito che non si "resetta" automaticamenteo utilizza gli id più bassi liberi) continua sempre da l'id più alto creato in precedenza.

    ho provato con il comando :

    ALTER TABLE `useronline` AUTO_INCREMENT =1

    ma continua sempre a contare dal numero più alto raggiunto in precedenza...

    ecco il problema esposto "graficamente"
    1.arrivano 3 utenti e vengono inseriti nel database.
    timestamp | ip | file | utente_id
    1242071196 | 76.**.124.*** | /ind/online/id.php | 1
    1242071196 | 77.**.124.*** | /ind/online/id.php | 2
    1242071196 | 78.**.124.*** | /ind/online/id.php | 3
    2. l'id 1 e 2 continuano a visitare le pagine del sito, quindi rimangono attivi e non vengono eliminati dallo script (vedi script) mentre scaduto il tempo la riga corrispondente all'id 2 viene eliminata.
    timestamp | ip | file | utente_id
    1242071196 | 76.**.124.*** | /ind/online/id.php | 1
    1242071196 | 78.**.124.*** | /ind/online/id.php | 3
    3. arriva un nuovo visitatore e viene inserito nel database. a quest'ultimo viene assegnato l'id 4 mentre io vorrei che utilizzasse il primo disponibile a partire dall'1
    timestamp | ip | file | utente_id
    1242071196 | 76.**.124.*** | /ind/online/id.php | 1
    1242071196 | 78.**.124.*** | /ind/online/id.php | 3
    1242071196 | 76.**.124.123 | /ind/online/id.php | 4
    4. invece vorrei
    timestamp | ip | file | utente_id
    1242071196 | 76.**.124.*** | /ind/online/id.php | 1
    1242071196 | 76.**.124.123 | /ind/online/id.php | 2
    1242071196 | 78.**.124.*** | /ind/online/id.php | 3
    suggerimenti?

    EDIT: tutto questo sistema mi servirebbe per utilizzare questo codice:
    Codice PHP:
    <?php
    print ("Speriamo bene...

    "
    );
    $num $_GET['id'];
    if(
    $num >= && $num <= 20)
    echo 
    "Sei uno dei primi 20 fortunati";
    elseif(
    $num >= 21 && $num <= 36) {
    echo 
    "seconda opzione...";
    } elseif(
    $num >= 52 && $num <= 70) {
    echo 
    "terza opzione...";
    } else
    echo 
    "sei arrivato troppo tardi! attualmente tutti gli slot sono occupati";
    ?>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.