Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: .csv tiedostolle korvaajaa ? exel tyylinen?.

Sivun loppuun

sprawl [24.02.2006 22:46:39]

#

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

ajv [24.02.2006 22:59:02]

#

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.

sprawl [24.02.2006 23:29:36]

#

käytössä on arkku.netin palvelin mysql tuella

ajv [24.02.2006 23:36:28]

#

No sitten ei muuta kuin oppaan kimppuun! Suosittelen lämpimästi hyödyntämään sen tietokannan tuomat ominaisuudet.

sprawl [25.02.2006 00:26:29]

#

Mitenkäs mulla on tuo jäänyt katsomatta :D täytyy ruveta pohtimaan asiaa!

sprawl [25.02.2006 00:57:00]

#

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

ajv [25.02.2006 01:14:06]

#

Hmmm.. Koitappa laittaa osoitteeksi ihan localhost, en arkusta tiedä, mutta useimmiten nuo yhteydet ulkoiselta palvelimelta on estetty. Ettei johtuisi siitä tuo virhe?

sprawl [25.02.2006 01:14:58]

#

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'

ajv [25.02.2006 01:16:41]

#

Siis koitappa

$yhteys = mysql_connect("localhost", "tunnukseni", "salasanani") or die(mysql_error());

sprawl [25.02.2006 01:19:28]

#

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

ajv [25.02.2006 01:49:31]

#

Sitten suosittelen opettelemaan heti suosiolla paremman tavan tuohon tulosten listaukseen:

<?php
for ($i = 0; $i < mysql_num_rows($haku); $i++) ... jne

//käy paljon paremmin esim.

while($row = mysql_fetch_assoc($result){
   echo $row['pvm'];
   // muut tulostukset
}
?>

sprawl [25.02.2006 01:55:56]

#

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.

ajv [25.02.2006 02:00:04]

#

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

sprawl [25.02.2006 02:02:48]

#

Jep, öitä.

Mutta sitten kun joku haluaa auttaa kaveria ylämäessä niin voisi valaista tuota lomake hommelia.

minäkin tästä menen nuq->

Metabolix [25.02.2006 02:27:36]

#

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.')';

sprawl [25.02.2006 10:58:23]

#

Ei onnistu tuolla lailla.

ajv [25.02.2006 11:20:26]

#

Kyllä tuon Metabolixin ensimmäisen esimerkin pitäisi kaiken järjen mukaan toimia... Antaako virhe-ilmoitusta?

sprawl [25.02.2006 11:28:41]

#

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

ajv [25.02.2006 11:43:26]

#

Siis laita se mysql_query($sql) or die(mysql_error()) niin näet sen tietokannan virheilmoituksen.

sprawl [25.02.2006 11:48:23]

#

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

ajv [25.02.2006 11:58:25]

#

Toi ensimmäinen koodisi oli kyllä lähempänä sitä oikeeaa, sieltä vain puuttui puolipiste lopusta.

Juice [25.02.2006 12:00:21]

#

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

sprawl [25.02.2006 12:00:36]

#

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());

ajv [25.02.2006 12:05:54]

#

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.

sprawl [25.02.2006 12:12:18]

#

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...

ajv [25.02.2006 12:36:03]

#

no

...or die(mysql_error()." SQL: ".$sql);

Saa sitä omaa päättelykykyäkin käyttää... :)

sprawl [25.02.2006 12:38:18]

#

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.

ajv [25.02.2006 12:43:38]

#

No tosta näkee nyt suoraan, että sulta puuttuu noi hipsut noitten tietojen ympäriltä.

sprawl [25.02.2006 12:44:30]

#

Muutin sen sql lauseen :

$sql = "INSERT INTO varasto (pvm, sarja1, sarja2) VALUES ('$pvm', '$sarja1', '$sarja2')";

Ja nyt toimii.

Iso kiitos avusta jälleen =)

ajv [25.02.2006 13:25:44]

#

Nyt kun sait toimimaan, niin kannattaa lukea tämä threadi vielä ajatuksella läpi, niin opit tekemään saman turvallisesti.

sprawl [25.02.2006 13:41:41]

#

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.

Metabolix [25.02.2006 13:46:22]

#

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.

ajv [25.02.2006 13:58:37]

#

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.

sprawl [25.02.2006 14:05:58]

#

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 )

sprawl [25.02.2006 14:48:28]

#

//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


Sivun alkuun

Vastaus

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

Tietoa sivustosta