Werk Rooster script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

Sander Haug

Sander Haug

26/11/2014 17:27:58
Quote Anchor link
Ja, dat zie ik nu ook. Dan wordt er maar één rij verwerkt.
Ik kan het ook maar per keer toevoegen. Dat is ook niet echt handig..
Man wat zit ik hier in vast hahah
 
PHP hulp

PHP hulp

24/11/2024 01:26:08
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/11/2014 19:11:17
Quote Anchor link
Ik hoop dat je een beetje bekend bent met array's want zonder dat is het bijna niet te doen om te maken wat je graag wil.

Je kunt in een <form> niet telkens name="werktijden" terug laten komen. Wat wel mag is dit
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
name="werktijden[]"


Nu worden alle velden van die naam in een array teruggegeven.

Paar algemene tips:
1) schrijf bovenin je script eerst alle PHP logica en begin onderin pas met de output
2) zodra je telkens moet gaan schrijven werktijd1, werktijd2 etc dan moet je stoppen en overstappen op een array. Misschien best even lastig in het begin maar daar kom je doorheen.
3) Controleer of een formulier verzonden is met if($_SERVER['REQUEST_METHOD'] == 'POST')
4) hou de action="" attribuut leeg en het formulier wordt naar hetzelfde script verstuurd.
5) $_POST is ook gewoon een array. array's kun je met print_r() op het scherm weergeven
6) gebruik bij je attributen in HTML double quotes (")

Het onderstaande script werkt al aardig. Ik liep alleen tegen het probleem aan dat je zeven datums en zeven tijden wilt gaan wegschrijven in de database. Dat zou ik niet doen. Maak gewoon zeven datetime fields aan in je database. in 1 veld past dan zowel de datum als de tijd. Dus daar moet je nog even aan werken. Zorg ook dat je volledig begrijpt hoe onderstaand script werkt anders sta je weer met een mond vol tanden straks. Ik heb de beveiliging achterwege gelaten dus die moet je er weer even inplakken.


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
<?php

session_start();

mysql_connect('localhost', 'frank', 'pass');
mysql_select_db('test');

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    // laat ons even zien wat er de $_POST array zit!
    echo '<pre>';
    print_r($_POST);
    echo '</pre>';

    foreach ($_POST['werktijd'] as $userId => $tijden)
    {

        $sql = "INSERT INTO roster(Username, WorkDate1, WorkDate2, WorkDate3, WorkDate4, WorkDate5, WorkDate6, WorkDate7, WorkTime1, WorkTime2, WorkTime3, WorkTime4, WorkTime5, WorkTime6, WorkTime7)
        VALUES ('"
.$userId."','".implode("','", $tijden)."')";
        echo $sql . '<br>';
        
        if(mysql_query($sql) === FALSE)
            echo 'Kon data niet opslaan in de database<br>';
    }
}

    

$tableHeaders = array('<th>naam</th>');
for($i = 0 ; $i < 7 ; $i++)
    $tableHeaders[] = '<th>'.date("d/m/Y", time()+($i*86400)).'</th>';

$resultaat = mysql_query("SELECT id,Username FROM users");
?>

<html>
    <head>
    </head>
    <body>
        <h1>Filiaalmanagers pagina</h1>
        <p>Welkom <b><?php echo $_SESSION['Username'];?></b>.</p>

        <form action = "" method="post" >
            <table>
                <tr>
                    <?php foreach($tableHeaders as $header) echo $header; ?>
                </tr>
                <?php while ($row = mysql_fetch_assoc($resultaat)) { ?>
                    <tr>
                        <td><?php echo $row['Username']; ?></td>
                        <?php for($i = 0 ; $i < 7 ; $i++) { ?>
                            <td><input type="text" size="10" name = "<?php echo 'werktijd['.$row['id'].']['.$i.']'; ?>"></td>
                        <?php } ?>
                    </tr>
                <?php } ?>
            </table>

            <input type="submit" value="Verstuur naar database">

        </form>

        <li><a href = "index.php">Index</a></li>
        <li><a href = "logout.php">Log uit</a></li>
    </body>
</html>


Toevoeging op 26/11/2014 19:31:00:

Let even op regel 31 en regel 49. Hier kom je 'id' tegen. dit is het user id uit de tabel users. Kan zijn dat jij user_id hebt in je database of iets dergelijks.

Ook moet je nog even fatsoenlijke foutafhandeling inbouwen bij al je mysql_* regels zoals ik dan wel al gedaan heb op regel 21
Gewijzigd op 26/11/2014 19:32:27 door Frank Nietbelangrijk
 
Sander Haug

Sander Haug

26/11/2014 19:44:45
Quote Anchor link
Super! Ik volg je gedachtegang. Alleen krijg ik nu de foutmelding:

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in...

Dit komt omdat je in de query zoekt naar Userid EN Username..

Plus de volgende meldingen:
[
Notice:__Undefined_index:_id_in_D:\Informatica\USBWebserver_v8_5\8_5\root\Lidl\fm_php_on_line_61
werktijd] => Array

Notice: Undefined index: werktijd in D:\Informatica\USBWebserver v8.5\8.5\root\Lidl\fm.php on line 30

Warning: Invalid argument supplied for foreach() in D:\Informatica\USBWebserver v8.5\8.5\root\fm.php on line 30
Hoe kan ik dit oplossen?
Gewijzigd op 26/11/2014 19:48:21 door Sander Haug
 
- Ariën  -
Beheerder

- Ariën -

26/11/2014 19:48:13
Quote Anchor link
Er zal wel foutafhandeling missen op lijn 31. Kijk of $resultaat true of false is.
Indien true: Handel de rest af.
Indien false: toon mysql_error() (bij voorkeur alleen voor beheerders).
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/11/2014 19:49:38
Quote Anchor link
Nee dit komt omdat je connectie niet lukt. even je username password en dergelijke instellen?
Nogmaals: foutafhandeling inbouwen in alle mysql_* functies!

OP php.net vind je voor iedere PHP functie welke waarden de functie terug kan geven bij Return Values. kijk maar eens bij bijvoorbeeld http://php.net/manual/en/function.mysql-connect.php Je ziet dan bij Return Values:

Returns a MySQL link identifier on success or FALSE on failure.


Je moet dus altijd testen of deze functie soms FALSE terug geeft en dan een nette foutmelding genereren
Gewijzigd op 26/11/2014 19:53:19 door Frank Nietbelangrijk
 
Sander Haug

Sander Haug

26/11/2014 19:51:03
Quote Anchor link
Ik voel me echt dom nu maar hoe doe ik dat?
Ik kan redelijk PHP'en maar dit stijgt me boven de pet. Ook al wil ik het graag leren.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/11/2014 19:55:48
Quote Anchor link
zie vorige topic?

p.s.
Sander Haug op 26/11/2014 19:51:03:
Ik voel me echt dom nu maar hoe doe ik dat?


Wees duidelijk in je vraagstelling. wat bedoel je met 'dat'?

( We hebben geen glazen bol ;-) )
 
