phpBB Italia chiude!
phpBB Italia ringrazia tutti gli utenti che hanno dato fiducia al nostro progetto per ben 9 anni, e che, grazie al grande lavoro fatto da tutto lo Staff (rigorosamente a titolo gratuito), hanno portato il portale a diventare il principale punto di riferimento italiano alla piattaforma phpBB.

Purtroppo, causa motivi personali, non ho più modo di gestirlo e portarlo avanti. Il forum viene ora posto in uno stato di sola lettura, nonché un archivio storico per permettere a chiunque di fruire di tutte le discussioni trattate.

Il nuovo portale di assistenza per l'Italia di phpBB diventa phpBB-Store.it, cui ringrazio per aver deciso di portare avanti questo grande progetto.

Grazie ancora,
Carlo - Amministratore di phpBB Italia

nomi random senza ripetizione

Area di discussione relativa al linguaggio di programmazione web più conosciuto. Il forum è dedicato anche a MySQL, la piattaforma di database più utilizzata con il PHP.
Domenico2015
Utente
Utente
Messaggi: 14
Iscritto il: 16/07/2015, 16:08
Sesso: Maschio
Server: Windows
Database: MySQL

Re: nomi random senza ripetizione

Messaggio da Domenico2015 » 29/08/2015, 15:08

ciao, l'estrazione deve avvenire ad ogni click del mouse. il risultato deve comparire nella stessa pagina web. per me andrebbe benissimo una lista casuale che parte dall'inizio fino alla fine..diciamo che dovrebbe essere tipo una tombola virtuale ma con nomi invece di numeri. spero di essere stato chiaro. Grazie di tutti.

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: nomi random senza ripetizione

Messaggio da Micogian » 02/09/2015, 10:29

Per prima cosa va creata una tabella di nome "lista_nomi" nel database.
La tabella contiene 3 campi: id, nome, sel.
Il campo id deve essere AUTOINCREMENT, il campo sel è impostato a 0, viene sostituito con 1 se il record viene estratto.
Per creare la tabella apri il database con phpmyadmin, selezioni SQL e inserisci questo codice:

Codice: Seleziona tutto

CREATE TABLE IF NOT EXISTS `lista_nomi` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` text COLLATE utf8_unicode_ci NOT NULL,
  `sel` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
La tabella va aggiornata con i nomi, il campo id è automatico e il campo sel è impostato a 0.

Il file php che estrae il nome a caso è questo:

Codice: Seleziona tutto

<?php
// CONNESSIONE AL DATABASE
global $db_name, $db_host, $db_user, $db_pwd ;
$db_name     = 'nome_database' ;
$db_host     = 'nome_dominio' ;
$db_user     = 'user' ;
$db_pwd    = 'password' ;

if (!@mysql_connect($db_host,$db_user,$db_pwd)) exit('<p>Impossibile connettersi al server del database b5 in questo momento.</p>');
if (!@mysql_select_db($db_name)) exit('<p>Impossibile connettersi al database in questo momento.</p>');

// Seleziona la lista dei records della tabella lista_nomi
$sql = "SELECT *
        FROM lista_nomi
        ORDER BY id";
    $i = 1;
    $lista = '';
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result))
    {
        $id[$i]        = $row['id'];
        $nome[$i]    = $row['nome'];
        $sel[$i]    = $row['sel'];
        //crea una lista dei nomi non estratti
        if ($sel[$i] == '0' )
        {    
            if ($lista == '')
            {
            $lista = $id[$i] ;
            }else {
            $lista = $lista . "," . $id[$i] ;
            }
        }        
    ++$i ;
    }
    echo "Lista dei non estratti: " . $lista . "<br />";

    $lista1 = explode(",", $lista);

    //$numbers = range(1, 10);
    shuffle($lista1);
    echo "id e nome estratto: " . $lista1[0] . " - " . $nome[$lista1[0]] . "<br />";
    
    // Aggiorna il campo sel del nome selezionato
    $sql = "UPDATE lista_nomi
        SET sel = '1'
        WHERE id = $lista1[0]" ;
        if (!@mysql_query($sql))  
        {
        echo '<p>errore  nella procedura di aggiornamento: ' . mysql_error() . '</p>' ;
        }

if ($lista1[1] == '')
{    
// Ripristina i valori iniziali della tabella lista_nomi
$sql1 = "UPDATE lista_nomi
        SET sel = 0" ;
        if (!@mysql_query($sql1))  
        {
        echo '<p>errore  nella procedura di azzeramento: ' . mysql_error() . '</p>' ;
        }
}
?>
La procedura provvede a leggere la tabella "lista_nomi", crea una lista de nomi non estratti e la mette in ordine random.
Al primo record estratto viene sostituito il valore 0 del campo sel con 1 e la volta successiva non rientra nella lista.
Quando le estrazioni sono arrivate all'ultimo record i valori del campo "sel" vengono ripristinati a 0 e la sequenza ricomincia.

Questo è il codice php necessario per l'estrazione, poi va realizzata la pagina che deve contenere i risultati.

Una DEMO del risultato ottenuto (su una lista di 10 record) si può vedere qui
aggiornare la pagina per estrarre il record successivo.

Avatar utente
brunino
Moderatore
Moderatore
Messaggi: 2819
Iscritto il: 12/01/2013, 16:35
Sesso: Maschio
Versione: 3.1.2
Server: UNIX/Linux
PHP: php 5.3
Database: mysql
Località: Toscana, Firenze
Contatta:

Re: R: nomi random senza ripetizione

Messaggio da brunino » 02/09/2015, 10:48

Potevi usare semplicemente nella query "ORDER BY RAND()"...

Inviato dal mio GT-S5360 con Tapatalk 2
E' sempre gradito un grazie

Creo estensioni per phpBB 3.1 su misura: contattami via MP.
Mie Estensioni: Top Ten Topics | Ban List | Topic List
Visita il mio forum di test e sviluppo stili e estensioni phpBB 3.1

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: R: nomi random senza ripetizione

Messaggio da Micogian » 02/09/2015, 11:16

brunino ha scritto:Potevi usare semplicemente nella query "ORDER BY RAND()"...

Inviato dal mio GT-S5360 con Tapatalk 2
In PHP le strade per ottenere un risultato sono spesso diverse.
Ho preferito cosi perchè ho bisogno di tenere una lista progressiva di tutti i records presenti in tabella, mentre i non estratti aggiornano la lista random, questo nel caso di debba creare un maschera che contenga i numeri da 1 a 100 che vengono sostituiti dal nome estratto.

In pratica si puo inserire in una tabella di 10 righe per 10 colonne i valori da 1 a 100 che vengono sostituiti da $nome[1]....$nome[100] per i records estratti (quelli che hanno il valore 1 nel campo "sel").
Si ottiene una tabella che evidenzia tutti i nomi estratti in precedenza mentre l'utimo estratto può essere di colore diverso.

Domenico2015
Utente
Utente
Messaggi: 14
Iscritto il: 16/07/2015, 16:08
Sesso: Maschio
Server: Windows
Database: MySQL

Re: nomi random senza ripetizione

Messaggio da Domenico2015 » 11/09/2015, 11:18

Ciao brunino grazie per la risposta, mi è stata utilissima :)

Rispondi

Torna a “PHP - MySQL”

Chi c’è in linea

Visitano il forum: Google [Bot] e 130 ospiti