Zum Inhalt springen

PHP: Formularinhalt in Datei/Datenbank speichern


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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 ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

<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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...