Sander Haug

Sander Haug

26/11/2014 20:01:49
Quote Anchor link
In de volgende screens komen de foutmeldingen naar voren.
Ik hoop dat dat verduidelijkt.
Excuses voor de verwarring haha.

Afbeelding 1:
Afbeelding

Afbeelding 2:

Afbeelding
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/11/2014 20:06:09
Quote Anchor link
Let even op regel 31 en regel 49. Hier kom je 'id' tegen. dit is het user id uit de tabel users. Kan zijn dat jij user_id hebt in je database of iets dergelijks.
 
- Ariën  -
Beheerder

- Ariën -

26/11/2014 20:06:54
Quote Anchor link
Relevante code rond die lijnen graag.
 
Sander Haug

Sander Haug

26/11/2014 20:07:58
Quote Anchor link
Frank Nietbelangrijk op 26/11/2014 20:06:09:
Let even op regel 31 en regel 49. Hier kom je 'id' tegen. dit is het user id uit de tabel users. Kan zijn dat jij user_id hebt in je database of iets dergelijks.


Heb ik herschreven. Het was UserID en dat heb ik veranderd..
 
- Ariën  -
Beheerder

- Ariën -

26/11/2014 20:09:50
Quote Anchor link
Je probleem is dus opgelost, neem ik aan?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/11/2014 20:12:03
Quote Anchor link
Om de code te begrijpen moet je echt eens met array's bezig zijn geweest. http://www.phptuts.nl/view/39/6/

Daarnaast zie je in mijn code hoe ik de volledige $_POST op het scherm dump. Doe dat ook eens met je oude code en zie het verschil.
 
Sander Haug

Sander Haug

26/11/2014 20:13:05
Quote Anchor link
Dat probleem wel. Nu doet zich een nieuw probleem op.

Ik heb mijn database tabel: roster, aangepast naar de tabellen: Username, WorkTime1 .. t/m 7.
In de PHP output komt er het volgende te staan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
INSERT INTO roster(Username, WorkTime1, WorkTime2, WorkTime3, WorkTime4, WorkTime5, WorkTime6, WorkTime7) VALUES ('1','06:00','','','','','','')


Ik heb idd één waarde ingevoerd, puur als test. Alleen in mijn database verschijnt die 0600 niet. Want daar komt te staan:

Afbeelding

Dus hier gaat ook iets mis. :S
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/11/2014 20:13:44
Quote Anchor link
Bovendien bestudeer tevens de bron van je pagina in je webbrowser. Bekijk dus de HTML want dat is wat je met PHP maakt.

Toevoeging op 26/11/2014 20:16:43:

Ja. wat is het type van die WorkTime? kolommen? DATE of DATETIME?

Je moet er voor gaan zorgen dat er dit komt te staan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
VALUES ('1','2014-11-28 06:00:00','','','','','','')
 
Sander Haug

Sander Haug

26/11/2014 20:18:15
Quote Anchor link
Datetime velden zijn het.
Dus ik denk dat ik dan even in de INSERT query moet snuffelen?
Want daar stuur je wel de $tijden mee, maar niet de data?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/11/2014 20:19:06
Quote Anchor link
Daarom moet je dus de juiste datum weten en de tijd naar het formaat hh:mm:ss zetten met tussen de datum en de tijd een spatie
 
- Ariën  -
Beheerder

- Ariën -

26/11/2014 20:20:21
Quote Anchor link
Als ik zulke velden zie: WorkTime1, WorkTime2, WorkTime3, WorkTime4, WorkTime5, WorkTime6, WorkTime7...

dan gaan mijn vingers jeuken. Want wat nu als je straks 20 WorkTimes hebt? Ga je dan steeds de code aanpassen? Ik zou zeker eens kijken naar Normalisatie in SQL, want velden moet je nooit nummeren, dat is vragen om moeilijkheden.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/11/2014 20:22:26
Quote Anchor link
Correct Aar maar van ondergeschikt belang. En er zullen altijd zeven dagen in de week blijven dus zou ik zeggen voor een schoolopdracht: laat maar even.
 
Sander Haug

Sander Haug

26/11/2014 20:22:30
Quote Anchor link
Klopt, ik heb er nu ook second thoughts over. Maar wat vindt u dan een alternatief? Dat ik wel 7 dagen aan werktijden kwijt kan?
 

Pagina: « vorige 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.