Avatar billede feriefun Nybegynder
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>
Avatar billede majbom Novice
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
Avatar billede tobias_louv Nybegynder
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?
Avatar billede tobias_louv Nybegynder
25. august 2009 - 21:34 #3
Jeg kan godt lige lave et lille eksempel
Avatar billede tobias_louv Nybegynder
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>
Avatar billede tobias_louv Nybegynder
25. august 2009 - 21:57 #5
Det var vist et svar :-)
Avatar billede olebole Juniormester
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>
Avatar billede tobias_louv Nybegynder
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.
Avatar billede olebole Juniormester
25. august 2009 - 22:17 #8
Ja, det kan man sagtens  =)
Avatar billede tobias_louv Nybegynder
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.
Avatar billede tobias_louv Nybegynder
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!
Avatar billede olebole Juniormester
25. august 2009 - 22:30 #11
Yups - men så bruger man bare objekt notation  =)
Avatar billede olebole Juniormester
25. august 2009 - 22:30 #12
Det er fordi, associative arrays ikke findes i JavaScript - og JSON bygger på JavaScript
Avatar billede tobias_louv Nybegynder
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
Avatar billede feriefun Nybegynder
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?
Avatar billede tobias_louv Nybegynder
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?
Avatar billede tobias_louv Nybegynder
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 ;-)
Avatar billede majbom Novice
04. november 2010 - 13:05 #17
lukketid?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester