Werk Rooster script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 volgende »

Sander Haug

Sander Haug

25/11/2014 20:47:50
Quote Anchor link
Goedenavond,

Ik heb een probleem en ik zie momenteel even de bomen door het bos niet meer.
Voor het vak informatica moeten we een praktische opdracht doen met een zelf gekozen onderwerp.
Nu maken wij een werknemers website voor een zeker bedrijf.
De inlog/registratie/uitlog en index pagina staan.
Ook heb ik hierbij een extra pagina gemaakt om het rooster te kunnen maken, als je niet de functie filiaalmanager hebt dan kom je er niet op. Als default staat er dat je hulpkracht bent.

Echter nu komt het probleem,
Ik heb een tabel gemaakt met de data's en uiteraard de gebruikers (verkregen uit de database door middel van een query en een while-loop). In de cellen staan text fielden waar je de werktijden in kunt vullen, welke daarna in de database komen te staan. De andere werknemers kunnen dan op hun beurt de gegevens uitlezen en hun eigen rooster zien. Dat is het idee.

Maar wanneer ik op de submit knop druk, voert hij alle waarden in behalve de username. Daar stoort het 'm. Want eerst had ik de username die op dat moment ingelogd was, ik (Sander) dus. Dus wanneer ik dan een tijd voor een andere werknemer invul, pakt het systeem hem niet.

Dit kan ik het beste aan de hand van het voorbeeld hanteren.
Er werken twee werknemers, Sander en Victor. Sander is de filiaalmanager en Victor de hulpkracht.
Sander maakt dus het rooster voor hemzelf en Victor. Wanneer Sander het rooster voor Sander invult, pakt het systeem hem en komt er ook in de tabel te staan: Username; Sander, WerkTijd1: ... etc. Voor Victor pakt hij hem niet en vult hij in het veld niet de username Victor in.

De vraag is nu: Hoe pak ik een specifieke variable uit de while loop en vul de username daarbij in?

Help help help.

De broncode volgt hieronder.
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php
include_once "includes/config.php";
?>

<html>
<head>
</head>
<body>
<?php
if(empty($_SESSION['LoggedIn']) && empty($_SESSION['Username']))
{

    header("Location: login.php");
}

else
{
    if($_SESSION['Function'] != "Filiaalmanager")
    {
    
    echo "Je bent niet bevoegd om deze pagina te bekijken. Je wordt terug gestuurd.";
    echo "<meta http-equiv=\"refresh\" content=\"2;url=index.php\">";
    }

    else
    {
    $maandag = date("d/m/Y");
    $dinsdag = date("d/m/Y", time()+86400);
    $woensdag = date("d/m/Y", time()+172800);
    $donderdag = date("d/m/Y",  time()+259200);
    $vrijdag = date("d/m/Y", time()+432000);
    $zaterdag = date("d/m/Y", time()+518400);
    $zondag = date("d/m/Y", time()+604800);
    
    $resultaat = mysql_query("SELECT Username FROM users");
    
     ?>

 
     <h1>Filiaalmanagers pagina</h1>
     <p>Welkom <b><?php echo $_SESSION['Username'];?></b>.</p>
    
     <form name = "rooster" method = "post" action = "<?php echo $_SERVER['PHP_SELF'];?>">
     <table border = "1">
     <tr>
        <th>Naam</th>
        <th><?php echo $maandag;?></th>
        <th><?php echo $dinsdag;?></th>
        <th><?php echo $woensdag;?></th>
        <th><?php echo $donderdag;?></th>
        <th><?php echo $vrijdag;?></th>
        <th><?php echo $zaterdag;?></th>
        <th><?php echo $zondag;?></th>
     </tr>
     <?php
     while ($row = mysql_fetch_assoc($resultaat))
     {

     ?>

    
     <tr>
     <?php
     echo "<td>" . $row['Username'] . "</td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd1'></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd2'></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd3'></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd4'></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd5'></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd6'></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd7'></td>";
     ?>

     </tr>
     <?php
     }
     ?>

     </table>
    
     <input type = "submit" name = "submit" value = "Verstuur naar database">
    
     </form>
    
     <li><a href = "index.php">Index</a></li>
     <li><a href = "logout.php">Log uit</a></li>
     <?php
     if($_POST['submit']){
        $gebruiker = mysql_fetch_assoc($resultaat);
        $werktijd1 = $_POST['werktijd1'];
        $werktijd2 = $_POST['werktijd2'];
        $werktijd3 = $_POST['werktijd3'];
        $werktijd4 = $_POST['werktijd4'];
        $werktijd5 = $_POST['werktijd5'];
        $werktijd6 = $_POST['werktijd6'];
        $werktijd7 = $_POST['werktijd7'];    

        $sql = mysql_query("INSERT INTO `roster`(`Username`, `WorkDate1`, `WorkDate2`, `WorkDate3`, `WorkDate4`, `WorkDate5`, `WorkDate6`, `WorkDate7`, `WorkTime1`, `WorkTime2`, `WorkTime3`, `WorkTime4`, `WorkTime5`, `WorkTime6`, `WorkTime7`)
        VALUES ('"
.$gebruiker."','".$maandag."','".$dinsdag."','".$woensdag."','".$donderdag."','".$vrijdag."','".$zaterdag."','".$zondag."','".$werktijd1."','".$werktijd2."','".$werktijd3."','".$werktijd4."','".$werktijd5."','".$werktijd6."','".$werktijd7."')");
        
        
        if($sql){
            echo "Succes";
        }

        else{
            echo "Error";
        }
     }
    
}
}

?>

</body>
</html>


Toevoeging op 25/11/2014 20:56:15:

PS. Ik gebruik nog mysql_ . Het is puur voor een opdracht. Als ik MySqli gebruik snapt mn docent het niet meer. Hij snapt het nu al niet meer want hij kan me al niet meer helpen. -_-
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 25/11/2014 21:09:58 door - Ariën -
 
PHP hulp

PHP hulp

23/11/2024 23:03:56
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/11/2014 21:20:26
Quote Anchor link
1) Laat je niet verwarren door de gebruiker die ingelogd is en "alle" gebruikers. Dat zijn twee dingen die totaal los staan van elkaar.
2) Je zult de namen van de medewerkers uit de database moeten trekken en in een <select> moeten stoppen zodat de filiaal manager een keuze kan maken uit een lijst met werknemers waarvoor hij een "dienst" wil toevoegen.

Quote:
Als ik MySqli gebruik snapt mn docent het niet meer.


Dat vind ik echt treurig!
 
Sander Haug

Sander Haug

25/11/2014 21:51:36
Quote Anchor link
Ja het probleem blijft dan. Want nu heb ik ook alle gebruikers uit de tabel users getrokken. Maar als ik dan de user in de tabel Roster wil pompen met de tabellen: username, workdate1, worktime1.. en zo verder tot en met 7. Dan pakt hij de insert username niet. Omdat hij dan vindt dat username geen waarde heeft. Want dan pak je de hele while in een array, en niet specifiek één user, per row. Het is een variabele. Dus samenvattend:

-Ik haal de namen van de werknemers uit de tabel 'users'
-Ik wil de namen van de werknemers inserten in de tabel 'rosters', met hun werktijden.

