Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Työntekijän lisääminen tietokantaan

Sivun loppuun

latenleffahylly [30.05.2012 13:44:52]

#

Hei,

Yleinen kysymys? Haluaisin tehdä lomakkeen, jolla lähetetään seuraavat tiedot tietokantaan:

Taulu: Tyontekija

- A_Id
- Sukunimi
- Etunimi
- Kortinnumero

------------------------------------

- Ongelma on se että tuo A_Id pitäisi olla aina 8-numeroa ja se pitäisi ns. generoida. Eli kone arpoisi numeron randomina. Miten mm. tarkistaa tietokannasta että numero vapaa? Ja muutenkin.. olisiko teillä antaa vinkkejä miten lähden toteuttamaan tätä uutta ominaisuutta, johon kuuluu:

- Lisää työntekijä tietokantaan
- Näytä kaikki työntekijät -> muokkaa/poista työntekijä

(ainakaan muokkaus lomakkeella ei saisi muuttaa A_Id:tä)


kiitos kaikesta avusta!

Grez [30.05.2012 13:48:45]

#

Laitat A_Id:n taulussa primary keyksi. Arvot luvun (jos teet PHP:llä niin rand(10000000,99999999)) ja jos tuuppaaminen tietokantaan ei onnistu niin arvot uudelleen ja yrität niin kauan kunnes onnistuu.

Kaikki muukin on ihan perusjuttuja. Ehkäpä jos jonkin asian kanssa on spesifinen ongelma niin kysyt, muuten sanoisin että ei muuta kuin tekemään.

latenleffahylly [30.05.2012 14:01:02]

#

..hetkinen hetkinen

eli ylläpitäjä siis arpoo ensin luvun ja vasta sitten täyttää muut kentät?

Grez [30.05.2012 14:08:58]

#

No mun mielestä kun ollaan lisäämässä käyttäjää, niin sen luvun voisi arpoa siinä vaiheessa kun muut tiedot on syötetty ja niitä ollaan tallettamassa tietokantaan. Syöttäjä saisi sitten luodun numeron näkyville kun tiedot tallentuu.

Toki sen voi tehdä toisinkin päin (että näkyy jo tietoja syötettäessä), mutta sitten se numero täytyy tavalla tai toisella varata (esim. tallettamalla tyhjä käyttäjä) ja sitten jos ylläpitäjä ei lopulta lisääkään käyttäjää niin pitäisi ne varaukset joskus poistaakin. Mielestäni turhaa vaivaa.

Metabolix [30.05.2012 14:17:25]

#

Miksi luku edes pitää arpoa? Miksei tavallinen järjestyksessä kulkeva id kelpaa?

qeijo [30.05.2012 14:30:50]

#

latenleffahylly kirjoitti:

Miten mm. tarkistaa tietokannasta että numero vapaa?

SQL - kyselyllä.

latenleffahylly [30.05.2012 14:37:27]

#

Haluaisin että luvut olisivat erilaisia sillä niiden avulla varataan myös työvuoroja. Eli helpoin olisi lomake joka antaa numeron valmiina..

1.) lisää uusi työntekijä - linkki
2.) arvottu numero 12345678 valmiina lomakkeella
3.) syötä muut tiedot
4.) luo työntekijä tietokantaan

ZeroGravity [30.05.2012 15:01:55]

#

En nyt jaksa etsiä mikä kanta sulla oli tossa takana, mutta jos esim vaikka MySQL on kantaa luotaessa helppo määritellä kenttiä nk. AUTO_INCREMENT. Jolloin kenttä saa aina insertoitaessa uuden (seuraavan) arvon. Tällainen ominaisuus löytyy lähestulkoon jokaisesta kannasta, joskin toteutus voi olla hieman toinen.

Jos määrittelisit tuon ID:n tuollaiseksi kentäksi, silloin tuo selostamasi tapahtuma menisi jotakuinkin näin:

1) lisää uusi työntekijä - linkki
2) syötä uuden työntekijän tiedot
3) lisää työntekijä tietokantaan, tietokanta generoi uniikin ID:n työntekijälle

lisätessäsi voi jättää tuon kentän määrittelemättä, tai antaa sille arvoksi NULL, eli vaikkapa:

CREATE TABLE tyontekija (
  id   INT(11) AUTO_INCREMENT,
  etunimi VARCHAR(50),
  sukunimi VARCHAR(50),
  tyonkuva VARCHAR(100),
  PRIMARY KEY(id)
);

--
INSERT INTO tyontekija VALUES (null,'Matti','Meikäläinen','varastomies');

PHP:llä saat myös selville mikä oli edellinen ID joka riville annettiin (esim. PDO:lla metodi on lastInsertId).

syyskimo [30.05.2012 16:02:08]

#

Sitten vielä jos väen vängällä haluat, että vie sen 8 merkkiä (etkä halua turhaan pädätä nollia), niin voit ajaa vielä seuraavan taikasanan:

ALTER TABLE tyontekija AUTO_INCREMENT=10000000;

(tämä siis jatkona tuohon ZeroGravityn vinkkiin)

Tietysti jos jostain syystä (security through obscurity) haluat, että id olisi sekalaisen näköinen niin sitten vain haet randomilla, kuten sinulle jo neuvottiin.

Mutta toisaalta voit leikkiä muka-randomia: vaihdat tuon AUTO_INCREMENTin arvon johonkin satunnaisen näköiseksi (20873881) 8-merkkiseksi luvuksi, tämä saattaa jopa riittää siihen "satunnaiseen" mitä tarvitset. :)

Lebe80 [30.05.2012 16:15:27]

#

@Latenleffahylly:
Saako kysyä, miksi tuon käyttäjänumeron pitää olla kahdeksan merkkinen ja satunnainen?

