php script werknemer van de dag, sql connectie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Maurice Louter

Maurice Louter

25/01/2024 07:19:39
Quote Anchor link
Goedemorgen,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);

?>
 
PHP hulp

PHP hulp

21/12/2024 18:09:02
 
Adoptive Solution

Adoptive Solution

25/01/2024 08:48:29
Quote Anchor link
Met deze query haal je een willekeurige persoon uit de database.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;


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
 
Maurice Louter

Maurice Louter

25/01/2024 09:04:32
Quote Anchor link
Bedankt voor je reactie!
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;


Demonamen hier : https://www.fakenamegenerator.com/

PHP heeft ook een simpelen rand() functie : https://www.php.net/manual/en/function.rand.php
 
Ivo P

Ivo P

25/01/2024 09:55:36
Quote Anchor link
RAND() kan ook een parameter mee krijgen. Bij steeds dezelfde parameter komt steeds dezelfde "random" waarde eruit.

Dus je zou iets kunenn doen als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT name
FROM tabel
ORDER BY RAND(CURRENT_DATE)
LIMIT 1


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.
 
- Ariën  -
Beheerder

- Ariën -

25/01/2024 10:39:17
Quote Anchor link
Daarom zou je eigenlijk een lijst moeten bijhouden wie al aan de beurt is geweest, om het eerlijk te houden.
 

25/01/2024 11:43:57
Quote Anchor link
Houd er rekening mee dat de RAND() functie mogelijk niet voor elke rij opnieuw wordt geevalueerd in MySQL.
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.
 
Ivo P

Ivo P

25/01/2024 12:11:05
Quote Anchor link
Ik heb een controle gedaan op de query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT *, 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.
 
Maurice Louter

Maurice Louter

25/01/2024 14:20:29
Quote Anchor link
Bedankt voor de reacties!
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.
 
- Ariën  -
Beheerder

- Ariën -

25/01/2024 14:26:53
Quote Anchor link
Dat wordt hier juist uitgelegd. ;-)
 
Adoptive Solution

Adoptive Solution

25/01/2024 18:09:13
Quote Anchor link
Komt dit in de buurt?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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 />';


?>


Overigens heeft random niets te maken met probleem. Het woord schept alleen maar verwarring.
 
Ivo P

Ivo P

26/01/2024 12:02:06
Quote Anchor link
Hier doe je eerst een query op te tellen hoeveel medewerkers er zijn.
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$q
= "SELECT id, givenname
      FROM fakenames
      ORDER BY RAND(CURRENT_DATE)
      LIMIT 1"
;
?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.