php script werknemer van de dag, sql connectie
Ik ben aan het stoeien met een werknemer van de dag script.
Deze kiest iedere dag een andere naam.
origineel staan de namen in het script zelf, ik wil graag dat deze uit een sql tabel gehaald worden.
Het weergeven van informatie uit een tabel is me duidelijk, maar samenvoegen met dit script lukt me tot nu toe nog niet.
Is er iemand die kan helpen?
Hartelijk dank!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
$servername = "localhost";
$username = "";
$password = "";
$dbname = "";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
function RandomQuoteByInterval($TimeBase, $QuotesArray){
// Make sure it is a integer
$TimeBase = intval($TimeBase);
// How many items are in the array?
$ItemCount = count($QuotesArray);
// By using the modulus operator we get a pseudo
// random index position that is between zero and the
// maximal value (ItemCount)
$RandomIndexPos = ($TimeBase % $ItemCount);
// Now return the random array element
return $QuotesArray[$RandomIndexPos];
}
/*
** --> See the example section below for a
** detailed instruction.
*/
// Use the day of the year to get a daily changing
// quote changing (z = 0 till 365)
$DayOfTheYear = date('z');
// You could also use:
// --> date('m'); // Quote changes every month
// --> date('z'); // Quote changes every day
// --> date('h'); // Quote changes every hour
// --> date('i'); // Quote changes every minute
echo '<p style="text-align:center"><font size="8" color="#FFFFFF"> De topper van de dag is:';
print "</p>";
print "<b>";
echo '<p style="text-align:center">';
// Example array with some random quotes
$RandomQuotes = array(
'naam 1',
'naam 2',
'Naam 3',
'Naam 4',
'Naam 5'
);
print RandomQuoteByInterval($DayOfTheYear, $RandomQuotes);
?>
$servername = "localhost";
$username = "";
$password = "";
$dbname = "";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
function RandomQuoteByInterval($TimeBase, $QuotesArray){
// Make sure it is a integer
$TimeBase = intval($TimeBase);
// How many items are in the array?
$ItemCount = count($QuotesArray);
// By using the modulus operator we get a pseudo
// random index position that is between zero and the
// maximal value (ItemCount)
$RandomIndexPos = ($TimeBase % $ItemCount);
// Now return the random array element
return $QuotesArray[$RandomIndexPos];
}
/*
** --> See the example section below for a
** detailed instruction.
*/
// Use the day of the year to get a daily changing
// quote changing (z = 0 till 365)
$DayOfTheYear = date('z');
// You could also use:
// --> date('m'); // Quote changes every month
// --> date('z'); // Quote changes every day
// --> date('h'); // Quote changes every hour
// --> date('i'); // Quote changes every minute
echo '<p style="text-align:center"><font size="8" color="#FFFFFF"> De topper van de dag is:';
print "</p>";
print "<b>";
echo '<p style="text-align:center">';
// Example array with some random quotes
$RandomQuotes = array(
'naam 1',
'naam 2',
'Naam 3',
'Naam 4',
'Naam 5'
);
print RandomQuoteByInterval($DayOfTheYear, $RandomQuotes);
?>
Code (php)
1
2
3
4
5
6
2
3
4
5
6
select
`fakenames`.`givenname`,
`fakenames`.`surname`
from `fakenames`
where rand() < (select 5 / count(0) * 10 from `fakenames`)
order by rand() limit 1;
`fakenames`.`givenname`,
`fakenames`.`surname`
from `fakenames`
where rand() < (select 5 / count(0) * 10 from `fakenames`)
order by rand() limit 1;
Demonamen hier : https://www.fakenamegenerator.com/
PHP heeft ook een simpelen rand() functie : https://www.php.net/manual/en/function.rand.php
Gewijzigd op 25/01/2024 08:49:50 door Adoptive Solution
Het is wel de bedoeling dat deze persoon de hele dag zichtbaar is, ook al wordt de pagina meerdere keren per dag geladen.
Adoptive Solution op 25/01/2024 08:48:29:
Met deze query haal je een willekeurige persoon uit de database.
Demonamen hier : https://www.fakenamegenerator.com/
PHP heeft ook een simpelen rand() functie : https://www.php.net/manual/en/function.rand.php
Code (php)
1
2
3
4
5
6
2
3
4
5
6
select
`fakenames`.`givenname`,
`fakenames`.`surname`
from `fakenames`
where rand() < (select 5 / count(0) * 10 from `fakenames`)
order by rand() limit 1;
`fakenames`.`givenname`,
`fakenames`.`surname`
from `fakenames`
where rand() < (select 5 / count(0) * 10 from `fakenames`)
order by rand() limit 1;
Demonamen hier : https://www.fakenamegenerator.com/
PHP heeft ook een simpelen rand() functie : https://www.php.net/manual/en/function.rand.php
Dus je zou iets kunenn doen als
Ik heb alleen niet getest of current_date dan - mag bevatten.
En aangezien die process random is: je kunt dus in uitzonderlijke situaties ook 5 dagen op rij dezelfde medewerker treffen en iemand anders een heel jaar niet.
Daarom zou je eigenlijk een lijst moeten bijhouden wie al aan de beurt is geweest, om het eerlijk te houden.
Om MySQL te forceren de uitkomst elke keer opnieuw uit te rekenen voor elke rij, kan je er een variabele waarde aan toevoegen, bijvoorbeeld het id uit een rij.
Code (php)
1
2
3
2
3
SELECT *, DATE_FORMAT(NOW(), '%Y%m%d%H%i')
FROM xyz
ORDER BY RAND(DATE_FORMAT(NOW(), '%Y%m%d%H%i'))
FROM xyz
ORDER BY RAND(DATE_FORMAT(NOW(), '%Y%m%d%H%i'))
Met een datum in het formaat Y-m-d H:i ging het mis, maar zonder de - en : tekens krijg ik elke minuut een andere volgorde van de records.
Dat zou dus ook met alleen de datum goed moeten gaan.
Overigens werkt het wel als ik alleen maar NOW() gebruik en de timestamp niet verder opmaak. Dan krijg ik steeds een andere volgorde behalve als het in dezelfde seconde valt.
Maar ik zou wel ergens noteren dat Pietje op 25 janurari medewerker van de dag was en dat je die dus niet binnen X tijd nog een keer selecteert.
Op zich werkt m'n systeempje zoals ik het wil hebben, ongeacht of mensen toevallig meerdere dagen achter elkaar worden weergeven..
Mijn bedoeling is om in plaats van de namen zoals ze nu in het script staan, deze uit een sql tabel te halen.
Dat wordt hier juist uitgelegd. ;-)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
$servername = "localhost";
$username = "";
$password = "";
$dbname = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$DayOfTheYear = date('z');
$q = "SELECT count(0) as aantal FROM fakenames;";
$r = $conn->query( $q );
$row = $r->fetch_object();
echo $q . '<br />';
echo '<pre>' . print_r( $r, TRUE ) . '</pre>';
echo '<pre>' . print_r( $row, TRUE ) . '</pre>';
echo 'Aantal = <b>' . $row->aantal . '</b><br />';
$TimeBase = intval($DayOfTheYear);
$ItemCount = $row->aantal;
echo '<p>' . $TimeBase . ' en ' . $ItemCount . '</p>';
$RandomIndexPos = ($TimeBase % $ItemCount);
echo '<p>RandomIndexPos = <b>' . $RandomIndexPos . '</b></p>';
$q = "SELECT id, givenname FROM fakenames LIMIT $RandomIndexPos, 1 ;";
$r = $conn->query( $q );
$row = $r->fetch_object();
echo $q . '<br />';
echo '<pre>' . print_r( $r, TRUE ) . '</pre>';
echo '<pre>' . print_r( $row, TRUE ) . '</pre>';
echo 'id = <b>' . $row->id . '</b><br />';
echo 'Naam = <b>' . $row->givenname . '</b><br />';
?>
$servername = "localhost";
$username = "";
$password = "";
$dbname = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$DayOfTheYear = date('z');
$q = "SELECT count(0) as aantal FROM fakenames;";
$r = $conn->query( $q );
$row = $r->fetch_object();
echo $q . '<br />';
echo '<pre>' . print_r( $r, TRUE ) . '</pre>';
echo '<pre>' . print_r( $row, TRUE ) . '</pre>';
echo 'Aantal = <b>' . $row->aantal . '</b><br />';
$TimeBase = intval($DayOfTheYear);
$ItemCount = $row->aantal;
echo '<p>' . $TimeBase . ' en ' . $ItemCount . '</p>';
$RandomIndexPos = ($TimeBase % $ItemCount);
echo '<p>RandomIndexPos = <b>' . $RandomIndexPos . '</b></p>';
$q = "SELECT id, givenname FROM fakenames LIMIT $RandomIndexPos, 1 ;";
$r = $conn->query( $q );
$row = $r->fetch_object();
echo $q . '<br />';
echo '<pre>' . print_r( $r, TRUE ) . '</pre>';
echo '<pre>' . print_r( $row, TRUE ) . '</pre>';
echo 'id = <b>' . $row->id . '</b><br />';
echo 'Naam = <b>' . $row->givenname . '</b><br />';
?>
Overigens heeft random niets te maken met probleem. Het woord schept alleen maar verwarring.
Daarnaast bepaal je de dag van het jaar.
Vervolgens doe je een variant op nrDagVanJaar / AantalMW: namelijk je deelt die 2 op elkaar en kijkt welke rest je overhoudt.
Zeg je hebt 10 medewerkers:
op 1 januari is het de rest van 1/10 = 1
op 2 jan wordt dat 2
etc
tot op 10 jan je 10 / 10 >> rest = 0 hebt.
Op de 11e ga je weer naar de Rest = 1
Daar is niets randoms aan.
Wel is het de hele dag gelijk.
Overigens mist de query op regel 31 een ORDER BY, dus in principe mag je database zelf een volgorde bepalen.
Ik zou het hele geklier in het stuk van regel 13/30 verwijderen.
En de query op regel 31 veranderen naar