De vraag is: Hoe? :(

En idd, dat is ook treurig..
 
Eddy E

Eddy E

25/11/2014 22:01:25
Quote Anchor link
Niet!

Je gaat NIET de namen van de werknemers invoegen. Je voegt hooguit het ID van de werknemer toe.
Wat als iemand gaat trouwen? Extra gebruiker?

Je geeft in je <select> iets mee als $_POST['maandag'] u=38&t=800
u=38 : gebruikersid 38 (naam is onbelangrijk)
t=800 : tijdstip, bijvoorbeeld 8:00 beginnen (+ 8 uur is dus tot 16:30, inclusief pauze)

Dan kan zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$_POST
['maandag'] = 'u=38&t=800';
$gegevens = parse_url($_POST['maandag'];
print_r($gegevens);
?>
 
Sander Haug

Sander Haug

25/11/2014 22:33:47
Quote Anchor link
Sorry maar ik volg het nog niet helemaal. Je bent me een stap te ver voor. Want, we hebben uit een while loop een dropdown list gemaakt met de UserID's. Stel dat daar de nummers: 1,2,3 uit komen. Hoe moet je dan in de database invoegen:
1, t = 06:00-15:00??
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/11/2014 22:55:44
Quote Anchor link
Je hebt een tabel roster (waarom noem je die niet rooster of schedule?) en je hebt een tabel users.

In users staat alleen informatie over de users.

In roster verwijs je door middel van het user_id om welke user het gaat:

user:
user_id (integer, auto increment, primary key)
name (varchar)
email (varchar)
...

schedule:
schedule_id (integer, auto increment, primary key)
user_id (integer, index)
start (datetime)
stop (datetime)



Toevoeging op 25/11/2014 23:01:37:

Stel dat je nu op een pagina wilt laten zien wanneer een gebruiker dienst heeft dan doe je zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT
    user.name, schedule.start, schedule.stop
FROM
    schedule
JOIN
    user
ON
    user.user_id = schedule.user_id
WHERE
    user.user_id = 'Victor' AND schedule.start > NOW()

Gewijzigd op 25/11/2014 22:56:23 door Frank Nietbelangrijk
 
Sander Haug

Sander Haug

25/11/2014 23:06:56
Quote Anchor link
Exact. Zo heb ik het ook in mijn database staan. Ik hou van Engels. Vandaar. Werkt makkelijker.
Alleen waar ik problemen mee heb is dat ik uit die while loop de namen/ids haal. Dan krijg je een hele lijst. Gewoon in een PHP form/HTML tabel uitgevoerd.
In de overige cellen staan 7 kolommen met als headers de data. De data en de ingevoerde werktijden dmv textfields, moeten corresponderen met de naam en of id.
Het zou er zo uit moeten zien:

Sander (of 1) | 26/11/12 | 0600:1500

Alleen hoe voer je die username/ID naar de database? Nu neem je één waarde terwijl je bij de while loop alles had.
Alles werkt behalve die username of ID. Want bij een andere gebruiker, gebruiker 2 bijvoorbeeld. Die piet heet,
Staat er het volgende:

.... | 26/11/12 | 17:00-21:00

Mijn excuses als het allemaal vaag klinkt. Ik hoop dat ik te volgen ben. De naam moet automatisch mee gezonden worden.
Niet met een handmatige WHERE name • 'Victor'. Deze zou variabel moeten zijn. Want als er 100 werknemers zijn is het omslachtig om alles met de hand te typen..
Gewijzigd op 25/11/2014 23:10:56 door Sander Haug
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/11/2014 23:13:10
Quote Anchor link
Heb je mijn query gezien? Ik denk dat dat het antwoord op je vraag is? Je krijgt met deze query namelijk de gebruikersnaam met daar bij zijn/haar roostertijden. alles netjes rij voor rij.

en door het tweede stuk in het WHERE gedeelte krijg je alleen de roostertijden voor de toekomst en niet die van het verleden.

JOIN: de tabel die je er aan wil koppelen
ON: de regel die bepaalt welk record uit tabel A aan welk record uit tabel B gekoppeld moet worden
Gewijzigd op 25/11/2014 23:18:30 door Frank Nietbelangrijk
 
Simo Mr

Simo Mr

25/11/2014 23:54:00
Quote Anchor link
Hey Sander,

Het zal goed komen man.

Je moet gewoon je probleem verdelen, en make it simple.

Bijvoorbeeld.

-> choice-user.php
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
<head>
 <script type="text/javascript">
        var sitefolder = "http://localhost/admin/" /* hier moet je de folder geven van user-rooster.php */
        function OnSelectionChange (select) {
            var selectedOption = select.options[select.selectedIndex];
            document.location.href=sitefolder+selectedOption;
        }
    </script>
</head>
<body>
<?php
// inlog/verificatie code hier


$resultaat = mysql_query("SELECT Userid, Username FROM users");

echo '<select onchange="OnSelectionChange (this)">';
while ($row = mysql_fetch_assoc($resultaat)):
echo '<option value="user-rooster.php?userid='.$row['Userid'].'" >'.$row['Username'].'</option>';
endwhile;

echo '</select>';
?>

</body>



-> user-rooster.php
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
<head>
<!-- je code hier-->
</head>
<body>
<?php
// inlog/verificatie code hier

$userid = intval($_GET['userid']);

$user-info-query = mysql_query("SELECT * FROM users where Userid=".$userid);

$user-week-rooster-query = mysql_query("SELECT Maandag, Dinsdag, * FROM rooster where Userid=".$userid);
// als de werknemer geen rooster heeft dan krijg je een False.

//info ophalen van database (dus je hebt de mogelijkheid om de data toe te voegen of te wijzigen)


$user-week-rooster = mysql_fetch_assoc($user-week-rooster-query))

echo '<form action="user-rooster.php?userid='.$userid.'" method="post" >';
  echo "<td>" . $row['Username'] . "</td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd1' value=".@$user-week-rooster['Maandag']."></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd2' value=".@$user-week-rooster['Dinsdag']."></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd3'></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd4'></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd5'></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd6'></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd7'></td>";


echo '</form>';


// hier clean the POST's
// Insert the Info in table
// show success message


?>

</body>




Succes
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

26/11/2014 09:46:04
Quote Anchor link
@Simo
Met bovenstaande code zal succes uitblijven, regel 10 zal een fatal error opleveren en dezelfde fout wordt verderop nog een aantal maal gemaakt.
 
Obelix Idefix

Obelix Idefix

26/11/2014 12:44:01
Quote Anchor link
Sander Haug op 25/11/2014 20:47:50:

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
<?php
     if($_POST['submit']){
        $gebruiker = mysql_fetch_assoc($resultaat);
        $werktijd1 = $_POST['werktijd1'];
        $werktijd2 = $_POST['werktijd2'];
        $werktijd3 = $_POST['werktijd3'];
        $werktijd4 = $_POST['werktijd4'];
        $werktijd5 = $_POST['werktijd5'];
        $werktijd6 = $_POST['werktijd6'];
        $werktijd7 = $_POST['werktijd7'];    

        $sql = mysql_query("INSERT INTO `roster`(`Username`, `WorkDate1`, `WorkDate2`, `WorkDate3`, `WorkDate4`, `WorkDate5`, `WorkDate6`, `WorkDate7`, `WorkTime1`, `WorkTime2`, `WorkTime3`, `WorkTime4`, `WorkTime5`, `WorkTime6`, `WorkTime7`)
        VALUES ('"
.$gebruiker."','".$maandag."','".$dinsdag."','".$woensdag."','".$donderdag."','".$vrijdag."','".$zaterdag."','".$zondag."','".$werktijd1."','".$werktijd2."','".$werktijd3."','".$werktijd4."','".$werktijd5."','".$werktijd6."','".$werktijd7."')");
        
?>

Ga eens debuggen en controleer wat er in elke waarde zit. Bedenk daarna waar het fout gaat.
Het aanmaken van al die variabelen ($werktijd1 t/m 7) is in ieder geval niet nodig.
Verder schrijf je zonder enige controle/ beveiliging de gegevens naar je database.

Wat denk/verwacht je dat er in $gebruiker zal zitten?
Gewijzigd op 26/11/2014 12:44:39 door Obelix Idefix
 
Sander Haug

Sander Haug

26/11/2014 15:11:33
Quote Anchor link
In de waarde gebruiker moet de naam van de gebruiker zitten. Echter haal je met de while loop alles eruit. En nu wil ik één naam terug zetten met een bij behorende werktijd en datum. Daar gaat het fout..
Over de beveiliging gesproken, deze heb ik wel alleen niet genoteerd in de codes. Er zit namelijk nog een verificatie code bij en nog een extra beveiliging in het configuratie bestand (:
 
Obelix Idefix

Obelix Idefix

26/11/2014 15:54:28
Quote Anchor link
Sander Haug op 26/11/2014 15:11:33:
In de waarde gebruiker moet de naam van de gebruiker zitten. Echter haal je met de while loop alles eruit. En nu wil ik één naam terug zetten met een bij behorende werktijd en datum. Daar gaat het fout..

Omdat je in je formulier nergens aangeeft welke werknemer het betreft.

Sander Haug op 26/11/2014 15:11:33:
Over de beveiliging gesproken, deze heb ik wel alleen niet genoteerd in de codes. Er zit namelijk nog een verificatie code bij en nog een extra beveiliging in het configuratie bestand (:

Je query is onveilig: het formulier bevat een text-veld. Als ik daar niet bv 8:00 invul, maar phphulp, wordt dat het geaccepteerd. Daar controleer je niet op.
Gewijzigd op 26/11/2014 15:55:55 door Obelix Idefix
 
Sander Haug

Sander Haug

26/11/2014 16:07:47
Quote Anchor link
Ik weet dat de query nog onveilig is. Dat is momenteel mn probleem niet. Dat fix ik later wel.
Ik zal een screenshot sturen van hoe het eruit ziet en dan aan de hand daarvan is het probleem glas helder..

Afbeelding

De namen worden verkregen door middel van een while loop.
Maar stel nu:

Ik wil bij Victor een werktijd invoeren. Op 26/11/14 met als tijd van 17:00-21:00.
Dan voert hij de tijd wel in in de table, maar niet de username. Omdat ik niet weet hoe ik die username moet pakken in een variabele.
Dat moet kunnen. Maar niet op de manier van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$username = 'Victor van Bilsen'
.
Die naam is variabel.

Dát is het echte probleem... Als dat gefixt is, dan maak ik uiteraard alles veilig (:
Gewijzigd op 26/11/2014 16:08:53 door Sander Haug
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/11/2014 16:22:35
Quote Anchor link
Gewoon een <input type="hidden" name="user_id" value="12"> aan je formulier toevoegen met daarin standaard ingevuld het id van de user.

Na het verzenden uitlezen met $_POST['user_id']
Gewijzigd op 26/11/2014 16:25:03 door Frank Nietbelangrijk
 
Sander Haug

Sander Haug

26/11/2014 16:42:52
Quote Anchor link
Zou u dat iets extra kunnen toelichten..? Waar komt die
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Value = '12'
vandaan?.. Waarom hidden?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/11/2014 16:51:09
Quote Anchor link
Ja hoor, (inmiddels thuisgekomen en achter de pc)

hidden omdat het veld dan niet weergegeven wordt en de gebruiker er dus niets van merkt. 12 is gewoon een voorbeeld voor een user id.

Met php wordt het dan zoiets:
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
<?php

echo '<form action="user-rooster.php?userid='.$userid.'" method="post" >';
  echo "<td>" . $row['Username'] . "</td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd1' value=".@$user-week-rooster['Maandag']."></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd2' value=".@$user-week-rooster['Dinsdag']."></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd3'></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd4'></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd5'></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd6'></td>";
     echo "<td><input type = 'text' size = '10' name = 'werktijd7'></td>";


     echo '<input type="hidden" name="user_id" value="'.$userid.'">';


     echo '</form>';

?>
Gewijzigd op 26/11/2014 16:53:31 door Frank Nietbelangrijk
 
Sander Haug

Sander Haug

26/11/2014 16:54:01
Quote Anchor link
Maar wanneer ik dit doe krijg je toch een undefined index error van $user_id?.. Of niet?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/11/2014 16:59:57
Quote Anchor link
Ik zal misschien beter eens een werkend voorbeeld maken?
 
Sander Haug

Sander Haug

26/11/2014 17:02:52
Quote Anchor link
Als dat mogelijk is graag. Want ik worstel hier gigantisch mee haha.

Vindt dit heel moeilijk. Ik heb geen problemen met de hele lijst, in een kolom (HTML) te zetten. Maar om dan vervolgens in de kolom daarnaast iets te zetten (werktijd bv.) en deze terug te INSERTEN in de tabel, pakt hij de specifieke Username niet. Want hij heeft de hele loop. Arggh.. Vandaar ook dat ik de screen postte haha.

Toevoeging op 26/11/2014 17:24:56:

Ik heb nu geprobeerd om de Usernames in een textfield te zetten met een readonly waarde, dit field noem je $Username en zet je terug in de tabel. Maar helaas ook dat werkt niet..
 
Obelix Idefix

Obelix Idefix

26/11/2014 17:26:04
Quote Anchor link
Je zegt dat het inserten van de werktijden wel goed gaat, maar wat als je voor medewerker 1 een dag invult en voor medewerker 2 dezelfde dag? Worden dan twee gegevens weggeschreven?
Want als ik naar je code kijk, ga je volgens mij maar 1 rij verwerken.
 

Pagina: 1 2 3 volgende »



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.