[PHP/MYSQL] inhalt "form" in Datenbank eintragen.

Status
Für weitere Antworten geschlossen.
E

Eichi

Gast
Hallo zusammen,
dies ist jetzt mein erster versuch einen Datensatz den man in ein formular schreibt in eine Datenbank ein zu tragen. Leider funktioniert es nicht und da ich ja noch nicht wirklich viel ahnung von php und mySQL habe, weiß ich nicht woran es liegt. Ich habe mir verschiedene Teile aus verschiedenen Seiten rausgebaut und diese dan reingebastelt...könnte vielleicht jemand kurz drüber schauen?
Wenn ich einen eintrag machen will wird mir ausgegeben:
Parse error: parse error in c:\programme\easyphp1-8\www\formular\script\submit_form.php on line 23

HTML:
            <form action="script/submit_form.php" method="post">
               <input type="text" name="txtname" maxlength=30 size=30 value="Name"><br />
               <input type="text" name="txtalias" maxlength=16 size=30 value="Alias"><br />
               <input type="text" name="txtsubject" maxlength=60 size=30 value="Subject"><br />
               <textarea name="txtmessage" cols="50" rows="8"></textarea><br />
               <input type="submit" value="Submit">
            </form>
Und die PHP datei:
PHP:
<?php

	$name=		$_post['txtname'];
	$alias=		$_post['txtalias'];
	$subject=	$_post['txtsubject'];
	$message=	$_post['txtmessage'];

function db_connect()
{
	$db_server='localhost';
	$db_user='root';
	$db_password='';
	$db_name='dbtest';
	$db_table ='registration';

	$connection=mysql_connect($db_server,$db_user,$db_password);
	if (!$connection)
		die("can't connect to server");
	if (!mysql_select_db($db_name, $connection))
		die ("Can't talk to the database");

	mysql_select_db($db_name, $connection);
	sql = "INSERT INTO $db_table VALUES ($_POST['name'], $_POST['alias'], $_POST['subject'], $_POST['message'])";
	$output = "saved!";

	sql_query($sql) or die ("sql insert failure");

	mysql_close($connection);
	echo $output;
}

?>

Wäre für eure Hilfe dankbar.
 
Zuletzt bearbeitet von einem Moderator:
Simpler Fehler: du hast ein $ vor dem Variablennamen $sql vergessen (Zeile 23, wie die Ausgabe schon sagt)

Außerdem noch eine Anmerkung: Wenn du schon XHTML Konform schreibst (deine Zeilenumbrüche) dann tu das auch konsequent, also auch die Inputs mit /> schließen.

mfg

/edit: habe gerade festgestellt, dass dann immernoch ein Error kommt. Die ganze Zeile also so schreiben:
PHP:
$sql = "INSERT INTO ".$db_table." VALUES (".$_POST['name'].", ".$_POST['alias'].", ".$_POST['subject'].", ".$_POST['message'].")";
 
Zuletzt bearbeitet:
Danke für die Hilfe, leider klappt es immernoch nicht.
HTML:
Notice: Undefined variable: _post in c:\programme\easyphp1-8\www\formular\script\submit_form.php on line 3
Notice: Undefined variable: _post in c:\programme\easyphp1-8\www\formular\script\submit_form.php on line 4
Notice: Undefined variable: _post in c:\programme\easyphp1-8\www\formular\script\submit_form.php on line 5
Notice: Undefined variable: _post in c:\programme\easyphp1-8\www\formular\script\submit_form.php on line 6

Dadurch, dass ich jetzt in der einen Zeile ".$_POST['name']." habe mag er die variablen oben nicht mehr. Was genau mag er da denn jetzt nicht?

Mit xhmtl kenn ich mich noch nicht aus, daher weiß ich jetzt nicht die unterschiede in den tags. Mir ist nur aufgefallen dass überall <br /> anstatt <br> benutzt wird, deshalb hab ich es mir dann auch angewöhnt.

Edit: Und wofür genau steht eigentlich der tag $db_table ='registration'; ? Habe es in einem anderen script gesehen und dann übernommen. Die Funktion ist mir jedoch unbekannt.
 
Zuletzt bearbeitet von einem Moderator:
Das superglobale Array $_POST heißt $_POST und nicht $_post.
Im Übrigen ist $_POST['foobar'] nunmal beim ersten Aufruf des Formulars undefined. Du brauchst noch eine if-Kontrollstruktur, die überprüft, ob das Forumlar überhaupt schon abgesendet wurde.
Deinem Submit-Button verpasst du noch einen name wie zum Beispiel ganz einfach submit.
Dann kannst du überprüfen, ob das Forumlar abgesendet wurde, indem du if (isset($_POST['submit'])) notierst.
 
Zuletzt bearbeitet:
Ja, sorry dass ich das nicht bemerkt habe, da ich den Code einfach schnell auf meinem lokalen Server ausgeführt habe und da kein fehler mehr kam. D.h. Ich habe nur geprüft ob der Code ansich fehlerfreies PHP ist und nicht ob er seinen Zweck erfüllt.
mfg
 
