[PHP] Estrazione random con nomi presi dal db

Max61

Utente Attivo
2 Mar 2014
740
4
18
Salve, eccomi di nuovo a chiedere aiuto al forum.
Grazie all'aiuto del forum ho fatto una pagina per l'estrazione casuale di persone, funziona perfettamente, ma vorrei migliorarlo, mi spiego:
adesso scrivo i nomi delle persone all'interno della pagina php, invece sarebbe più funzionale che li prendesse direttamente dal db...qualcuno sa aiutarmi?
Allego codice
PHP:
$Rilevatori = array("Virginia","Riccardo","Antonella","Susanna","Antonio",
"Melania","Giuliana","Gloria","Stefania","Fabio","Giulia","Claudio","Carmela","Pier Paolo","Giovanni",
"Francesco","Tiziana");

$indici = array();
$Rilevatori_estratti = array();

$numero_Rilevatori = 17; // Rilevatori da estrarre dall'array
$tot_Rilevatori = count($Rilevatori) - 1; // numero totale dei Rilevatori nell'array

for ( $i = 0; $i < $numero_Rilevatori; $i++ ) {
  $ind = indiceCasuale($tot_Rilevatori, $indici);
  $indici[] = $ind;
  $Rilevatori_estratti[$i+1] = $Rilevatori[$ind];
}

function indiceCasuale ($tn, $in) {
  $ind = rand(0, $tn);
  if ( in_array($ind, $in) ) {
    $ind = indiceCasuale ($tn, $in);
  }
    return $ind;
}
Grazie
Max61
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Il modello "Rilevatori" prevede il nome o una referenza da utilizzare come tale?
Il DB è stato strutturato come.....????


Quanto da te scritto poteva essere riassunto in questo modo:
PHP:
$Rilevatori = array("Virginia","Riccardo","Antonella","Susanna","Antonio",
"Melania","Giuliana","Gloria","Stefania","Fabio","Giulia","Claudio","Carmela","Pier Paolo","Giovanni",
"Francesco","Tiziana");
$MaxNum=5;
$Rilevatori_estratti=$Rilevatori;
shuffle($Rilevatori_estratti);
print_r(array_slice($Rilevatori_estratti,0,$MaxNum));
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
Ciao Macus_adi e grazie, questa è la struttura della tabella
PHP:
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Struttura della tabella `tblrilevatori`
--

CREATE TABLE `tblrilevatori` (
  `id` int(11) NOT NULL,
  `Rilevatore` varchar(100) CHARACTER SET utf8 NOT NULL,
  `Indirizzo` varchar(100) NOT NULL,
  `Mail` varchar(255) NOT NULL,
  `Telefono` varchar(50) NOT NULL,
  `Cellulare` varchar(50) NOT NULL,
  `Cellulare2` varchar(50) NOT NULL,
  `tipo` varchar(255) NOT NULL,
  `stato` varchar(255) NOT NULL,
  `tipoincarico` varchar(255) NOT NULL,
  `deter_incarico` varchar(255) NOT NULL,
  `fam_ass_citta_a` int(11) NOT NULL,
  `fam_int_citta_a` int(11) NOT NULL,
  `percen_citta_a` varchar(5) NOT NULL,
  `fam_ass_fraz_a` int(11) NOT NULL,
  `fam_int_fraz_a` int(11) NOT NULL,
  `percen_fraz_a` varchar(5) NOT NULL,
  `fam_ass_camp_a` int(11) NOT NULL,
  `fam_int_camp_a` int(11) NOT NULL,
  `percen_camp_a` varchar(5) NOT NULL,
  `tot_fam_ass_a` int(11) NOT NULL,
  `tot_fam_int_a` int(11) NOT NULL,
  `tot_perc_a` varchar(5) NOT NULL,
  `fam_ass_lista` int(11) NOT NULL,
  `fam_int_lista` int(11) NOT NULL,
  `percen_lista` varchar(4) NOT NULL,
  `fam_ass_tot` int(11) NOT NULL,
  `fam_int_tot` int(11) NOT NULL,
  `percen_tot` varchar(5) NOT NULL,
  `Anno` varchar(4) NOT NULL,
  `linkcartella` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Indici per le tabelle scaricate
--

--
-- Indici per le tabelle `tblrilevatori`
--
ALTER TABLE `tblrilevatori`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT per le tabelle scaricate
--

--
-- AUTO_INCREMENT per la tabella `tblrilevatori`
--
ALTER TABLE `tblrilevatori`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
ti basta o serve dell'altro?
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Quindi se la tua tabellaè questa, tutto il codice sopra lo potresti rimpiazzare con questo
Codice:
SELECT * FROM TABLE WHERE "LE TUE CLAUSOLOE" ORDER BY RAND(id)
Una banale query....
Buon lavoro!
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
Grazie, ma al solito a me non funziona, mi da errore, ecco la query
PHP:
$Rilevatori = mysql_query("SELECT * FROM tblrilevatori ORDER BY RAND(ID)")
or die(mysql_error());
$row = mysql_fetch_array($Rilevatori);


$indici = array();
$Rilevatori_estratti = array();

$numero_Rilevatori = 17; // Rilevatori da estrarre dall'array
$tot_Rilevatori = count($Rilevatori) - 1; // numero totale dei Rilevatori nell'array

for ( $i = 0; $i < $numero_Rilevatori; $i++ ) {
  $ind = indiceCasuale($tot_Rilevatori, $indici);
  $indici[] = $ind;
  $Rilevatori_estratti[$i+1] = $Rilevatori[$ind];
}

function indiceCasuale ($tn, $in) {
  $ind = rand(0, $tn);
  if ( in_array($ind, $in) ) {
    $ind = indiceCasuale ($tn, $in);
  }
    return $ind;
}
ecco l'errore
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65488 bytes)
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
Stesso errore sempre nella quart'ultima riga
$ind = indiceCasuale ($tn, $in);
 
