Avatar billede cozey Nybegynder
14. marts 2005 - 20:13 Der er 28 kommentarer og
1 løsning

Vagtplan i php.

Hej alle sammen.

Jeg er netop begyndt at arbejde på en vagtplan i php. -Og lad det være sagt med det samme, jeg er meget ny indenfor php.

Jeg er lidt på bar bund med hensyn til hvordan jeg skal bygge det op. (Jeg benytter en MySQL database).

Jeg har i forevejen lavet et skema (se: http://www.cozey.1go.dk/vagtplan/skema.php -Hvor F s b osv. skal udskiftes med F -fri S -syg A -arbejde )

Hvordan skal dette bygges op i databasen? Skal jeg have 31 felter for hver dato, for hver måned? ... for så bliver det jo hurtige en del felter, da et år bare, vil være 365 felter. SÅdan skal det vel ikke laves ... ellers hvad?

Jeg glæder mig til at høre fra jer.

På forhånd tak.

/Daniel
Avatar billede bigo Nybegynder
14. marts 2005 - 20:21 #1
Du laver en tabel med f.eks.
id, dato, medarb_id, status
Avatar billede conundrum Nybegynder
14. marts 2005 - 22:08 #2
Du laver en tabel med felterne:
id smallint
dato timestamp eller date efter smag
medarbejder_id smallint
status tinyint

og en tabel med medarbejdere
medarbejder_id smallint
navn varchar 255

og en tabel med status (Fri osv)
status tinyint
statusnavn varchar 30

Start med at lave dem, og meld tilbage, så går vi videre.
/Conundrum
Avatar billede cozey Nybegynder
15. marts 2005 - 15:38 #3
Så har jeg oprettet de tre tabeller (Håber det er rigtigt):

SQL-forespørgsel:
CREATE TABLE `vagtplan` (
`id` SMALLINT NOT NULL ,
`dato` TIMESTAMP NOT NULL ,
`medarbejder_id` SMALLINT NOT NULL ,
`status` TINYINT NOT NULL
);


SQL-forespørgsel:
CREATE TABLE `medarbejdere` (
`medarbejder_id` SMALLINT NOT NULL ,
`navn` VARCHAR( 255 ) NOT NULL
);


SQL-forespørgsel:
CREATE TABLE `status` (
`status` TINYINT NOT NULL ,
`statusnavn` VARCHAR( 30 ) NOT NULL
);

Det skal gerne være med følgende betegnelser:

X = På arbejde
B = Barns sygedag
O = Fridag
F = Ferie
+ = Sygedag
På forhånd tak.
Avatar billede bigo Nybegynder
15. marts 2005 - 21:12 #4
Det ser flot ud.
Så skal du lave et script der blander det hele sammen. Et der viser data og et der er "admin" delen hvor du lægger data ind.

Foreach er din ven i denne sammenhæng (og mange andre ..)
Og LEFT JOIN er også en god ven når du skal hente data frem.

Nogle specifikke spørgsmål til kodningen?
Er du igang nu ;-)
Avatar billede cozey Nybegynder
15. marts 2005 - 21:37 #5
Jeg er helt på bar bund :-)

