ugrás a tartalomhoz

Űrlapból érkező adatok azonnali lementése fájlba

Anonymous · 2006. Júl. 11. (K), 14.17
Sziasztok!
Van egy HTML form.
Ezen a formon talalhatok checkboxok, mezok, radio gombok, stb... Egy sztatisztikara akarom hasznalni.

A felhasznalo kivalasza amit akar es vegul amikor az egesz oldalt kitoltotte, raklikel a Submit gombra.

Egy kis resz a html kodbol :

<p>1 Section </p>
      <p>
        <label>
        <input type="radio" name="Question1" value="strings">
strings</label>
        <br>
        <label>
        <input type="radio" name="Question1" value="wind">
wind</label>
        <br>
        <label>
        <input type="radio" name="Question1" value="brass">
brass</label>
        <br>
        <label>
        <input type="radio" name="Question1" value="percussion">
percussion</label>
        </p>
      <p>
          <label></label>
        2 How long have you been a member ? </p>
      <p>
        <label>
        <input type="radio" name="Question2" value="less than 1 year">
less than 1 year</label>
        <br>
        <label>
        <input type="radio" name="Question2" value="between 1 and 5 years">
between 1 and 5 years</label>
        <br>
        <label>
        <input type="radio" name="Question2" value="more than 5 years">
more than 5 years</label>
Az kitoltott az adatokat le kell mentenem egy fileban, guestdb.txt
Minegyik user a fileban uj sorban kell legyen.

Az adatok egy | jelel lesznek elvalasztva egymastol, ahol tobb ertek van kivalasztva azokat az adatokat ; jelel akarom elvalasztani.

Egy pelda :

guest less than 1 year|alma;korte
guest2 more than 5 years|wind

Kerem ha tudtok segitsetek.
Tombot kene hasznaljak ?

Koszonom !
 
1

$_POST tömb

janoszen · 2006. Júl. 11. (K), 18.39
Kiolvasod a $_POST tömbből és beleírod egy fájlba. Nem értem, mi a baj. Ez sima string és fájlkezelés.
2

adatbázis-szerü fileok

breakline · 2006. Júl. 11. (K), 22.17
Szia

Bár ez egy jó megoldás, szerintem probáld ki az adatbázis-szerű file-ban tárolást, mint lehetséges (jobb) alternatívát. A php viszonylag sok módszert támogat erre, pl.
http://hu2.php.net/manual/hu/ref.dba.php
http://hu2.php.net/manual/hu/ref.dbm.php

utóbbi lényegében sima plaintext-ként tárolja az adatokat, de ha ilyesmit használsz, lényegében ugyanúgy eléred az adataidat, mintha adatbázist használnál, ami 100szor kényelmesebb, mint szövegfile-okkal szórakozni. Először persze nézd meg, hogy a php mit és hogyan támogat.
Egy egyszerü példa:

<?php
//File létrehozás
$dbm = dbmopen("valaszok.dbm","n"); //n->új file létrehozása
dbminsert("geza","1987_Budapest_tanulo");
dbminsert("andi","1965_Pecs_vasutas");
dbmclose($dbm);
//File olvasás
$dbm = dbmopen("valaszok.dbm","r"); // r-> olvasás létező file-ból
$key = dbmfirstkey($dbm); // Első kulcs kiolvasása (geza)
$return=array();
//Addig olvasunk amig van ujabb kulcs
while ($key) 
 {
$data = dbmfetch($dbm,$key); //Adatelérés
$return[$key]=$data; //Eredmény hozzáadása
$key = dbmnextkey($dbm,$key); //Következő kulcs
}
print_r($return); //Eredmény tömb
?>
üdv
BL
3

... dbm

Pal_ur · 2006. Júl. 11. (K), 22.50
És arra figyelj, hogy Windows-on az alap PHP telepítés nem teszi fel a DBM-kezelést, minek következtében az ember fia kezdőként először 3 napot szív, mire rájön, hogy az alapok nincsenk fenn, ezért nem megy a dolog...

Egyébként maga a DBM-telepítés nem nagy cucc.
4

ok

Anonymous · 2006. Júl. 11. (K), 23.12
Sajnos az adatbazis stilust nem szeretnem egyenlore hasznalni, mindenesetre koszonom a leirast!. Egy haver kert meg, hogy egyszeruen legyen megoldva.

Sikerult valamit megcsinalnom es mukodik.
Szoval a celom a kov. volt : Van egy urlap, amelyen sok radio gomb van meg kivalaszthato adat (checkbox).
Radio gombot csak egyet tudok valasztani, de checkboxbol tobbet lehet kivalasztani.

Persze a felhasznalo azt valasza ki ezek kozul amit akar, az sem baj ha egy checkboxot sem valaszt ki. Csak azok az adatok lesznek fajlba irva amelyek ki voltak jelolve.

Az adatokat szetvalasztom egy | jel segitsegevel. Ahol tobb adat volt kivalasztva azokat elvalasztom egy ; jel segitsegevel.

Itt van a kod amit hasznalok :

$questions = array();

if (!empty($_POST['Question1']))
{
    $questions[] = $_POST['Question1'];
}    
if (sizeof($_POST['Question4']) > 0)
{
    $questions[] = implode(';', $_POST['Question4']);
}
if (sizeof($_POST['Question5']) > 0)
{
    $questions[] = implode(';', $_POST['Question5']);
}

$data = implode('|', $questions);  
Most mar beleirhatom fajlba az adatokat. A Question 1 radiogomb, a Question4 meg Question5 checkboxok.

Sajnos az urlapban van 30 kerdes. Ez azt jelenti, hogy 30 ilyen IF-et kene csinalni. Nem lehetne ezt valahogy egyszerubben megoldani ne legyen olyan sok sor ?

Koszonom !
5

tömb

breakline · 2006. Júl. 12. (Sze), 14.41
tömbösíts a bemenetnél, és akkor pl. foreach-el végigmehetsz majd az elemeken. Mondjuk az inputok neve ne "kerdes1,kerdes2" stb.. legyen hanem "kerdesek[kerdes1], kerdesek[kerdes2]" stb..


üdv
Bl
6

oszlop

Anonymous · 2006. Júl. 12. (Sze), 18.45
Szeretnek egy nevet adni minden oszlopnak.

Peldaul:

Kerdes1|Kerdes2|Kerdes3|Kerdes4
Valasz1 |Valasz2 |Valasz3 |Valasz4
Valasz1 |Valasz2 |Valasz3 |Valasz4

Persze az oszlop neveket csak akkor szeretnem megadni amikor a fajl meg ures. Ha mar leteznek az oszlop nevek mar ne adja hoza a filehoz.

Tudnatok segiteni?
7

kerdes

Anonymous · 2006. Júl. 12. (Sze), 22.24
Elmagyarazom egyszerubben amit szeretnek.
A kovetkezo sort: Kerdes1|Kerdes2|Kerdes3|Kerdes4 szeretnem beleirni egy fajlba, de csak egyszer! Ha mar letezni fog a sor akkor ne irja meg egyszer bele, csak a tobbi adatot irja bele ami kovetkezik ujsorban. Valasz1|valasz2, stb..

Kerlek segitsetek, surgos lenne ez nekem.

Koszonom!
8

két megoldás

breakline · 2006. Júl. 12. (Sze), 23.03
az első:
olvasd vissza a teljes file-t, a php-ben fűzd hozzá, majd írd vissza
a második:
http://hu.php.net/manual/hu/function.fopen.php

<?php
$file = fopen("kerdesek.dat", "a");
?>

a':
Open for writing only; place the file pointer at the end of the file. If the file does not exist, attempt to create it.
9

nem igazan ertem...

Anonymous · 2006. Júl. 12. (Sze), 23.33
El tudnad magyarazni kicsit tobb leirasal, mert nem ertem..

$fp = fopen('/home2/devfirst/public_html/david/questdb.txt', 'a+');

$data = "Collumn1|Collumn2|Collumn3\n";
$data .= implode('|', $questions);
$data .= "\n";

fwrite ($fp, $data);
fclose ($fp);

A Collumn1|Collumn2|Collumn3 sort szeretnem a fajl elso soraba beleirni, azutan csak a tobbi adatot irja. De ha ujra inditoam a scriptet az elso sort mar ne rakja bele a fajlba.
10

két rész

breakline · 2006. Júl. 13. (Cs), 00.18
válaszd külön a részeket:

először: nézd meg létezik-e a file:
http://hu.php.net/manual/hu/function.file-exists.php
ha létezik: nyisd meg hozzáírásra ("a"), írd hozzá az új adatokat (Collumn1|Collumn2|Collumn3 nélkül), majd zárd be a file-t

ha nem létezik:
nyisd meg írásra (mint új file), írd bele először a Collumn1|Collumn2|Collumn3 sort, majd az aktuális adatot, és bezárod

Ha következőnek lefut a script, a file-t létezőnek fogja mutatni, így csak hozzáír a file-hoz
Php-ben valahogy így:

<?php
$data="";
$file="/home2/devfirst/public_html/david/questdb.txt";
if (file_exists($file)) {$mode="a+";}
else {
$mode="w+";
$data = "Collumn1|Collumn2|Collumn3\n";
}
//
$fp = fopen($file, $mode);
$data .= implode('|', $questions);
$data .= "\n";
fwrite ($fp, $data);
fclose ($fp); 
?>
üdv
BL