Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

PHP: Formularinhalt in Datei/Datenbank speichern

Empfohlene Antworten

Veröffentlicht

Hallo,

bin heute das erste Mal mit PHP in Kontakt gekommen und soll hier ein Script schreiben, welches einen Formular-Eintrag (eine Kundennummer) in einer Datenbank speichert. Wie mache ich das am einfachsten mit PHP/HTML ? So sieht das bisher in HTML aus:

<html>

<head>

<title>Formular mit PHP</title>

</head>

<body>

<h1>Beispiel-Formular</h1>

<form action="input_text.htm">

<p>Kundennummer:<br>

<input name="kundennumer" type="text" size="30" maxlength="30">

</p>

</form>

</body>

</html>

Da will ich jetzt einen Button einfügen, bei dem nach einem Klick die Zahl im Formular Kundennummer in einer Datenbank gespeichert wird. Wie mache ich das am besten ?

Thx

Hallo!

Ich glaube kaum, das dir hier jemand eine Einführung in PHP gibt.

Für sowas nimmt man sich ein Buch und ließt oder schlägt nach.

Günstig und aktuell ist für den Einstieg z.B.:

http://www.amazon.de/exec/obidos/ASIN/349961233X/302-1554558-5888864

Gruß Jaraz

formular datei: (HTML)

<html>

<head>

<title>Formular mit PHP</title>

</head>

<body>

<h1>Beispiel-Formular</h1>

<form action="insert.php" method="post">

<p>Kundennummer:<br>

<input name="kundennumer" type="text" size="30" maxlength="30">

</p>

<input type=submit value=abschicken name=submitbutton>

</form>

</body>

</html>

insert php:

$kundennummer = $_POST["kundennummer"]

$filepointer = fopen("testdatei.txt","a+");

fwrite($filepointer,$kundennummer);

fcolse($filepointer);

so könnte das mit einer datei aussehen!

Gruß

kills

  • Autor

@kills

Vielen Dank für Deine Tips. Ich habe diese Dateinen mal erstellt und auf den Webserver hochgeladen, aber es kommt eine Fehlermeldung, nachdem ich auf den Button geklickt habe:

Parse error: parse error, unexpected T_VARIABLE in /is/htdocs/23649/www.xxx.de/xxx/insert.php on line 3

In Line 3 steht folgender Text: $filepointer = fopen("testdatei.txt","a+");

Was habe ich falsch gemacht ? Sorry, aber ich bin überhaupt nicht so der Programmier-Spezi...

Alle Dateien (insert.php; testdatei.txt und das Formular befinden sich auf dem Webserver). Vielleicht liegt es daran, dass die Datei "testdatei.txt" leer ist ?

hi,

der fehler war eine zeile davor

$kundennummer = $_POST["kundennummer"];

Gruß

kills

PS:

Ich bin auch FiSi :)

  • Autor

Ok, korrigiert, aber jetzt geht's erst richtig los mit Fehlermeldungen: :D

failed to create stream: Permission denied in /is/htdocs/23649/www.xxx.de/xxx/insert.php on line 3

Warning: fwrite(): supplied argument is not a valid stream resource in /is/htdocs/23649/www.xxx.de/xxx/insert.php on line 4

Warning: fclose(): supplied argument is not a valid stream resource in /is/htdocs/23649/www.xxx.de/xxx/insert.php on line 5

Servus,

ist aber alles wegen dem selben.

Du hast keine Berechtigung, auf ein File zuzugreifen.

Liegt evtl. an den Berechtigungen des Verzeichnisses / Files oder an den Einstellungen in der php.ini. Wobei Du bei zweiterem einfach mal suchen müsstest, oder auf jemanden warten, der fitter ist - Huhu, Jarahaaaaaz.

Peter

  • Autor

Hm, also in dem Verzeichnis ging sonst alles wunderbar: Einfügen, löschen, umbenennen von Dateien usw.

Ich frag' aber nochmal nach diesen Berechtigungen....

Jetzt hat's endlich geklappt. Er schreibt den Kram jetzt in die leere Datei.

Wie kann ich das jetzt so einstellen, dass er die Einträge untereinander schreibt und nicht hintereinander ? Muss ich da irgendwo ein /n einfügen, wenn ja wo ?

Hallo :)

öffne mal dein FTP-Programm:

Dort gehst du auf die Datei, die die Rechte erhalten soll. Dann RECHTSKLICKEN und auf CHMOD gehen. Dort musst du die 3Stellige Zahl in 777 umändern und auf übernehmen drücken.

So einfach ist das :)

Schönen Gruß

Claus

Und wegen dem Zeilenumbruch: in \n bzw \r\n bringen diesen auf Unix bzw Windows (\r auf Mac OS bis 9 AFAIK)

Peter

hasst du auch schön brav \r\n gemacht? (Windows)....

kurze zwischenfrage:

(wollte keinen eigenen Thread wegen solch einer Kleinigkeit öffnen)

worin besteht der unterschied zwischen $_POST[] und $HTTP_POST_VARS[] ?

Gruß

