Tässä keskusteluja ja koodeja selaillessa yrittänyt väsätä jotain seuraavaa mutta tavanomaiseen tapaan päin puutahan se on. Elikkäs, lomakkeeseen syötetään päivämäärä, sarja1 ja sarja 2. nämä pitää sitten tallentaa .csv (tai .xls?) tiedostoon myöhempää lukemista varten.
Lomakkeen(palaute.php) tiedot seuraavassa:
<form action="palaute.php" method="post"> <table width="400" border="0" align="center"> <tr> <td>Päivämäärä:<br><input type="text" name="pvm" size="60"></td> </tr> <tr> <td>Sarja 1 :<br><input type="text" name="sarja1" size="10"></td> </tr> <tr> <td>Sarja 2 :<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>
Tuohan siis on ihan selvää tekstiä mutta sitten siihen "ongelmaan" lainaismerkeissä siksi että joku tietää heti virheet siitä.. =)
<?php $list = array ( '$pvm,$sarja1,$sarja2' ); $fp = fopen('tulokset.csv', 'w'); foreach ($list as $line) { fputcsv($fp, split(',', $line)); } fclose($fp); header("Location: valmis.php"); ?>
Tuon php koodin repäisin php:n sivuilta fputcsv tai jokin vastaava se oli jota sitten yritin tähän soveltaa.
Tämä siis olisi kiva saada toimimaan.
Tuo csv tiedosto luetaan sitten toisella sivulla suoraan julki joten tiedot olisi kiva olla järjestyksessä tuossa csv filussa.
kysymys2: Voiko tuolla tavalla tallentaa .xls tiedostoon? Sitä ei vissiin pysty kuitenkaan lukemaan suoraan sellaisenaan sivulle ?
Sulla on siinä vain koodi, etkä selostanut ongelmaa. Luulisin kuitenkin tietäväni ongelmasi.
Eli, uskoisin että register_globals (foorumilla juttua juuri äskettäin, selaile) on pois päältä -> nuo tiedot mitä saat lomakkeesta, tulevat tässä _POST-taulukkoon, eli korvaa tyyliin $pvm -> $_POST["pvm"].
Kannattaa myös tarkistaa, onko magic_quotes_gpc() päällä (en jaksa selostaa tätäkään uudestaan kun juuri tuosta on ollut täällä foorumilla juttua just äskettäin, kattele itse), sen mukaan käytetään sit stripslashes()ia jos on tarvis.
Ja vielä, jos yksöishipsuihin yrittää tökätä muuttujia ('$variaapeli'), ei onnistu, vaan pitää käyttää lainausmerkejä, "$variaapeli".
Selitin sen verran epäselvästi, et sanonpa ymmärryksen auttamiseks:
'$pvm,$sarja1,$sarja2' => "$_POST[pvm],$_POST[sarja1],$_POST[sarja2]". Jos magic-quotet on päällä, ni tilanne onkin stripslashes($_POST["pvm"]) . ',' . stripslashes($_POST["sarja1"] .. jne. Toivottavasti tosta nyt jotain ymmärsi :P
Funktio fputcsv näyttää olevan PHP5:n uutuus. Aiemmalla PHP:n versiolla (esim. MBnetissä) moinen ei siis toimi.
Ilmeisesti tarkoitus on kirjoittaa tiedostoon rivi, jossa on kolme pilkuilla erotettua tietoa. Tällainen koodi siis oikeastaan riittää:
$tiedosto = fopen("tulokset.csv", "w"); fwrite($tiedosto, "$pvm,$sarja1,$sarja2\r\n"); fclose(tiedosto);
Skriptin alkuun on varminta kirjoittaa vielä näin, jotta skripti toimii kaikilla PHP:n asetuksilla:
// lomakemuuttujat ovat taulukossa $_POST $pvm = $_POST['pvm']; $sarja1 = $_POST['sarja1']; $sarja2 = $_POST['sarja2'];
Nämä siis lisäyksenä soodan viestiin. XLS-tiedosto on Excelin oma monimutkainen tiedostomuoto, ja sellaisia on hankala tehdä itse. Kun CSV-tiedosto, jossa siis on vain tekstimuodossa pilkuilla erotettua tietoa, on lisäksi kaikkien käyttäjien nähtävissä ilman Exceliä ja muiden skriptien helposti luettavissa, se on näistä kahdesta selvästi parempi valinta.
Kyllä ymmärsin =)
pistin tuolla $_POST komennolla ja tulee seuraava virhe=
fputcsv($fp, split(',', $line));
register_globals on päällä. magicista en tiiä kun ei oma palvelin vaan mbnet
tuolla antin laittamalla esimerkillä tiedot tallentuu. Mitenkäs sitten onnistuis tallentaa samaiset tiedot exeliin omiin sarakkeisiin ja mitenkäs sellasen .xls tiedoston tulostaminen sitten onnistuu ?
Jos tuota koodia muuttaa tämänverran:
<?php $tiedosto = fopen("tulokset.xls", "w"); fwrite($tiedosto, "$pvm;$sarja1;$sarja2\r\n"); fclose($tiedosto); ?>
silloin kaikki tiedot menee yhteen ruutuun eli exelissä A1
pitäisi nimittäin saada niin että esim. "pvm" menee ruutuun A4 ja sarja 1 menisi ruutuun D4 jne.
jonkun näkönen laskurikin siihen olisi vissiin laitettava että seuraavan kerran kun lomakkeen täyttää niin tiedot menis A5 ja D5 =)
lisättyä:
https://www.ohjelmointiputka.net/koodivinkit/
pystyisiköhän tuosta mallintamaan jotakin ?
Excel tosiaan käyttää erotusmerkkinä puolipistettä. Lisäksi tiedoston pääte pitää olla CSV. Tällä muutoksella koodi toimii.
Tiedot saa oikeisiin paikkoihin tyhjien sarakkeiden ja rivien avulla.
Kun tiedoston avaa muodossa "a", uudet tiedot tallentuvat vanhojen jatkeeksi. Näin pystyt tekemään uusien rivien lisäyksen.
Nyt siis koodi näyttää tältä:
<?php $tiedosto = fopen("tulokset.csv", "a"); fwrite($tiedosto, "$pvm;$sarja1;$sarja2\r\n"); fclose($tiedosto); ?>
Mutta nyt se tallentaa edelleen tiedot sarakkeeseen A2 jossa tiedot on: asdf;asdfasfd;asdf =eli juuri niinkuin täytin ne lomakkeessa mutta peräkkäin ; eroteltuna eli ei ihan toimi vielä :)
Minulla tuo koodi toimii oikein. Uudet tiedot menevät uudelle riville kolmeen sarakkeeseen. Olethan varmasti käyttänyt oikeaa skriptiä ja katsonut oikeaa tiedostoa?
Mites tämä nyt näin että mulla ei toimi...
tein kaiken uudestaan niin että poistin kaikki.. jne.
edelleen lisää tiedot sarakkeeseen B2 peräkkäin ; eroteltuna.
ja kun täyttää lomakkeen toisen kerran niin tiedot tulee näin:
klj;hkjhg;sdfg
;;
lkjh;lkjh;lkjh
Voitko laittaa linkin MBnetin palvelimelle ilmestyvään CSV-tiedostoon?
Minulla tuo CSV toimii, eli vika taitaa olla Excelissäsi. Mitähän merkkiä oma Excelisi kaipaa erottimeksi? Mitä tapahtuu, jos tallennat oikein muotoillun tiedoston Excelin kautta CSV-tiedostoksi?
Hehe, siinä käy juuri noin jos tallennan oikeasti muotoillun filun csv:ksi :)
Jokin ero tiedostoissa on pakko olla, jos Excel avaa itse tekemänsä tiedoston kuitenkin oikein. Jos et löydä eroa, lähetä vaikka minulle sähköpostilla skriptin tuottama CSV-tiedosto ja Excelin tuottama CSV-tiedosto.
Löysin asetuksista kohdan millä erotellaan nuo sarakkeet ja laitoin ruksin siihen puolipilkkuun. nyt näkyy oikein.
Kiiokset sinulle tästä avusta !
=)
Hyvä, että juttu selvisi. :) Usein ongelman syy on juuri jossain aivan muualla kuin luulisi.
Jäin tässä vielä miettimään että jossain vaiheessa tarviin sellaista ohjelman pätkää millä pystyy lomakkeen tiedon tallentamaan tiettyyn sarakkeeseen, onkos se kummonen operaatio vai tarviiko olla joku professori että osaa tollasen tehdä ? :D
Tyhjien sarakkeiden ja rivien avulla tiedon saa kyllä mihin tahansa kohtaan taulukkoa. Jos uusi tieto tulee vanhaa ennen, koko tiedosto pitää kirjoittaa uudestaan, koska rivit ja sarakkeet ilmoitetaan oikeassa järjestyksessä.
Ok, näinhän se tietenkin menee, (tyhmä minä)... Mjoo, muuten tuli vähän ongelmia tuon exelin kanssa. Mitenkähän asetuksista sais sen puolipisteen "vakioksi" koska sen joutuu nyt itse määrittämään jokaiseen soluun että puolipiste on myös soluerottelija..
edit: sain tuonkin vähän kierreltyä joten sekin on nyt hallussa :)
edit2:
Ei tämä kyllä ihan toimi niinkuin olen haaveillut =), koska tuo .csv tiedosto ei siis näytä kuin pelkät luvut, se ei siis pidä sisällään mitään exelin laskutoimituksia. Tiedosto jota käytän kun on seuraavanlainen:
pvm sarja1 sarja2 sarja3 jne. keskiarvo.
nyt kun tuohon alle lisätään seuraava rivi lomakkeen kautta niin eipä csv enää osaa näyttää oikein esim. keskiarvoa ja muita toimituksia mitä mulla siinä on. .xls tiedostona asia varmaan toimis mutta kun tuolla koodilla ei onnistu semmottii tallentaa.
Onko tähän mitään apuja olemassa ?
Mysql on käytössä jos se jotenkin helpottais ? Tosin ei mbnetissä mutta mulla on toinen servukin..
Aihe on jo aika vanha, joten et voi enää vastata siihen.