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

nomi random senza ripetizione

Messaggio da Domenico2015 » 27/08/2015, 19:56

Buongiorno a tutti del forum. Vorrei gentilmente un'info: è possibile estrarre in maniera random dei nomi presenti in un file txt o mysql?...per me andrebbe bene qualsiasi alternativa. Inserendo i nomi in un array l'estrazione random avviene però compaiono molte volte i nomi già estratti..mi occorre che una volta estratto il nome questo non si ripeta più. Grazie in anticipo.

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 » 27/08/2015, 22:22

Ammettiamo che tu abbia 100 nomi e debba estrarne 10 alla volta (se poi i numeri sono diversi ti adegui).
I nomi sono variabili del tipo:

$nome[1] = "Tizio";
$nome[2] = "Caio";
$nome[3] = "Sempronio";
..........

Crei una lista di numeri random da 1 a 100, prendi i primi 10 che corrispondono alle variabili con quel numero.
La volta successiva prendi i successivi 10 numeri della lista e così via.
In questo modo avrai tutti i 100 nomi random ma non doppi.

Avatar utente
Sir Xiradorn
Grafico
Grafico
Messaggi: 1659
Iscritto il: 11/08/2009, 12:41
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.6.15
Database: MariaDB 10.1.9
Località: Lontano....
Contatta:

Re: nomi random senza ripetizione

Messaggio da Sir Xiradorn » 27/08/2015, 22:28

Puoi anche fare un ciclo while che estrae un nome random fino anche il tuo contatore non estrae dieci nomi diversi e degli if per escludere se sono uguali
Sir Xiradorn
Immagine
~ XDojo - Xiradorn Lab Division - xiradorn.it ~
~ GitHub - XiradornLab ~

Immagine
Stargate - phpbb 3.0.x || 3.1.x || 3.2.x

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 » 28/08/2015, 17:16

Ciao micogian, grazie mille per la risposta, soprattutto tempestiva...purtroppo non so come mettere in pratica ciò che hai scritto...per caso puoi inviarmi uno gia' pronto? sempre se non hai problemi. Grazie mille.

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 » 28/08/2015, 17:45

Con qualche informazione in più sarebbe più semplice.
Ad esempio quanti sono i nomi e se devo estrarli da una lista creata appositamente o dall'elenco degli utenti, quanti nomi vanno estratti e con quale frequenza.

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 » 28/08/2015, 18:43

La lista ha 100 nomi, sono scritti uno sotto l'altro in un file di testo, ma andrebbe bene anche se fossero scritti in un database mysql... i nomi devono essere estratti una alla volta, tipo come la tombola, alla fine devono uscire tutti i nomi, purché nell'estrazione non escano quelli gia' estratti. Grazie.

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 » 28/08/2015, 20:01

Non basta, mi serve sapere quando viwnw fatta l'estrazione, come e dove viene visualizzato il risultato e con che frequenza deve uscire il nuovo nome.
Si potrebbe creare una lista random una volta per tutte, in pratica la sequenza viene stabilita all'inizio e la visualizzazione avviene una alla volta fino a completamento del ciclo.
Ma bisogna sapere quando avviene la visualizzazione del nome successivo, perchè l'estrazione avviene una volta sola, all'inizio. La procedura va studiata in base a quanto sopra.
potrebbe andar bene anche una tabella mysql conm 3 campi, un ID, il nome e un campo per inserire un valore numerico (0-1) che stabilisce se il nome è uscito o meno.

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

Rispondi

Torna a “PHP - MySQL”

Chi c’è in linea

Visitano il forum: Nessuno e 23 ospiti