Mitä vaihtoehtoja tiedätte .csv tiedostolle korvaajaksi?
Tarkoitus olisi saada sellainen "tietokanta" johon voin lomakkeella lisätä tietoja sarakkeisiin(tämä on valmiina). Pitäisi vielä saada niin että tämä taulukko johon tiedot lisätään saataisiin näkymään oikein .php sivulla.
Mielenkiintoisen tästä tekee se että sarakkeiden päässä on keskiarvonlasku funktio ja muitakin laskutoimituksia näille arvoille on. Hyvä ratkaisu tähän olisi .xls tiedostot mutta näitäkun ei voi tässä esimerkissä käyttää koska lomakkeelta ei saa tietoja siirrettyä .xls tiedostoon vaan se pitää siirtää .csv filuun.
.csv filu taas ei osaa näyttää mitään funktioita jotka exelissä on määritelty.
Saako joku tästä jotain selvää ?? :D
Oikea tietokanta on yksi varteenotettava vaihtoehto. Jos sellaista ei kuitenkaan ole saatavilla/mahdollista asentaa, jäänee ainoaksi vaihtoehdoksi tuollainen csv-muotoinen tekstitietokanta, johon joudut tuollaiset keskiarvon laskemiset yms. koodaamaan itse.
Jos alustana on windows, onnistuu noiden excel-tiedostojen käyttö myös SQL-tietokantana. Tästä on putkassa jopa koodivinkki.
käytössä on arkku.netin palvelin mysql tuella
No sitten ei muuta kuin oppaan kimppuun! Suosittelen lämpimästi hyödyntämään sen tietokannan tuomat ominaisuudet.
Mitenkäs mulla on tuo jäänyt katsomatta :D täytyy ruveta pohtimaan asiaa!
<?php //yhteys ulkoiselle palvelimelle $yhteys = mysql_connect("mekeilaajat.arkku.net", "tunnukseni", "salasanani"); //valitaan tietokanta mysql_select_db("tietokantani nimi", $yhteys); //muodostetaan yhteys tietokantapalvelimeen $yhteys = mysql_connect() or die("Yhdistäminen ei onnistunut!"); //valitaan tietokanta mysql_select_db("tietokantani nimi", $yhteys) or die("Tietokantaa ei löytynyt!"); //tähän tulee tietokantakyselyt! //haetaan kaikki tietueet $kysely = "SELECT * FROM varasto"; //suoritetaan kysely $haku = mysql_query($kysely, $yhteys); //suljetaan yhteys mysql_close($yhteys); ?>
loin php myadminilla taulukon ja lisäsin sinne pari riviä ohjelmointiputkan msql oppaan mukaisesti mutta joki tuossa koodissa mättää ?
väittää esim. Access denied for user blablabla vaikka tunnukset pitäis olla oikein
Hmmm.. Koitappa laittaa osoitteeksi ihan localhost
, en arkusta tiedä, mutta useimmiten nuo yhteydet ulkoiselta palvelimelta on estetty. Ettei johtuisi siitä tuo virhe?
sivu sijaitsee myös arkku.netissä jolta yritän saada yhteyttä
kokeilin laittaa ihan localhost ja sitte ihan vain:
$yhteys = mysql_connect();
Mutta tuloksetta
iskee vaan että Access denied for user 'apache'@'localhost'
Siis koitappa
$yhteys = mysql_connect("localhost", "tunnukseni", "salasanani") or die(mysql_error());
hmm kummallista, nyt meni läpi ja näyttää toimivan. Kiitän.
Nyt koodi siis seuraavanlainen:
<?php //yhteys ulkoiselle palvelimelle $yhteys = mysql_connect("localhost", "tunnus", "passu") or die(mysql_error()); //valitaan tietokanta "testi" mysql_select_db("tietokanta", $yhteys); //valitaan tietokanta "testi" mysql_select_db("tietokanta", $yhteys) or die("Tietokantaa ei löytynyt!"); //tähän tulevat tietokantakyselyt! //haetaan kaikki tietueet $kysely = "SELECT * FROM varasto"; //suoritetaan kysely $haku = mysql_query($kysely, $yhteys); //echo html taulukkona echo "<html><body>"; //haetaan kaikki tavarat $kysely = "SELECT * FROM varasto"; //suoritetaan kysely $haku = mysql_query($kysely, $yhteys) or die("Virhe kyselyssä!"); echo "<table border>"; echo "<tr><td><b>pvm</b></td><td><b>sarja1</b></td><td><b>sarja2</b></td></tr>"; //käydään tavarat läpi for ($i = 0; $i < mysql_num_rows($haku); $i++) { //haetaan nimi, hinta ja määrä muuttujiin $pvm = mysql_result($haku, $i, "pvm"); $sarja1 = mysql_result($haku, $i, "sarja1"); $sarja2 = mysql_result($haku, $i, "sarja2"); //tulostetaan taulukon rivi echo "<tr><td>$pvm</td><td>$sarja1</td><td>$sarja2</td></tr>"; } echo "</table>"; echo "</body></html>"; //suljetaan yhteys mysql_close($yhteys); ?>
Mutta jostain syystä tulostaa tietokannassa olevat kolme riviä kolmeen kertaan?
edit: neljään kertaan..
edit2: väärä häytys, sori. Olin painanu myadminissa refreshiä väärässä paikassa :D
Sitten suosittelen opettelemaan heti suosiolla paremman tavan tuohon tulosten listaukseen:
Ok.
Mites sitten tuo lomakkeelta tallentaminen taulukkoon? Ei onnistu ainakaan suoraan:
$sql = 'INSERT INTO varasto (pvm, sarja1, sarja2) VALUES (\'$pvm\', \'$sarja1\', \'$sarja2\')';
Eikä myöskään $_POST['pvm'] jne.
tuo or die(mysql_error()) on aika hyvä debuggaus-tapa noihin tietokantakyselyihin. Lisäksi tuon sql-lauseen tulostaminen ruudulle myös usein valaisee asiaa.
Mutta nyt nuq -->
Jep, öitä.
Mutta sitten kun joku haluaa auttaa kaveria ylämäessä niin voisi valaista tuota lomake hommelia.
minäkin tästä menen nuq->
En tiedä myslistä mitään, mutta pitäisikö lauseessa ehkä olla ne laitettavat arvot muuttujanimien sijaan?
$sql = "INSERT INTO varasto (pvm, sarja1, sarja2) VALUES ('$pvm', '$sarja1', '$sarja2')";
Tai hipsuilla:
$sql = 'INSERT INTO varasto (pvm, sarja1, sarja2) VALUES ('.$pvm.', '.$sarja1.', '.$sarja2.')';
Ei onnistu tuolla lailla.
Kyllä tuon Metabolixin ensimmäisen esimerkin pitäisi kaiken järjen mukaan toimia... Antaako virhe-ilmoitusta?
Ei tule virhe ilmoitusta jos laittaa
$sql = 'INSERT INTO varasto (pvm, sarja1, sarja2) VALUES (\'$pvm\', \'$sarja1\', \'$sarja2\')';
Jos noihin laittaa $_post niin selain ei avaa sivua ollenkaan.
$sql = 'INSERT INTO varasto (pvm, sarja1, sarja2) VALUES ('.$pvm.', '.$sarja1.', '.$sarja2.')';
Tuolla lauseella ei tule mitään virheilmoituksia mutta eipä mene tieto perille asti. Sama tulos vaikka laittaa hipsujen tilalle ". Tai jos tuohon laittaa $_POST niin sama tilanne, ei tallennu...
edit:
metabolix kirjoitti:
En tiedä myslistä mitään, mutta pitäisikö lauseessa ehkä olla ne laitettavat arvot muuttujanimien sijaan?
Tarkoitatko että $pvm, $sarja1 jne. että niiden paikalle suoraan luvut jotka haluan talukkoon? -Jos tätä tarkoitat niin selvennän että tarkoitus on lähettää lomakkeelle syötetyt tiedot tietokantaan
Lomakehan näyttää tältä:
<form action="testi2.php" method="post"> <table width="400" border="0" align="center"> <tr> <td>päivämäärä:<br><input type="text" name="pvm" size="30"></td> </tr> <tr> <td>sarja1:<br><input type="text" name="sarja1" size="10"></td> </tr> <tr> <td>sarja1:<br><input type="text" name="sarja2" size="10"></td> </tr> <tr> <td align="center"><input type="submit" value="Lähetä tulokset"> <input type="reset" value="Tyhjennä kentät"></td> </tr> </table> </form>
tuo mysqlin koodi sijaitsee tämän formin alapuolella ja kokosivu tallennettu nimellä testi2.php
Siis laita se mysql_query($sql) or die(mysql_error()) niin näet sen tietokannan virheilmoituksen.
hmm, ja mihin kohtaan tuo nyt sitten pitäisi tuohon tunkea.
$sql = 'INSERT INTO varasto (pvm, sarja1, sarja2) VALUES ('.$_POST[pvm].', '.$_POST[sarja1].', '.$_POST[sarja2].')'; mysql_query($sql) or die(mysql_error())
tuskin ihan noinkaan ?
Silloin tulee virhe:
Parse error: parse error, unexpected T_STRING in (url) on line 168
ja tuo 168 rivi on:
mysql_close($yhteys);
edit:
$sql = 'INSERT INTO varasto (pvm, sarja1, sarja2) VALUES ('.$_POST[pvm].', '.$_POST[sarja1].', '.$_POST[sarja2].')' or mysql_query($sql) or die(mysql_error());
nyt siis näyttää tuolta koodi. missään vaiheessa kun täytän kentät ei tule mitään ilmoituksia. ei edes sen jälkeen kun tiedot pitäisi olla lähetetty. Mitään ei kuitenkaan tule taulukkoon kun phpmyadminista käyn sitä katsomassa
Toi ensimmäinen koodisi oli kyllä lähempänä sitä oikeeaa, sieltä vain puuttui puolipiste lopusta.
$sql = "INSERT INTO varasto (pvm, sarja1, sarja2) VALUES ('".$_POST['pvm']."', '".$_POST['sarja1']."', '".$_POST['sarja2']."')"; mysql_query($sql) or die(mysql_error());
Onko varmasti kannassa kentät pvm, sarja1 ja sarja2?
Seuraavaa pukkaa:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , )' at line 1
"at line 1" tarkoittanee ensimmäistä lausetta tuossa php koodissa ?
eli:
$yhteys = mysql_connect("localhost", "tunnus", "passu") or die(mysql_error());
Ei tarkoita, vaan ensimmäistä riviä SQL-lauseessa. Sitten tuon virheilmoituksen kaveriksi tulostat siihen vielä sen SQL-lauseen, niin ehkä se syntaksivirhe löytyy niin. Tuosta äkkiäkatottuna ei kyllä mitään löydy.
Juice: kyllä on kuten ne on tuossa ylempänä ilmoitettu.
ajv: Milläs koodilla saan sen tulostettua. en saa googlesta oikeen mitään irti taas...
no
...or die(mysql_error()." SQL: ".$sql);
Saa sitä omaa päättelykykyäkin käyttää... :)
Sen verran uus näissä hommissa että... =)
mutta lause siis näyttää tältä:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , )' at line 1 SQL: INSERT INTO varasto (pvm, sarja1, sarja2) VALUES (, , )
Jos tuosta nyt jotain yritän saada selvää niin se yrittää lisätä tyhjät rivit sinne. Koska tuo php koodi sijaitsee samalla sivulla kun se formi.
edit: Kokeilin laittaa formin ja mysql hommelit eri sivuille. Tulee seuraava kommenntti:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.1.1, 500, 500)' at line 1 SQL: INSERT INTO varasto (pvm, sarja1, sarja2) VALUES (1.1.1.1, 500, 500)
-Nyt se ainakin osas hakea ne tiedot lomakkeesta.
No tosta näkee nyt suoraan, että sulta puuttuu noi hipsut noitten tietojen ympäriltä.
Muutin sen sql lauseen :
$sql = "INSERT INTO varasto (pvm, sarja1, sarja2) VALUES ('$pvm', '$sarja1', '$sarja2')";
Ja nyt toimii.
Iso kiitos avusta jälleen =)
Nyt kun sait toimimaan, niin kannattaa lukea tämä threadi vielä ajatuksella läpi, niin opit tekemään saman turvallisesti.
tuota jo jonkin verran lueskellut.
Vielä olisi TOIVOTTAVASTI pieni töinen kysymys.
nimittäin keskiarvon laskeminen viimeiseen sarakkeeseen =)
tälläistä olen kehitellyt:
Kun tiedot lähetetään eteenpäin->
//lisätään tiedot $sql = "INSERT INTO varasto (pvm, sarja1, sarja2, keskiarvo) VALUES ('$pvm', '$sarja1', '$sarja2', 'AVG(sarja1,sarja2)')";
luonnolisesti olen myadminilla lisännyt tuollaisen sarakkeen sinne. nollaa näyttääpi kuitenkin aina.
sprawl kirjoitti:
Tarkoitatko että $pvm, $sarja1 jne. että niiden paikalle suoraan luvut jotka haluan talukkoon?
No en tietenkään, vaan juuri sitä, mistä annoin esimerkin. Ei paljon auta, jos tallennat rivin '$moi', jos haluat tallentaa sinne sen muuttujan $moi sisällön.
Tietakantaan ei kannata tallentaa erillistä saraketta keskiarvolle, vaan se lasketaan kyselyn yhteydessä:
SELECT AVG(sarja1, sarja2) AS keskiarvo FROM...
Ja onhan sulla noi sarja-sarakkeet sitten numeerisia kenttiä? Muuten tuo keskiarvon laskeminen ei varmaan toimi.
Eikös sarake ole numeerinen kun määrittelin sen "keskiarvo INT (3)" silloin kuin tuota taulukkoa tein.
edit:
joko olen tyhmä tai hidasälyinen mutta mulla ei yhditä nyt yhtään.
miten yhdistän tuon
SELECT AVG(sarja1, sarja2) AS keskiarvo FROM varasto
Ja
SELECT * FROM varasto
jotta kaikki tiedot näkyy samassa taulukossa?
jotain variaatioita yritin väsätä ja googlella ettiä apua mutta ku ei niin ei.
(kaikki varmaan nauraa itsensä kuoliaaksi kun lukee tätä keskustelua :D )
//haetaan kaikki tavarat $kysely = "SELECT * FROM varasto AND AVG('sarja1', 'sarja2') AS keskiarvo"; mysql_query($kysely) or die(mysql_error()." SQL: ".$kysely); //suoritetaan kysely $haku = mysql_query($kysely, $yhteys) or die("Virhe kyselyssä!"); echo "<table border>"; echo "<tr><td><b>pvm</b></td><td><b>sarja1</b></td><td><b>sarja2</b></td><td><b>keskiarvo</b></td></tr>"; //käydään tavarat läpi for ($i = 0; $i < mysql_num_rows($haku); $i++) { //haetaan nimi, hinta ja määrä muuttujiin $pvm = mysql_result($haku, $i, "pvm"); $sarja1 = mysql_result($haku, $i, "sarja1"); $sarja2 = mysql_result($haku, $i, "sarja2"); $keskiarvo = mysql_result($haku, $i, "keskiarvo"); //tulostetaan taulukon rivi echo "<tr><td>$pvm</td><td>$sarja1</td><td>$sarja2</td><td>$keskiarvo</td></tr>"; } echo "</table>"; echo "</body></html>"; //exittii mysql_close($yhteys); ?>
Jotain tuommoista yritin mutta eeeihän mulla totunnaiseen tapaan mikään onnistu koskaan...
Nyt lähden asioille-->back n. klo. 18:36:30
Aihe on jo aika vanha, joten et voi enää vastata siihen.