Achso. Nun mein Quelltext sieht jetzt so aus:
Ist es jetzt richtig? Wenn ich auf submit drücke werde ich zu einer leere Seite gelinkt und es wird kein eitnrag gemacht.

Ich bin mir nicht sicher ob ich if (isset($_POST['submit'])) an der richtige Stelle eingesetzt habe...

HTML:
           <form action="script/submit_form.php" method="post">
               <input type="text" name="txtname" maxlength=30 size=30 value="Name"><br />
               <input type="text" name="txtalias" maxlength=16 size=30 value="Alias"><br />
               <input type="text" name="txtsubject" maxlength=60 size=30 value="Subject"><br />
               <textarea name="txtmessage" cols="50" rows="8"></textarea><br />
               <input type="submit" name="submit" value="Submit">
            </form>
PHP:
<?php

	$name=		$_POST['txtname'];
	$alias=		$_POST['txtalias'];
	$subject=	$_POST['txtsubject'];
	$message=	$_POST['txtmessage'];
         $submit=	$_POST['submit'];  

function db_connect()
{
	$db_server='localhost';
	$db_user='root';
	$db_password='';
	$db_name='dbtest';
	$db_table ='registration';

	$connection=mysql_connect($db_server,$db_user,$db_password);
	if (!$connection)
		die("can't connect to server");
	if (!mysql_select_db($db_name, $connection))
		die ("Can't talk to the database");

	mysql_select_db($db_name, $connection);
	$sql = "INSERT INTO ".$db_table." VALUES (".$_POST['name'].", ".$_POST['alias'].", ".$_POST['subject'].", ".$_POST['message'].")";
	$output = "saved!";
	if (isset($_POST['submit']));

	sql_query($sql) or die ("sql insert failure");

	mysql_close($connection);
	echo $output;
}

?>
 
Zuletzt bearbeitet von einem Moderator:
Hast du vor PHP zu lernen oder brauchst du nur einmalig ein Skript für eine bestimmte Aufgabe?
 
Ich habe schon vor es zu lernen. Ich habe mir auch schon tutorials angesehen aber irgendwie komm ich dabei mit dieser aufgabe nicht ganz weiter.

Was mir noch aufgefallen ist, ist das die function da zwar steht aber nicht aufgerufen wird. Da ja aber sowieso alles was in dieser datei drinne steht aufgerufen werden soll, kann man die function zeile löschen...oder?
 
Zuletzt bearbeitet von einem Moderator:
Okay, wenn du es lernen willst und nicht jetzt sofort die Lösung für ein bestimmtes Problem brauchst, dann lass mal den von dir geposteten Code ganz schnell links liegen und beschäftige dich mal mit den Basics. Sry, aber dein Code ist so dermaßen fehlerhaft das man davon ausgehen muss, dass du von programmieren eigentlich noch nichts verstehen hast.

Die "Funktion"
PHP:
if (isset($_POST['submit']));
ist nur der Gipfel vom Eisberg. :D (nicht böse gemeint)

Aber bevor man iwas mit dankenbanken anfangen will, sollte man schon mal sich bisschen mit basics beschäftigt haben.

Arbeite Bücher/Tuts durch und übernehme nicht einfach stur code aus fremden SKripten.
Wenn du kein Buch kaufen möchtest, kann ich das PHP tutorial von quakenet empfehlen. einfach ma googlen.
 
naja ganz so untalentiert bin ich wohl doch nicht ;D

Ich habe es zum laufen bekommen. (War verdammt schwer >_> )

Für die die interessiert wie diese Geschichte ausgeht, hier nochmal der finale Quelltext: (Hab auch am index einiges geändert)

HTML:
<html>
   <head>
   </head>
   <body>
      <form action="script/submit_form.php" method="post">
         <table border="0">
            <tr>
               <td>Name:</td>
               <td><input type="text" name="txtName" maxlength=30 size=30></td><br />
            </tr>
            <tr>
               <td>Alias:</td>
               <td><input type="text" name="txtAlias" maxlength=16 size=30></td><br />
            </tr>
            <tr>
               <td>Subject:</td>
               <td>
                  <select name="drdSubject">
                     <option value="Default">--Choose a Subject--</option>
		    <option value="Comment">Comment</option>
		    <option value="Suggestion">Suggestion</option>
		    <option value="Request">Request</option>
                     <option value="Advertisements">Advertisements</option>
                     <option value="Partnership">Partnership</option>
                     <option value="Other">Other</option>
		 </select></td><br />
            </tr>
            <tr>
               <td>Message:</td>
               <td><textarea name="txtMessage" maxlength=2000 cols="50" rows="8"></textarea></td><br />
            </tr>
            <tr>
               <td></td>
               <td><input type="submit" name="submit" value="Submit"></td><br />
            </tr>
         </table>
      </form>
   </body>