Ultima modifica:

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Non capisco....
PHP:
$conn=new mysqli('','','','');
$result=$conn->query('SELECT BLA BLA BLA')->fetch_all(MYSQLI_ASSOC);
A che ti serve indiceCasuale ????? non ha senso.....
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
Ciao, ho provato ma a me non funziona.
Allego codice completo
PHP:
$Rilevatori = mysql_query("SELECT * FROM tblrilevatori ORDER BY RAND(id)")
or die(mysql_error());
$row = mysql_fetch_array($Rilevatori);


$indici = array();
$Rilevatori_estratti = array();

$numero_Rilevatori = 17; // Rilevatori da estrarre dall'array
$tot_Rilevatori = count($Rilevatori) - 1; // numero totale dei Rilevatori nell'array

for ( $i = 0; $i < $numero_Rilevatori; $i++ ) {
  $ind = indiceCasuale($tot_Rilevatori, $indici);
  $indici[] = $ind;
  $Rilevatori_estratti[$i+1] = $Rilevatori[$ind];
}

function indiceCasuale ($tn, $in) {
  $ind = rand(0, $tn);
  if ( in_array($ind, $in) ) {
    //$ind = indiceCasuale ($tn, $in);
  }
    return $ind;
}
QUI RECUPERO I DATI:      
echo '<table>';
foreach($Rilevatori_estratti as $zona=>$rilevatore)echo '<tr><td>Sezione '.$zona. ': </td><td>' .$rilevatore.'</td></tr>';
echo '</table>';
echo "<center><span style=\"color:black; font-size: 12pt\"><span style=\"color:red height:1;width:1; background-color:white\">&nbsp;____________________&nbsp;<br></span></i><br><br><br>";
Ciao
Max61
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Ciao @Max61,

la query dovrebbe essere di questo tipo:
Codice:
SELECT *
FROM `tblrilevatori`
ORDER BY RAND(id)
 LIMIT 15
Dove il limite 15 l'ho imposto io, da qui tutto ciò che devi fare è semplicemente utilizzare il ciclo per l'array di obj che hai dall'esecuzione della query....
Tutto il tuo codice sopra serve a ben poco...