Metabolix [30.05.2012 17:07:14]

#

latenleffahylly kirjoitti:

Haluaisin että luvut olisivat erilaisia sillä niiden avulla varataan myös työvuoroja.

Millä tavalla 12345671 ja 12345672 ja 12345673 ovat enemmän erilaisia kuin 1, 2 ja 3? Jos merkkimäärä on kynnyskysymys, voit tulostaa luvut käyttäjälle muodossa 00000001, 00000002 jne.

latenleffahylly [30.05.2012 17:30:17]

#

Eli kuten tiedämme kaikki.. On työvuoronvaraus sovellukseni ollut käytössä jotovin, noin 150 henkilöä. Työntekijöillä on 8 numeroinen työntekijänumero.. Eli sen avulla varaavat vuoroja.

Ehkä paras tapa olisi jokin auto_increment juttu... Mutta tietokannassa on jo numeroita, joten.. Kun lisään uuden, mitä tapahtuu tietojen tallennus vaiheessa? (siis jos numero jo ennestään databasessa)

Lebe80 [30.05.2012 19:39:55]

#

No kerropa se itse. Eli aiotko kenties tarkistaa sen ennen lisäystä, ja vaikkapa kertoa siitä tunnusta lisäävälle varoituksen muodossa, esim. "Työntekijänumero on jo käytössä, käytä esim. Numeroa 12354678".

Grez [30.05.2012 19:45:15]

#

Mistä ne alkuperäiset työntekijänumerot muuten peräisin? Onko joku vaan randomilla heittänyt numeroita vai tuleeko ne esimerkiksi palkanlaskentajärjestelmästä tms?

latenleffahylly [30.05.2012 20:05:46]

#

Randomina olen heittänyt, mutta luulen että tuollainen voisi onnistua että lisätään automaattisesti (auto_increment) ja aloitetaan esim. luvusta 10001234 ->

+1

..mutta sain jo tästä keskustelusta ideaa, eli mitäpä turhaan tarkistelemaan mitkä numerot jo kannassa. Uusia työntekijöitä tulee muutenkin vuosien varrella ehkä max. 300 lisää.. numerot sentään jatkuvat loputtomiin.

No tässä toki minulta suunnittelu virhe kun aloin sovellusta koodata. Mietin pitkään miten saisin mahdollisimman erilaisia numerosarjoja joten arvoin generaattorilla. Ei ehkä sittenkään fiksuimmasta päästä. Mutta halusin selkeästi yksilöidä työntekijät, ja kun he tarkistavat omia varauksia niin olisi kiva että he eivät löytäisi muiden työvuoroja vain lisäämällä +1 omaan numbaan jne.

thänks guys!

Tukki [30.05.2012 22:08:06]

#

latenleffahylly kirjoitti:

Mutta halusin selkeästi yksilöidä työntekijät, ja kun he tarkistavat omia varauksia niin olisi kiva että he eivät löytäisi muiden työvuoroja vain lisäämällä +1 omaan numbaan jne.

Tuo on juurikin tuo mainittu "security through obscurity" joka lopulta sattuu omaan nilkkaan. Jos haluat että työntekijät voivat nähdä ainoastaan omia työvuorojaan niin sinun pitää tarkistaa että kuuluuko näytettävä työvuoro sitä pyytäneelle autentikoituneelle käyttäjälle. Älä koskaan luota arkaluontoisen materiaalin näyttämisessä siihen että request-parametrit olisivat sitä mitä oletat niiden olevan.

The Alchemist [31.05.2012 06:36:34]

#

latenleffahylly kirjoitti:

No tässä toki minulta suunnittelu virhe kun aloin sovellusta koodata. Mietin pitkään miten saisin mahdollisimman erilaisia numerosarjoja joten arvoin generaattorilla. Ei ehkä sittenkään fiksuimmasta päästä. Mutta halusin selkeästi yksilöidä työntekijät, ja kun he tarkistavat omia varauksia niin olisi kiva että he eivät löytäisi muiden työvuoroja vain lisäämällä +1 omaan numbaan jne.

thänks guys!

On täysi virhe edes lukea käyttäjän ID:tä käyttäjän itsensä lähettämästä syötteestä! Sen kuin tallennat sen sessioon. Luet käyttäjän ID:n syötteestä vain silloin, kun admin muokkailee muiden varauksia.

latenleffahylly [31.05.2012 10:01:00]

#

Hmm.. Noista sessioneista sen verran että käytän wordpressiä ja lisään siihen omaa koodia. Aikoinaan etsin pluginia wp:hen jossa olisi tuollainen varausohjelma valmiina. Ne kuitenkin niin paljon monipuolisempia mitä itse pystyn rakentamaan.

Myös jos käyttää pelkästään sessionia (sisään kirjautuneena oleva käyttäjä) niin silloin kaiketi voi luopua työntekijänumeroista. No... Haluan kuitenkin realismia tuoda esiin eli ennen työvuorojen varaus hoidettiin soittamalla ja tekstareilla... Tähän verrattuna nykyinen systeemi on kuin taivaan lahja.

Metabolix [31.05.2012 10:58:37]

#

latenleffahylly kirjoitti:

Haluan kuitenkin realismia tuoda esiin eli ennen työvuorojen varaus hoidettiin soittamalla ja tekstareilla... Tähän verrattuna nykyinen systeemi on kuin taivaan lahja.

No ei todellakaan ole. Itse hoidan nykyäänkin monia asioita soittamalla tai jopa virkailijan kanssa tiskillä yksinkertaisesti siksi, että monet "taivaan lahjat" on nähtävästi koodattu aivan pilvessä.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta