25. august 2009 - 16:19
Der er
17 kommentarer
Kan man bruge en txt fil som en slags database?
Hejsa - Jeg vil blot høre hvordan jeg kan bruge en txt som gemmelager/database på serveren? Jeg skal blot gemme data lagt ind fra besøgende som vil skrive en besked via en lille fomular (lidt gæstebogs agtigt) Kan denne form rettes til? og hvordan? <form method="POST" name="spg"> <table border="1" width="46%"> <tr> <td>navn</td> <td><p><input type="text" name="T1" size="34"></p></td> </tr> <tr> <td>telefonnummer</td> <td><input type="text" name="T2" size="34"></td> </tr> <tr> <td><input type="submit" value="Submit" name="B1"></td> <td><input type="reset" value="Reset" name="B2"></td> </tr> </table> </form>
Annonceindlæg fra Infor
25. august 2009 - 16:53
#1
hvad skal formen rettes til? at gemme i en txt-fil? du kan bruge fwrite: $fp = fopen('guestbook.txt', 'w'); fwrite($fp, 'bruger a<br>besked 1<br><br>'); fwrite($fp, 'bruger b<br>besked 2<br><br>'); fclose($fp); det er meget forenklet, men det burde kunne bruges, når det "bare" er til en gæstebog
25. august 2009 - 21:28
#2
Du kan sagtens bruge en txt-fil som en database. Man kan evt. nemt gemme et array til en fil ved at bruge $save = serialize($array) og $array = unserialize($load) Det er en meget nemt måde at gemme et array - arrayet kan bruges som tabel i din txt-database. Men har du ikke adgang til MySQL eller lignende?
25. august 2009 - 21:34
#3
Jeg kan godt lige lave et lille eksempel
25. august 2009 - 21:56
#4
Her er så det lille eksempel, jeg har lovet: <? define("BOOK_FILE", "/sti/til/hvor/filen/ligger/fil.endelse"); function load_book() { $file = BOOK_FILE; $array = @unserialize(@file_get_contents($file)); if ($array) return $array; return false; } function save_book($array) { $file = BOOK_FILE; if (($array) and (count($array) >= 1)) { $data = load_book(); if ($data) { $data[count($data)] = $array; } else { $data[0] = $array; } $fh = @fopen($file, 'w+'); $success = false; if (@fwrite($fh, serialize($data))) $success = true; @fclose($fh); if ($success) return true; return false; } } if (@$_GET["show"] == "1") { $array = load_book(); if ($array) { echo "<html>\r\n<head>\r\n<title>Gæstebog</title>\r\n</head>\r\n<body>\r\n"; echo "<pre>\r\n"; print_r($array); echo "</pre>\r\n"; echo "<a href=\"". $_SERVER["PHP_SELF"] ."\">Tilbage</a>\r\n"; echo "</body>\r\n</html>\r\n"; exit; } } if ((isset($_POST["navn"])) and (isset($_POST["nummer"]))) { $array = Array("navn"=>@$_POST["navn"], "nummer"=>@$_POST["nummer"]); if (save_book($array)) { header("location: ". $_SERVER["PHP_SELF"]. "?success=1"); } else { header("location: ". $_SERVER["PHP_SELF"]. "?success=0"); } exit; } ?> <html> <head> <title>Gæstebog</title> </head> <body> <? if (isset($_GET["success"])) { if ($_GET["success"] == "1") { echo "Din post blev oprettet."; } elseif ($_GET["success"] == "0") { echo "Din post blev oprettet. Prøv igen eller kontakt webmaster."; } } ?> <form method="POST" name="spg"> <table border="1" width="46%"> <tr> <td>navn</td> <td><p><input type="text" name="navn" size="34"></p></td> </tr> <tr> <td>telefonnummer</td> <td><input type="text" name="nummer" size="34"></td> </tr> <tr> <td><input type="submit" value="Submit" name="B1"></td> <td><input type="reset" value="Reset" name="B2"></td> </tr> <tr> <td colspan="2"><a href="?show=1">Vis indhold</a></td> </tr> </table> </form> </body> </html>
25. august 2009 - 21:57
#5
Det var vist et svar :-)
25. august 2009 - 22:07
#6
<ole>
Nu gælder det jo om at spare så meget på pladsen som muligt, når der er tale om data i en tekstfil. Derfor kan det nok betale sig at bruge PHPs to
JSON funktioner:
$save = json_encode($array) $array = json_decode($load)
Jeg har ikke lige testet det, men jeg formoder, den gemte streng bliver kortere =)
/mvh
</bole>
25. august 2009 - 22:14
#7
Det må jeg give dig ret i, at man må formode. Jeg må indrømme, at jeg ikke kendte til denne json-funktion. Det burde dog være muligt at implementere det i det andet script, jeg har skrevet.
25. august 2009 - 22:17
#8
Ja, det kan man sagtens =)
25. august 2009 - 22:21
#9
Jeg har lige prøvet med lidt over 1000 poster, og man kan se en markant forskel. Faktisk snakker vi mindre halvt pladsforbrug.
25. august 2009 - 22:25
#10
Men der er en forsekel, når man decoder, fordi jeg bruger keys. Man får stdClass Objects ud af det i stedet for arrays!
25. august 2009 - 22:30
#11
Yups - men så bruger man bare objekt notation =)
25. august 2009 - 22:30
#12
Det er fordi, associative arrays ikke findes i JavaScript - og JSON bygger på JavaScript
25. august 2009 - 23:02
#13
aha... også derfor, der er {key:value,key:value} når man bruger keys, når man bruger [value,value] ellers... jamen så blev jeg da klogere
25. august 2009 - 23:55
#14
tak for god input. hvordan skal så den færdige kode se ud med $save = json_encode($array) ? kan man i øvrigt rette i sådan en tekst fil, ligesom man kan i en database?
26. august 2009 - 00:10
#15
Første del er utrolig simpel, du retter bare serial... og unserial... til json_en... og jsonde... Jeg har lige rettet nogle enkelte andre ting også: <? define("BOOK_FILE", "/Apache/htdocs/exp/book.txt"); function load_book() { $file = BOOK_FILE; $array = @json_decode(@file_get_contents($file)); if ($array) return $array; return false; } function save_book($array) { $file = BOOK_FILE; if (($array) and (count($array) >= 1)) { $data = load_book(); if ($data) { $data[count($data)] = $array; } else { $data[0] = $array; } $fh = @fopen($file, 'w+'); $success = false; if (@fwrite($fh, @json_encode($data))) $success = true; @fclose($fh); if ($success) return true; return false; } } if (@$_GET["show"] == "1") { $array = load_book(); if ($array) { echo "<html>\r\n<head>\r\n<title>Gæstebog</title>\r\n</head>\r\n<body>\r\n"; echo "<pre>\r\n"; print_r($array); echo "</pre>\r\n"; echo "<a href=\"". $_SERVER["PHP_SELF"] ."\">Tilbage</a>\r\n"; echo "</body>\r\n</html>\r\n"; exit; } } if ((isset($_POST["navn"])) and (isset($_POST["nummer"]))) { $array = Array("navn"=>@$_POST["navn"], "nummer"=>@$_POST["nummer"]); if (save_book($array)) { header("location: ". $_SERVER["PHP_SELF"]. "?success=1"); exit; } else { header("location: ". $_SERVER["PHP_SELF"]. "?success=0"); exit; } exit; } ?> <html> <head> <title>Gæstebog</title> </head> <body> <? if (isset($_GET["success"])) { if ($_GET["success"] == "1") { echo "Din post blev oprettet."; } elseif ($_GET["success"] == "0") { echo "Din post blev oprettet. Prøv igen eller kontakt webmaster."; } } ?> <form method="POST" name="spg"> <table border="1" width="46%"> <tr> <td>navn</td> <td><p><input type="text" name="navn" size="34"></p></td> </tr> <tr> <td>telefonnummer</td> <td><input type="text" name="nummer" size="34"></td> </tr> <tr> <td><input type="submit" value="Submit" name="B1"></td> <td><input type="reset" value="Reset" name="B2"></td> </tr> <tr> <td colspan="2"><a href="?show=1">Vis indhold</a></td> </tr> </table> </form> </body> </html> Anden del forstår jeg simpelthen ikke, hvad mener du?
26. august 2009 - 00:12
#16
Btw, de der @'er har jeg tilføjet for at undgå at modtage fejlmeddelelser - hvis der skulle opstå nogle problemer, så fjern evt. nogle af @'erne... Nu fik du den side, jeg afprøvede på, så kan du se, hvor min htdocs ligger ;-)
04. november 2010 - 13:05
#17
lukketid?
Vi tilbyder markedets bedste kurser inden for webudvikling