Jeg ved hvordan man connecter til DBen osv. Men i denne sammenhæng er jeg helt blank. :-(
Avatar billede conundrum Nybegynder
16. marts 2005 - 00:55 #6
Ja meget flot sql. Dog glemte jeg at sige noget til dig, felterne id, medarbejder_id og status skal du tilføje den mulighec som hedder auto_increment dette kan du gøre i phpmyadmin.
Som bigo siger skal du nu lave et script som sætter det hele ind. Dette er en lidt større omgang når du er helt på bar bund, here goes:
Det første vi skal er at have en side til at indsætte medarbejdere.
/********** Kode til siden add_medarbejder.php ****************/
<?
$db = mysql_connect(dine info);
if(isset($_POST['doAdd'])){
  if(!empty($_POST['navn'])){
      $navn = $_POST['navn'];
      if(!$result = mysql_query("INSERT INTO medarbejdere SET navn='$navn'")){
        echo "Der opstod en fejl\n";
      }else{
          echo $navn." blev tilføjet databasen\n";
      }
}
}
?>

<form action='add_medarbejder.php' method='post'>
<input type='text' name='navn'>
<input type='submit' value='Tilføj' name='doAdd'>
</form>
/********** Slut på Kode til siden add_medarbejder.php ****************/

Design er der inget af i dette, går udfra at du kan det selv, det var en lille start der kommer mere senere, men start med at få dette til at virke.
/Conundrum
Avatar billede cozey Nybegynder
16. marts 2005 - 15:55 #7
Når jeg prøver at sætte auto_increment på medarbejder_id i tabellen "medarbejdere" returnerer den følgende:

#1075 - Incorrect table definition; There can only be one auto column and it must be defined as a key

!!! -Hvad gør jeg forkert? (Bruger phpmyadmin)
Avatar billede cozey Nybegynder
16. marts 2005 - 15:57 #8
Det siger den faktisk på alle sammen.
Avatar billede bigo Nybegynder
16. marts 2005 - 16:54 #9
Når du sætter autoinc. på felterne bliver du nødt til at have en unik key. F.eks. ID.
Så du bliver nødt til at sætte ID som primary key og så sætte autoinc til.

Eller du kan slette vagtplan og medarb. tabellerne og indsætte dem på ny med autoinc. i id og medarb_id:

#DROP TABLE IF EXISTS `vagtplan`;
CREATE TABLE `vagtplan` (
`id` SMALLINT NOT NULL Auto_increment,
`dato` TIMESTAMP NOT NULL ,
`medarbejder_id` SMALLINT NOT NULL ,
`status` TINYINT NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;


#DROP TABLE IF EXISTS `medarbejdere`;
CREATE TABLE `medarbejdere` (
`medarbejder_id` SMALLINT NOT NULL auto_increment,
`navn` VARCHAR( 255 ) NOT NULL,
  PRIMARY KEY  (`medarbejder_id`)
) TYPE=MyISAM;
Avatar billede bigo Nybegynder
16. marts 2005 - 16:55 #10
Hvis den brokker sig, fjern # foran DROP og så smid dem ind igen.
Avatar billede cozey Nybegynder
17. marts 2005 - 16:00 #11
Så burde databasen fungere. -Jeg satte ogsåautoinc. på status i status-tabellen .. det er rigtigt ik? (Så bare at du ikke havde vist den tabel bigo).
Avatar billede cozey Nybegynder
17. marts 2005 - 16:04 #12
Jeg har nu leget lidty med add_medarbejder.php -Men jeg kan ikke få det til at virke!

Jeg bruger følgende kode:
<HTML>
<HEAD>
</HEAD>
<BODY>
<?php
$db = mysql_connect("******","******","******");
if(isset($_POST['doAdd'])){
  if(!empty($_POST['navn'])){
      $navn = $_POST['navn'];
      if(!$result = mysql_query("INSERT INTO medarbejdere SET navn='$navn'")){
        echo "Der opstod en fejl\n";
      }else{
          echo $navn." blev tilføjet databasen\n";
      }
}
}
?>

<form action='add_medarbejder.php' method='post'>
<input type='text' name='navn'>
<input type='submit' value='Tilføj' name='doAdd'>
</form>
</BODY>
</HTML>
Avatar billede bigo Nybegynder
17. marts 2005 - 16:05 #13
Det fint.
Så skulle tabebellen være der.. Så skal du kode php.
Et godt sted at starte er f.eks. det eks. conundrum gav tidligere.
Avatar billede bigo Nybegynder
17. marts 2005 - 16:06 #14
giver den en specifik fejl?
Avatar billede cozey Nybegynder
17. marts 2005 - 16:18 #15
Nej .. den kommer bare med echoet "Der opstod en fejl".
Avatar billede cozey Nybegynder
17. marts 2005 - 16:22 #16
Er det ikke sådan her:
$db = mysql_connect("Host","database/brugernavn","Password"); ???
Avatar billede cozey Nybegynder
17. marts 2005 - 17:16 #17
Ingen der kan se hvor fejlen ligger?
Avatar billede cozey Nybegynder
17. marts 2005 - 17:30 #18
Så fandt jeg fejlen... der manglede:
mysql_select_db ("free19081");

SÅ nu er jeg klar til næste skridt :-)
Avatar billede bigo Nybegynder
17. marts 2005 - 17:54 #19
sorry. var lige væk. Men det var da godt du kom videre. Så har du fået lagt en bruger i basen. Du skal jo også have tilknyttet noget data til medarbejderen.
Avatar billede cozey Nybegynder
17. marts 2005 - 18:27 #20
OKay ... igen er jeg helt blank :-)  -Jeg kan godt lure den kode jeg har lavet indtil videre, men jeg har ingen idé om hvad jeg skal gøre nu ...
Avatar billede cozey Nybegynder
17. marts 2005 - 18:34 #21
Eller som i har lavet ;-)
Avatar billede bigo Nybegynder
17. marts 2005 - 19:44 #22
tænk i steps.