Testato e funzionante:
PHP:
$conn=new mysqli('localhost','user','pass','dbconn');
$result=$conn->query('SELECT * FROM `tblrilevatori` ORDER BY RAND(id) LIMIT 5')->fetch_all(MYSQLI_ASSOC);
$my_table='<table><thead><tr>';
$keys=array_keys($result[0]);
foreach ($keys as $items){
   $my_table.='<th>'.$items.'</th>';
}
$my_table.='</tr></thead><tbody>';
foreach ($result as $k=>$v){
   $my_table.='<tr>';
   foreach ($keys as $items){
      $my_table.='<td>'.$v[$items].'</td>';
   }
   $my_table.='</tr>';
}
$my_table.='</tbody></table>';
echo $my_table;
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
Ciao ti posto l'errore che mi da
Fatal error: Call to a member function fetch_all() on boolean in C:\xampp\htdocs\censimento_permanente\views\estrazione.php on line 132
è in questa riga
PHP:
$result=$conn->query('SELECT * FROM `tblrilevatori` ORDER BY RAND(id) LIMIT 5')->fetch_all(MYSQLI_ASSOC);[/PHP[B]]
[/B]
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Scusa ma $conn come l'hai settata?
dall'errore sembrerebbe tu non abbia settato il database....
PHP:
$conn=new mysqli('NOME_HOST','UTENTE','PASSWORD','NOME_DATABASE');
I parametri sono obbligatori!
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
OK, fatto, mi fa l'estrazione dei nomi però non cambia mai l'ordine, ma è sempre il solito
allego query
PHP:
$result=$conn->query("SELECT Rilevatore FROM `tblrilevatori` WHERE Anno = 2019 AND stato = 'Incarico accettato' ORDER BY RAND(id)")->fetch_all(MYSQLI_ASSOC);
$my_table='<table><thead><tr>';
$keys=array_keys($result[0]);
foreach ($keys as $items){
   
   $my_table.='<th>'.$items.'</th>';
}
$my_table.='</tr></thead><tbody>';

foreach ($result as $k=>$v){
   $my_table.='<tr>';
   foreach ($keys as $items){
      $my_table.='<td>'.$v[$items].'</td>';
   }
   $my_table.='</tr>';
}
$my_table.='</tbody></table>';
echo "<center><span style=\"color:black; font-size: 12pt\"><span style=\"color:red height:1;width:1; background-color:white\">&nbsp;____________________&nbsp;<br></span><br>";          
echo $my_table;
inoltre a questo punto mi servirebbe visualizzare un numero progressivo che parte da 1 a fino all'ultimo nome
es.: 10 nomi, numeri da 1 a 10
1: Virginia
2: Riccardo
3: Antonella
4: Susanna
5: Antonio
ecc.
il vecchio codice me lo permetteva
grazie del tempo che mi stai dedicando
Max61
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
Adesso ho risolto la randomizzazione togliendo id tra parentesi
ORDER BY RAND(id)
ORDER BY RAND()
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Scusa un refuso da framework, togli id da RAND...
PHP:
SELECT Rilevatore FROM `tblrilevatori` WHERE Anno = 2019 AND stato = 'Incarico accettato' ORDER BY RAND()

Per il numero progressivo basta stampare $k+1!
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
Ovviamente non mi riesce farlo come era visualizzato a video con il codice che avevo prima
io vorrei un elenco tipo questo
Sezione 1: Antonio
Sezione 2: Francesco
Sezione 3: Susanna
ecc.
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
Provato, mi da questo errore per tutti i record estratti
Notice: Array to string conversion in C:\xampp\htdocs\rilevazione\views\estrazione_NEW.php on line 87
Sezione 1: Array
la riga è questa
echo 'Sezione '.($k+1).': '.$v.'<br>';
 
Discussioni simili
Autore Titolo Forum Risposte Data
D php estrazione random nomi e senza ripetizione PHP 14
L Estrazione dati php Database 6
D Chiave unica in estrazione dati da array php PHP 0
gandalf1959 Estrazione e visualizzazione del simbolo dell'euro php/mysqli PHP 0
creatorweb [PHP] estrazione ciclica dati con 2 dati alla volta PHP 2
O [PHP] problema estrazione immagine da db PHP 12
Gigi87 [PHP] Estrazione dati da forum o da social network PHP 1
V [PHP] Estrazione con SQL PHP 1
L estrazione dati da mysql in php e salvataggio in cartella del server PHP 51
E [PHP] estrazione dati in modo non continuativo PHP 1
S [PHP] estrazione dal DB complicata PHP 7
S Php e mysql, estrazione da una tabella e inserimento in un'altra tabella PHP 14
C [PHP][MY SQL] - Estrazione dati database tramite form PHP 8
G estrazione dati da DB tramite PHP errore time out PHP 2
G Script php estrazione email PHP 8
A Ricerca full text mysq ed estrazione con php PHP 8
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4

Discussioni simili