[PHP] Estrazione random con nomi presi dal db

Max61

Utente Attivo
2 Mar 2014
707
3
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.333
90
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
707
3
18
Ciao Macus_adi e grazie, questa è la struttura della tabella
PHP:
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@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 [email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email protected]_COLLATION_CONNECTION */;
ti basta o serve dell'altro?
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
90
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
707
3
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
707
3
18
Stesso errore sempre nella quart'ultima riga
$ind = indiceCasuale ($tn, $in);
 
Ultima modifica:

macus_adi

Utente Attivo
5 Dic 2017
1.333
90
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
707
3
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.333
90
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
707
3
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.333
90
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
707
3
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
707
3
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.333
90
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
707
3
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
707
3
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
G Invio form con PHP PHP 2
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1
D problema php mysql PHP 1
E Barra di avanzamento codice PHP PHP 4
G creazione menu a tendina e invio a pagina php PHP 1
A inserire variabile php colore in div html PHP 2

Discussioni simili