Hvad er det jeg vil lave?

Hent medarbejdere frem så jeg kan vælge
Sætte id til valgt medarbejder // Hint. submit();
Give mulighed for indtastning af vagtdata
Afslut

Strukturer kode som følger (sådan gør jeg):

// start init af sessions osv. definition af variabler
//
// Check indkomne data for evt. fejl
//
// Behandl indkomne data
// Hent / opdater / Indsæt / slet evt. data fra database
// Behandl databasedata for præsentation
//
// Vis HTML kode
Avatar billede cozey Nybegynder
18. marts 2005 - 16:46 #23
Jeg kan godt føklge opbygningen. Problemet er at jeg simpelthen ikke ved hvordan det skal laves :-/
Avatar billede bigo Nybegynder
18. marts 2005 - 17:59 #24
Start med noget ala:

<?
//connect to DB
$db_name = "free19081";
$db = @mysql_connect("localhost","user","pwd") or die ("The Database server does not answer.");
@mysql_select_db($db_name,$db) or die("I cannot connect to the database!:". mysql_error());

$get_sql = "SELECT * FROM medarbejdere";
$get_res = mysql_query($get_sql) or die ($get_sql."<br>".mysql_error());

// Her skal du selv indsætte ting
/*
if ($_POST[doAdd])
{
    // Opdater database tabel vagtplan
}
*/

?>

<HTML>
<HEAD>
</HEAD>
<BODY>
<form action=<?=$_SERVER[PHP_SELF];?> name=vaelg_medarbejder method=post>
Vælg Medarbejder:
<select name=med_id onChange="if(this.options[this.selectedIndex].value != ''){document.vaelg_medarbejder.submit();}">
<option value=''>Vælg medarbejder</option>
<?
while ($get_row = mysql_fetch_assoc($get_res))
    echo "<option value='{$get_row[medarbejder_id]}'>{$get_row[navn]}</option>";
?>
</select>
</form>   
<br>
<form action=<?=$_SERVER[PHP_SELF];?> method='post'>
Navn:<input type='text' name='navn' value='<?={$get_row[navn]};?>'><br>
Dato:<input type='text' name='dato'><br>
Status:<br>
<!-- Dette kan lave på en anden måde så du får data fra database tabellen status -->
<input type=checkbox name=status1>På arbejde<br>
<input type=checkbox name=status2>Fridag<br>
<input type=checkbox name=status3>Ferie<br>
<input type=checkbox name=status4>Sygedag<br>
<input type=checkbox name=status5>Barns sygedag<br>
<input type='submit' value='Tilføj data' name='doAdd'>
</form>
</BODY>
</HTML>
Avatar billede cozey Nybegynder
22. marts 2005 - 16:24 #25
Undskyld det sene svar (har været væk i weekenden).
Jeg kigger lige på det og vender tilbage.
Avatar billede bigo Nybegynder
22. marts 2005 - 21:47 #26
Det er ok.. Jeg kan jo f.eks. ligge og sove ind i mellem ;-)
Avatar billede bigo Nybegynder
17. april 2005 - 21:51 #27
Anything ?
Avatar billede cozey Nybegynder
21. juli 2005 - 15:39 #28
Hov ... undskyld jeg ikke har fået svaret.

Projektet blev droppet (desværre).

Men smid et svar.
Avatar billede cozey Nybegynder
13. januar 2006 - 21:37 #29
: : L U K K E T ::
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester