Hi
Olen tässä pähkäillyt erästä pientä juttua, mutta ei mene oikeen putkeen.
Eli jos minulla on esim. neljä eri tietokantataulua (MySQL). Taulu1, Taulu2, Taulu3, Taulu4,
Jokaisessa taulussa on tunnit kenttä sekä muita kenttiä 3kpl.
Webbisivulla on sitten 4 kpl checkboxeja ja tekstikenttä.
Kun valitaan checkboceja, niin tietokantaan pitäisi tallentaa valitun checkboxin osoittamaan tietokantataulun jokaiseen kenttään ennalta määrätty tieto ja tekstikenttään annettu luku pitäsi tallentaa valitun checkboxin osoittaman tietokantataulun tunnit kenttään.
Mitenkähän tämmöinen onnistuisi järkevästi?
Kysymyksen perusteella voisi olettaa, että osaat jo käyttää INSERT-kyselyitä ja siis lisätä tietokantaan dataa. Taulun valintaan voit käyttää tietenkin if-lausetta. Mikähän kohta tässä tuottaa ongelmia?
if (!empty($_POST["valinta1"])) { aja_sql_kysely("INSERT INTO Taulu1 (a, b, c, tunnit) VALUES ('a', 'b', 'c', ?)", intval(@$_POST["luku"])); } // Ja sama muille valinnoille.
Ehkä kuitenkin haluat käyttää valintaruutujen (checkbox) sijaan valintapainikkeita (radio button), jotta käyttäjä voisi valita niistä vain yhden. Silloin tietenkin myös if-lausetta täytyy hieman muuttaa, koska pitää tarkistaa lähetetty arvo eikä vain sen olemassaoloa.
Joo. Olen saanut jo muutaman sivun toimimaan ja tallennettua tietoa tietokantaan, mutta kun ei ole tuo koodaus oikeen hallussa enkä oikeastaan edes harrastaja, niin vähän joka asia tuottaa ongelmia :)
Tässä olis justiin tuo checkboxi homma siksi, että pitäs saaha kaikki kerralla hoidettua, ettei tarvi värkätä usiampaan kertaan.
Pitäs siis saaha tallennettua tauluihin Moottoriöljynvaihto, hydrauliöljynvaihto jne.
- koneID (aina "1"),
- huollon kuittaus pvm,
- kuvaus (valmis teksti "Mootoriöljyn vaihto" tauluun "moottorioljyvaihto", Hydrauliöljynvaihto tauluun "hyraulioljyvaihto" jne.
- Sitten tekstikenttään syötetty tuntimäärä, milloin mikäkin öljynvaihto on suoritettu.
- Tekstikenttään syötetty nimikirjaimet, kuka huollon suoritti
Tuon pvm ja tekstikentän ja nikmikirjaimet olen jo saanut talletettua kantaan eri sivuilla, mutta näiden yhdistäminen checkboxien kanssa tuntuu jotenkin ylitsepääsemättömältä.
koodi sivulle alla (jossa ei vielä mitään järkeä, mutta yritystä sitäkin enemmän).
<?php if (isset($_POST['submitted'])){ //Open a new connection to the MySQL server $mysqli = new mysqli('localhost','root','','huoltokirja'); //Output any connection error if ($mysqli->connect_error) { die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error); } $kuvaus = $_POST['Moottoriöljyn vaihto']; $nk = $_POST['nk']; $kone = "1"; $pvm = date("Y-d-m"); //kuluva päivä $tunnit = $_POST['tunnit']; if (!empty($_POST["moottorioljyvaihto"])) { $sql("INSERT INTO moottorioljyvaihto (koneID, pvm, kuvaus, nimikirjaimet tunnit) VALUES ('$koneID', '$pvm', '$kuvaus', '$nk', ?)", intval(@$_POST["$luku"])); } if (!empty($_POST["hyraulioljyvaihto"])) { $sql("INSERT INTO hyraulioljyvaihto (koneID, pvm, kuvaus, tunnit) VALUES (''$koneID', '$pvm', '$kuvaus1', '$nk', ?)", intval(@$_POST["luku"])); } if (!empty($_POST["napaoljyvaihto"])) { $sql("INSERT INTO napaoljyvaihto (koneID, pvm, kuvaus, tunnit) VALUES (''$koneID', '$pvm', '$kuvaus2', '$nk', ?)", intval(@$_POST["luku"])); } if (!empty($_POST["kaantovaihdeoljyvaihto"])) { $sql("INSERT INTO kaantovaihdeoljyvaihto (koneID, pvm, kuvaus, tunnit) VALUES (''$koneID', '$pvm', '$kuvaus3', '$nk', ?)", intval(@$_POST["luku"])); } if (!empty($_POST["nesteenvaihto"])) { $sql("INSERT INTO nesteenvaihto (koneID, pvm, kuvaus, tunnit) VALUES (''$koneID', '$pvm', '$kuvaus4', '$nk', ?)", intval(@$_POST["luku"])); } if(!mysqli_query($mysqli, $sql)){ die('Huoltotapahtumaa ei kirjattu'); } $tallennettu="Huoltotapahtuma tallennettu"; } ?> </head> <body> <h2> Vaihdetut öljyt: </h2> <form name="Vaihdot" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <input type="checkbox" name="moottorioljyvaihto[]" value="moottorioljyvaihto"> Moottoriöljy<br> <input type="checkbox" name="hyraulioljyvaihto[]" value="hyraulioljyvaihto"> Hydrauliöljyöljy<br> <input type="checkbox" name="napaoljyvaihto[]" value="napaoljyvaihto"> Napaöljy<br> <input type="checkbox" name="kaantovaihdeoljyvaihto[]" value="kaantovaihdeoljyvaihto"> Käännönvaihdeöljy<br> <input type="checkbox" name="nesteenvaihtovaihto[]" value="nesteenvaihto"> Nesteet<br> <br> <p>Anna koneen käyttötunnit:<br> <input type="text" name="luku" size="15"> </p> <p>Huollon suoritti:<br> <input type="text" name="nk" size="15"> </p> <input type="submit" value="Kuittaa" name="btnsave"> </form> </body> </html>
aijaijai kun silmiin sattuu!
Onko sulla noin monta "samanrakenteista" taulua?!
ja mikä on tämä mystinen $sql(...) ?.
Nythän siis useamman rastin kohdalla korvattaisiin edellinen kysely (joskin php taitaa heittää erroria tuon $sql() -muodon takia).
Ja itse kyselyn ajaminen tapahtuisi vasta lopussa sen perusteella, mikä rasti on valittuna viimeisenä.
edit:
Saanko lisäksi kysyä, miksi pvm on muotoa Y-m-d eikä esim. päivämäärä kellon ajan kanssa? Vaikkei tunteja, minuutteja ja sekunteja näytetäkään, niin tiedosta tuskin on haittaakaan kannassa.
Näitä koodeja katellessa kannattaa olla hyvät suojalasit, mielellään hitsikypärä.
Siinä on yhellä sivulla semmonen tarkastus, missä voi syöttää koneen tuntimäärät ja se laskee, kuin monta tuntia seuraavaan vaihtoon kullekin öljylaadulle on. Sillä noita tauluja noin monta. En nyt keksinyt järkevämpääkään tähän hätään. Sehän on nyt tämmöstä, kun ei ole koskaan ennen tehny.
Tuo pvm on tuossa juuri se huoltopäivämäärä, joten eipä tarkemmalla ajalla ole väliä. Vaikka ei kait se minua haittaa, vaikka se siellä olisikin, mutta sen ei tarvi näkyä sivulla.
Ja tuo $sql vain jäi tuohon, kun testailin ja kokeilin ts. kopsasin toiselta sivulta :D
Tässä on kyllä jollekin pikku projekti, jos sattuu olemaan liikaa aikaa
vinhasika kirjoitti:
Sillä noita tauluja noin monta. En nyt keksinyt järkevämpääkään tähän hätään. Sehän on nyt tämmöstä, kun ei ole koskaan ennen tehny.
Varmaan järkevämpi olisi laittaa yksi taulu ja sarake joka kertoo öljylaadun tyypin.
Hyötyjä näkisin ainakin seuraavat:
- Yhdellä kyselyllä saa helposti esim. saman ajoneuvon kaikki öljylaatutiedot haettua
- Yhdellä kyselyllä saa tilastoja ajettua kaikista eri öljylaaduista
- Jos tulee uusia öljylaatuja joskus, ei tarvitse lisäillä kuitenkaan uusia tauluja
- Koodistasi tulee 2-3 kertaa lyhyempi
Joo, tuon vois kyllä tehä varmasti monia kertoja järkevämmin, lyhyempänä sekä selkeämmällä rakenteella. Itellä ei vaan ole oikein aikaa eikä innostusta opetella koko hommaa ja taidot ei riitä sellaisen selkeän koodin kirjoittamiseen. Itse vähän niinkun demoa tässä rakennellu, että näkis vähän, miten sen pitäs toimia.
Tämmöinen saattas varmaan aika hyvä esim. jollekin opinnäytetyön tekijälle, koska siinä olis vielä muutakin hommaa lisäksi. MySQL:n ja PHP:n lisäksi mahdolllisesti JavaScriptiä ja jQueryä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.