kills

Handbuch sagt:

$HTTP_POST_VARS

Ein assoziatives Array aus Varaiblen, welches dem aktuellen Skript per HTTP-POST-Methode übergeben wurde.

$_POST

Ein assoziatives Array aus Variablen, welches dem aktuellen Skript per HTTP-POST-Methode übergeben wurde. Automatisch global in jedem Geltungsbereich. Eingeführt in PHP 4.1.0.

danke. habs verpeilt. Im handbuch hätte ich ja auch schauen können....

:floet:

  • Autor

So, neue Frage. :)

Wie kann ich das aktuelle Datum ausgeben ? Von wo aus holt er sich eigentlich das Datum ?

$datum = date("d.m.Y",$timestamp); --> dies liefert nur den 1.7.1970; Ich will aber den 20.08.2003 haben.

Thx

  • Autor

So, bin jetzt schon etwas weiter mit PHP. Jetzt will ich etwas komplizierteres machen.

Ich will, dass mir das Script eine Liste mit ID, Kundennummer, Eintragsdatum in eine Datei mit dem Namen "Positivliste.txt" schreibt.

Es gibt in der mySQL Datenbank eine Tabelle mit dem Namen "Positivliste", wo zuerst die Sachen reingeschrieben werden und dann mittels SELECT Abfrage wieder ausgelsen werden. Es klappt auch ganz gut mit der Ausgabe auf dem Bildschirm.

Ich will dies jedoch alles in der Datei Positivliste.txt haben und nicht im Browser- Fenster. Ich hoffe Ihr versteht, was ich meine. :)

Hier mal mein Quelltext:

html>

<head> </head>

<title> Eintrag geschrieben </title>

<?

require("connect.php");

$kundennummer = $_POST["kundennummer"];

?>

<body> <h3> Der Eintrag wurde erfolgreich in die Datenbank geschrieben</h3>

<?

$datum = date("d.m.Y");

//Der Verweis auf das Ergebnis des neuen Eintrags wird in der Variablen result gespeichert.

$result=mysql_query("INSERT INTO positivliste (kdnr,eintragsdatum) VALUES ($kundennummer,'$datum')");

//Abfragen von ID (fortlaufend), Kundennummer und Eintragsdatum von der Tabelle Positivliste.

$result=mysql_query("SELECT ID, kdnr, eintragsdatum FROM positivliste");

//Nun werden die Zeilen des abgefragten Ergebnissen solange durchlaufen, bis er keine mehr findet.

while($zeile=mysql_fetch_array($result)){

echo $zeile["ID"]." ";

echo $zeile["kdnr"]." ";

echo $zeile["eintragsdatum"]."<br>";

}

?>

</body>

</html>

Das, was ich bei "echo" ausgebe, möchte ich in die Datei Positivliste.txt haben.

Wie geht das ? Wäre nett, wenn noch jemand der PHP-Profis ein Tip hätte.

Wenn ich dir einen Tipp geben darf:

achte bitte darauf, dass Du mögliche "Fehlermeldungen" vermeidest... :-) Das ist für den User immer sehr störend und kann dir ggfs. die seite zerschießen. Schreib die Datanbankanfragen bitte so:

(Beispiel für dein Select)


$result=mysql_query("SELECT ID, kdnr, eintragsdatum FROM positivliste");
[/php]

(Andere Art)

[php]
$result = @mysql_query("SELECT ID, kdnr, eintragsdatum FROM positivliste");

if (!$result) {
echo ("<p>Bei der Abfrage ist ein Fehler aufgetreten...</p>");

exit();
}

@ = damit verhindert man, dass die Funktionen (z.B.: mysql_connect()) Fehlermeldungen ausgeben.

! $result = das "!" ist ein Negationsoperator, der prinzipiell true in false umkehr. (ebenfalls false in true.. ;-))

exit() = bedeutet, dass der interpreter ab diesem Punkt nicht mehr die Seite durchsucht... :)

Vielleicht braucht kannst du das ja gebrauchen :)

Schönen Gruß

Claus

  • Autor

Hört sich gut an, wobei zunächst ja nur ich selber mit dem Script arbeite. Deshalb machen mir Fehlermeldungen erst mal nix aus. Dann sehe ich nämlich, wo ich Fehler gemacht habe. ;)

Wenn alles funktioniert, kann man ja immer noch "Schönschrift" verwenden...

<html>

<head> </head>

<title> Eintrag geschrieben </title>

<?

require("connect.php");

$kundennummer = $_POST["kundennummer"];

?>

<body> <h3> Der Eintrag wurde erfolgreich in die Datenbank geschrieben</h3>

<?

$datum = date("d.m.Y");

//Der Verweis auf das Ergebnis des neuen Eintrags wird in der Variablen result gespeichert.

$result=mysql_query("INSERT INTO positivliste (kdnr,eintragsdatum) VALUES ($kundennummer,'$datum')");

//Abfragen von ID (fortlaufend), Kundennummer und Eintragsdatum von der Tabelle Positivliste.

$result=mysql_query("SELECT ID, kdnr, eintragsdatum FROM positivliste");

//Nun werden die Zeilen des abgefragten Ergebnissen solange durchlaufen, bis er keine mehr findet.

$txt = "";

while($zeile=mysql_fetch_array($result)){

$txt .= $zeile["ID"]." ";

$txt .= $zeile["kdnr"]." ";

$txt .=$zeile["eintragsdatum"]."<br>";

}

$filepointer = fopen('./deinedatei.txt',"a");

fwrite($filepointer,$txt);

fclose($filepointer);

?>

</body>

</html>

meine Änderungen sind fett markiert.

hast du oben beim html tag das "<" vergessen?

  • Autor

@kills

Danke für Deinen Quelltext. Ich habe das mal eingefügt, aber er zeigt mir nur den letzten eingegebenen Eintrag an:

57535422.08.2003

Warum macht er keine Lücke zwischen den einzelnen Teilen, z.B. so:

57 5354 22.08.2003

Wo sind die Datensätze 1-56 geblieben ?

Edit: Die ersten Datensätze zeigt er mir an, aber sowohl in Word als auch mit Editor erscheinen die Einträge zerhackt:

1 548454 01.01.1970<br>2 9848487 01.01.1970<br>3 1255457 01.01.1970<br>4 5448716 01.01.1970<br>5 15789 01.01.1970<br>6 54654 20.08.2003<br>7 15751 20.08.2003<br>8 1584 20.08.2003<br>9 125 20.08.2003<br>10 123 20.08.2003<br>11 12657 20.08.2003<br>12 12657 20.08.2003<br>13 1257 20.08.2003<br>14 2587 20.08.2003<br>15 26574 20.08.2003<br>16 2584 20.08.2003<br>17 285 20.08.2003<br>18 128 20.08.2003<br>19 12568 20.08.2003<br>20 1258 20.08.2003<br>21 2568 20.08.2003<br>22 1257 20.08.2003<br>23 1258 20.08.2003<br>24 1257 20.08.2003<br>25 25845 20.08.2003<br>26 12567 20.08.2003<br>27 2356877 20.08.2003<br>28 512 20.08.2003<br>29 12589 22.08.2003<br>30 1599 22.08.2003<br>31 1499 22.08.2003<br>32 599 22.08.2003<br>33 259 22.08.2003<br>34 667 22.08.2003<br>35 667 22.08.2003<br>36 866 22.08.2003<br>37 1500 22.08.2003<br>38 1800 22.08.2003<br>39 1833 22.08.2003<br>40 1833 22.08.2003<br>41 733 22.08.2003<br>42 54345 22.08.2003<br>43 1258 22.08.2003<br>44 1833 22.08.2003<br>45 2133 22.08.2003<br>46 6999 22.08.2003<br>47 98787 22.08.2003<br>48 15984 22.08.2003<br>49 128 22.08.2003<br>50 1287 22.08.2003<br>51 5852 22.08.2003<br>52 85674 22.08.2003<br> usw.

Ach komm, user103109,

wenn Du schon fertige Quelltexte bekommst, dann schau sie halt auch an, und überleg erst mal selber!

Lass Dir zu Debug-Zwecken das erstellte Query nochmal ausgeben, damit Du weisst, was an die Datenbank gegangen ist.

Dann benutz einen Schleifenzähler, den Du ausgibst, mit den in der Schleife ermittelten Werten. Daran siehst Du, wie sich $txt verändert.

Und wenn irgendwas ist, wo Du wirklich nicht mehr weiterkommst, dann stell noch mal eine vernünftige Frage.

Denn wie Jaraz schon gesagt hat, es ist nicht Sinn der Sache, dass andere Deine Aufgaben machen, sondern hier soll Hilfe geboten werden, wenn man nicht mehr weiterkommt.

Peter

  • Autor

Naja, wenn ich weiter wüsste, würde ich wohl kaum hier was posten, oder ?

Habe ja geschrieben, dass ich da noch Anfänger bin und das erst seit 3 Tagen mache..

Also die Echo Ausgabe ist einwandfrei im Browser. Alle Einträge sind schön untereinander wie es sein soll. Aber die TXT-Datei will nicht so recht. Es muss also an folgenden Teil liegen:

$txt .= $zeile["ID"]." ";

$txt .= $zeile["kdnr"]." ";

$txt .= $zeile["eintragsdatum"]."<br>";

Wie Ihr seht (oder auch nicht ;)), habe ich auch schon mal mit nbsp probiert, aber trotzdem schreibt er alles hintereinander. Das <br> wird ebenfalls in Word (und Editor) angezeigt.

Das er das <br> anzeigt ist ja klar. Schliesslich schiebst Du es in den String mit rein.

Das die Einträge ohne Zeilenumbruch in die Datei geschrieben werden, liegt daran, dass Du keinen Zeilenumbruch machst. \r\n (Windows) oder \n (Linux) sind Dein Freund.

Die Sache mit den Leerzeichen kann ich so nicht nachvollziehen, da ich dort keinen Fehler sehe.

Peter

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.