</html>
PHP:
<?php

	$name=  $_POST['txtName'];
	$alias=  $_POST['txtAlias'];
	$subject= $_POST['drdSubject'];
	$message= $_POST['txtMessage'];

	$db_server='localhost';
	$db_user='root';
	$db_password='';
	$db_name='dbtest';

 	$connection=mysql_connect($db_server,$db_user,$db_password);
 	if (!$connection)
  		die("can't connect to server");
 	if (!mysql_select_db($db_name, $connection))
  		die ("Can't talk to the database");


 	$sql = "INSERT INTO dbtest_table
         	(name,alias,subject,message)
         VALUES
         	('".$name."','".$alias."','".$subject."','".$message."')";


mysql_query($sql) OR die(mysql_error());

echo'Entry was saved successfully!';

?>
 
Zuletzt bearbeitet von einem Moderator:
Und was machst du, wenn die Eingabe unvollständig ist?
Außerdem solltest du die MySQL Zugangsdaten nicht so offensichtlich im Quelltext stehen lassen. (Beziehungsweise, was ich schon immer wissen wollte, Wie kann man denn den PHP Quelltext zu gesicht bekommen ohne FTP?)

mfg
 
Zuletzt bearbeitet:
Ähm, wenn ich fragen darf, wo schreibst du die denn hin, wenn nicht "offensichtlich in den Quelltext"? Verwirrst du deinen Code absichtlich? und was für einen sinn hat das?
 
also das ist absoluter schwachsinn. php code kann niemand lesen... es sei den der server wurde falsch konfiguriert so das PHP dateien nicht mehr vom parser verarbeitet werden oder sowas in der richtung. aber solange du keinen eigenen rootserver betreibst, wird das wohl deinem hoster nicht passieren und wenn du einen eigenen betreibst, dann solltest du so viel ahnung haben, dass dir das nicht passiert. ;)

an php code kommt man nicht "von außerhalb" dran.
 
Naja wie man der Adresse ja entnehmen kann liegen diese Dateien nur auf einem lokalen server ^^ Das heißt denk ich mal, dass da keiner drauf zugreifen kann und selbst wenn, wäre es sinnlos weil es ja nur ein kleines Formular zu testzwecken ist =)

Ich werde versuchen es noch ein bischen auszubauen mit den zusätzen die du genannt hast und evtl noch einem Spam-schutz (dieses komische bildchen wo man dann die Zahl eintippen muss die auf dem Bild steht) einbauen.

Danke für eure Hilfe =)

Edit: Das mache ich wenn die eingabe unvollständig ist =D

PHP:
<?php


	if(!($_POST['txtName']=="" OR $_POST['txtAlias']=="" OR $_POST['drdSubject']=="" OR $_POST['txtMessage']==""))
   {


	$name=  $_POST['txtName'];
	$alias=  $_POST['txtAlias'];
	$subject= $_POST['drdSubject'];
	$message= $_POST['txtMessage'];

	$db_server='localhost';
	$db_user='root';
	$db_password='';
	$db_name='dbtest';


	$connection=mysql_connect($db_server,$db_user,$db_password);
		if (!$connection)
	die("can't connect to server");
		if (!mysql_select_db($db_name, $connection))
    	die ("Can't talk to the database");


  	$sql = "INSERT INTO dbtest_table
         	(name,alias,subject,message)
         VALUES
          	('".$name."','".$alias."','".$subject."','".$message."')";


 	mysql_query($sql) OR die(mysql_error());
 	echo'Entry was saved successfully!';


   } else {


	echo 'Please fill out all empty fields!';
	echo ' Go back';

   }

?>
 
Zuletzt bearbeitet von einem Moderator:
@ComputerFreak: ok ;)
@Eichi: Schon besser :)
Allerdings kann man dem Code nicht unbedingt entnehmen, dass er nur lokal läuft, da die Adresse zum MySQL Server auch bei anderen Hostern oft 'localhost' ist.
mfg
 
PHP:
$sql = "INSERT INTO dbtest_table
             (name,alias,subject,message)
         VALUES
              ('".$name."','".$alias."','".$subject."','".$message."')";

Kleiner Tipp für die Zukunft: Meine Querys gestalte ich so:

PHP:
$sql = "INSERT INTO dbtest_table SET name = ' ". $name ." ' , alias =   ' ".$alias." '  ,  subject =  ' ".$subject." '  ,  subject = ' ".$message. " ' );

Bei der kleinen Datenmenge die du dort übergibst ist es noch kein Problem. Aber vlt hast du bald ein Formular, mit 20 - 30 Einträgen, und bei einem Error und deiner "Methode" müsstest du "abzählen" welches der richtige Eintrag ist. Mit diesem "SET" kann man direkt die Spalte + Inhalt sehen ;)



MfG
 
Achso, danke für den Tipp =)
 
Zuletzt bearbeitet von einem Moderator:
Status
Für weitere Antworten geschlossen.
Zurück
Oben