• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage Mehrere Textarea's über einen Submitbutton in mehrere txt Files speichern

fothik

Neues Mitglied
Hey Ihr.

Ich bin überzeugt davon, dass es dafür auch eine Dokumentation gibt. aber ich weis nicht wie ich danach suchen soll,
bzw meine Art zu Googeln hat bis jetzt zu keinem gewünschten Ergebniss geführt.
Falls Ihr mich zu einer Doku verweisen könnt, die mich hierbei unterstützen könnte nur zu :-)

Ich habe folgendes Formular, um einzutragen wer an welchem Tag Früh oder Spätschicht hat.

HTML:
<form action="" method="post">
    <table class="tg">
      <tr>
        <th class="tg-yw4l"></th>
        <th class="tg-yw4l">Montag</th>
        <th class="tg-yw4l">Dienstag</th>
        <th class="tg-yw4l">Mittwoch</th>
        <th class="tg-yw4l">Donnerstag</th>
        <th class="tg-yw4l">Freitag</th>
      </tr>
      <tr>
        <td class="tg-yw4l">Früh</td>
        <td class="tg-yw4l">
            <textarea  class="TV" name="moF"><?php echo htmlspecialchars($moF) ?></textarea>
        </td>
        <td class="tg-yw4l">
            <textarea class="TV" name="diF"><?php echo htmlspecialchars($diF) ?></textarea>
        </td>
        <td class="tg-yw4l">
            <textarea  class="TV" name="miF"><?php echo htmlspecialchars($miF) ?></textarea>
        </td>
        <td class="tg-yw4l">
            <textarea  class="TV" name="doF"><?php echo htmlspecialchars($doF) ?></textarea>
        </td>
        <td class="tg-yw4l">
            <textarea  class="TV" name="frF"><?php echo htmlspecialchars($frF) ?></textarea>
        </td>
      </tr>
      <tr>
        <td class="tg-yw4l">Späht</td>
        <td class="tg-yw4l">
            <textarea  class="TV" name="moS"><?php echo htmlspecialchars($moS) ?></textarea>
        </td>
        <td class="tg-yw4l">
            <textarea  class="TV" name="diS"><?php echo htmlspecialchars($diS) ?></textarea>
        </td>
        <td class="tg-yw4l">
            <textarea  class="TV" name="miS"><?php echo htmlspecialchars($miS) ?></textarea>
        </td>
        <td class="tg-yw4l">
            <textarea  class="TV" name="doS"><?php echo htmlspecialchars($doS) ?></textarea>
        </td>
        <td class="tg-yw4l">
            <textarea class="TV" name="frS"><?php echo htmlspecialchars($frS) ?></textarea>
        </td>
      </tr>
    </table>
    <input type="submit" value="Speichern" />
</form>

Ich habe nun für jeden Wochentag folgenden PHP Script mit dementsprechend angepassten Variabeln um dazugehörige .txt Files auszulesen (ja jeder Wochentag Früh und Späht hat ein eigenes .txt) und theoretisch mit deim Submit-butten zu speichern.
PHP:
<!-- Read&Write moF INFOS -->
<?php
// configuration
$url = 'http://localhost/folder/admin.php';
$file = './data/TV/montagF.txt';
// check if form has been submitted
if (isset($_POST['moF']))
{
    // save the text contents
    file_put_contents($file, $_POST['moF']);

    // redirect to form again
    header(sprintf('Location: %s', $url));
    printf('<a href="%s">Moved</a>.', htmlspecialchars($url));
    exit();
}
// read the textfile
$moF = file_get_contents($file);
?>

<!-- Read&Write moS INFOS -->
<?php
// configuration
$url = 'http://localhost/folder/admin.php';
$file = './data/TV/montagS.txt';
// check if form has been submitted
if (isset($_POST['moS']))
{
    // save the text contents
    file_put_contents($file, $_POST['moS']);

    // redirect to form again
    header(sprintf('Location: %s', $url));
    printf('<a href="%s">Moved</a>.', htmlspecialchars($url));
    exit();
}
// read the textfile
$moS = file_get_contents($file);
?>

<!-- usw ... -->

So wird aber nur die erste Textarea gespeichert. Die Restlichen werden ignoriert. Das Auslesen funktioniert einwandfrei.
Würd ich für jede Textarea eine Form mit Submit-button machen, würde dies gehen. ich möchte aber genau dies umgehen und alle mit einem Klick speichern.

VIelen Dank für Feedback.
Grüsse
 
Warum um alles in der Welt nutzt du dafür keine Datenbank?

Nenne alle Textareas für die Frühschicht name="frueh[]" und für die Spätschicht name="spaet[]". Dann kannst du in einer Schleife die Daten speichern.

PS: Spät mit h :D:D:D

<edit>
Ungetestet:
PHP:
<?php
  $path = './data/TV/';

  $days = array("montag", "dienstag", "mittwoch", "donnerstag", "freitag");

  if (isset($_POST['frueh']))
  {
    $count = $_POST['frueh'];
  
    for ($i = 0; $i < $count; $i++)
    {
        file_put_contents($path . $days[$i] . "F.txt", $_POST['frueh'][$i]);
        file_put_contents($path . $days[$i] . "S.txt", $_POST['spaet'][$i]);
    }
  }
?>
</edit>
 
Zuletzt bearbeitet von einem Moderator:
Mmmh ich wollte gerade posten und dann kam die Nachricht, dass du geschrieben hattest. Du hast mir also quasi den Thread vor der Nase weggeschnappt ;) (passiert ziemlich häufig)
Damit ich trotzdem helfen kann, bezog ich mich dann darauf:
Falls Ihr mich zu einer Doku verweisen könnt, die mich hierbei unterstützen könnte nur zu
und habe ihm dann ein paar Hilfestellungen zum Thema Datenbanken gegeben, da er anscheinend noch nie mit welchen gearbeitet hat.
 
Wir wissen doch nicht, warum fothik keine Datenbank benutzt, deshalb ist es sinnbefreit, wenn man Tutorials zu Datenbank postet. Man könnte ja auch Tutorials zu irgendwelchen Frameworks posten, mit denen man bestimmt sehr leicht auf die Tabellenstruktur im HTML-Code verzichten könnte.
 

Hey Ihr 2
Vielen dank schonmal für euer erstes Feedback!
Keine Datenbank weil dies so gewünscht wurde.
Ich habe aber durchaus bei DB's nachholbedarf und gönne mir desshalb gerne noch die Artikel :) Merci.

@Scatello
Dein PHP Script funktioniert grundsätzlich.
Er speichert tatsächlich alle Änderungen in die entsprechenden .txt files.
Für mich unverständlicherweise erzeugt dieser aber noch zusätzlich eine S.txt und F.txt Datei.
Was aber eigentlich die Tragödie ist, dein Code endet in einem "undefined offset" Fehler.
Ich scheine dein Code nicht korrekt zu verstehen, weil jede Änderung die ich versucht habe im Gedanken, dass dieses Problem damit behoben sein sollte endete in der Regel im selben Fehler + dass die .txt files nicht geschrieben werden..


btw, wenn wir schon am Kürzen des Codes sind. ich habe das Auslesen nun mit einer foreach gelöst, damit ich nicht für jedes File einen Copy Paste Code haben muss.

PHP:
<?php
   $url = 'http://localhost/SITASYS/admin.php';
   $path = './data/TV/';
   $file = array("montagF.txt", "montagS.txt", "dienstagF.txt", "dienstagS.txt", "mittwochF.txt", "mittwochS.txt", "donnerstagF.txt", "donnerstagS.txt", "freitagF.txt", "freitagS.txt");
 
   foreach($file as $item) {
       $tv[] = file_get_contents($path . $item); 
   }
?>

Grüsse
 
Zeige nochmal das aktuelle Formular und das aktuelle Script

Formular
HTML:
<form action="" method="post">
   <table class="tg">
     <tr>
       <th class="tg-yw4l"></th>
       <th class="tg-yw4l">Montag</th>
       <th class="tg-yw4l">Dienstag</th>
       <th class="tg-yw4l">Mittwoch</th>
       <th class="tg-yw4l">Donnerstag</th>
       <th class="tg-yw4l">Freitag</th>
     </tr>
     <tr>
       <td class="tg-yw4l">Früh</td>
       <td class="tg-yw4l">
           <textarea  class="TV" name="frueh[]"><?php echo htmlspecialchars($tv[0]) ?></textarea>
       </td>
       <td class="tg-yw4l">
           <textarea class="TV" name="frueh[]"><?php echo htmlspecialchars($tv[2]) ?></textarea>
       </td>
       <td class="tg-yw4l">
           <textarea  class="TV" name="frueh[]"><?php echo htmlspecialchars($tv[4]) ?></textarea>
       </td>
       <td class="tg-yw4l">
           <textarea  class="TV" name="frueh[]"><?php echo htmlspecialchars($tv[6]) ?></textarea>
       </td>
       <td class="tg-yw4l">
           <textarea  class="TV" name="frueh[]"><?php echo htmlspecialchars($tv[8]) ?></textarea>
       </td>
     </tr>
     <tr>
       <td class="tg-yw4l">Späht</td>
       <td class="tg-yw4l">
           <textarea  class="TV" name="spaet[]"><?php echo htmlspecialchars($tv[1]) ?></textarea>
       </td>
       <td class="tg-yw4l">
           <textarea  class="TV" name="spaet[]"><?php echo htmlspecialchars($tv[3]) ?></textarea>
       </td>
       <td class="tg-yw4l">
           <textarea  class="TV" name="spaet[]"><?php echo htmlspecialchars($tv[5]) ?></textarea>
       </td>
       <td class="tg-yw4l">
           <textarea  class="TV" name="spaet[]"><?php echo htmlspecialchars($tv[7]) ?></textarea>
       </td>
       <td class="tg-yw4l">
           <textarea class="TV" name="spaet[]"><?php echo htmlspecialchars($tv[9]) ?></textarea>
       </td>
     </tr>
   </table>
   <input type="submit" value="Speichern" />
</form>

PHP Script
PHP:
<?php
    $url = 'http://localhost/SITASYS/admin.php';
    $path = './data/TV/';
    $file = array("montagF.txt", "montagS.txt", "dienstagF.txt", "dienstagS.txt", "mittwochF.txt", "mittwochS.txt", "donnerstagF.txt", "donnerstagS.txt", "freitagF.txt", "freitagS.txt");
   
    foreach($file as $item) {
        $tv[] = file_get_contents($path . $item);  
    }
?>

<?php
  $path = './data/TV/';
  $days = array("montag", "dienstag", "mittwoch", "donnerstag", "freitag");
 
  if (isset($_POST['frueh']))
  {
    $count = $_POST['frueh'];
 
    for ($i = 0; $i < $count; $i++)
    {
        file_put_contents($path . $days[$i] . "F.txt", $_POST['frueh'][$i]);
        file_put_contents($path . $days[$i] . "S.txt", $_POST['spaet'][$i]);
    }
  }
?>
 
Zuletzt bearbeitet:
Ändere
PHP:
$count = $_POST['frueh'];
in
PHP:
$count = count($_POST['frueh']);
 
Zurück
Oben