Text aus Formularfeld in Datenbank einfügen

Denniz

Erfahrenes Mitglied
Hi Leute,

ich habe eine Witzedatenbank erstellt die über ein Skript ausgelesen und angezeigt werden,
das klappt auch.
Jetzt möchte ich das man über ein Textfeld neue Witze in die Datenbank einfügen kann.
Es soll dann eine Statusmeldung angezeigt werden ob die eintragung erfolgreich oder nicht erfolgreich war. Das klappt aber nicht.
Ich könnte mir vorstellen das es an meinem deaktivierten register globals liegt, ist aber nur eine vermutung.
Bin PHP anfänger, wie müßte ich die variablen ändern damit die Witze in mein DB eingefügt werden?

(Problem an der kommentierten stellt)
PHP:
<?php 
	if (isset($_GET['addjoke'])):
?>

<form action="<?php $PHP_SELF ?>" method="post">
<p>Geben Sie ihren Witz ein: <br>
<textarea name="joketext" rows="10" cols="40"></textarea><br>
<input type="submit" name="submitjoke" value="Speichern" ></input>
</p>
</form>

<?php	
	else:
	
	$dbcnx = @mysql_connect("localhost", "root", "");
	if(!$dbcnx){
		echo("<p>keine verbindung möglich</p>");
		exit();
	}
	
	if(!@mysql_select_db("jokes")){
		echo("<p>auswahl nicht möglich</p>");
		exit();
	}
	
	//WIESO WERDEN DIE WITZE NICHT IN DIE DATENBANK EINGEFÜGT?
	if($submitjoke == 'Speichern'){
		$sql = "INSERT INTO Jokes SET 
				JokeText='$joketext', 
				JokeDate=CURDATE()";
		if(@mysql_query($sql)){
			echo("<p>witz wurde hinzugefügt</p>");
		}else{
			echo("<p>fehler beim hinzufügen</p>");
		}
	}
	
	echo("<p>hier sind alle witze</p>");
	
	$result = @mysql_query("SELECT JokeText FROM Jokes");
	if(!$result){
		echo ("<p>fehler ab der abfrage</p>");
	}
	
	while($row = mysql_fetch_array($result)){
		echo("<p>".$row["JokeText"]."</p>");
	}
	
	echo("<p><a href='$PHP_SELF?addjoke=1'>"."Einen Witz hinzufügen</a></p>");
	
	endif;
?>

Gruß
 
Teste mal das:
PHP:
         $sql = 'INSERT INTO Jokes SET 
                JokeText="' .$_POST['joketext']. '", 
                JokeDate=CURDATE()';

$joketext kann kaum funktionieren. Der Text kommt ja aus einem POST-Formular, muss also $_POST['joketext'] sein.

Das mal was mir so auf die schnelle aufgefallen ist.

// edit: Und dashier:
PHP:
    if($submitjoke == 'Speichern'){

muss auch mit $_POST...
 
Zuletzt bearbeitet:
Statement hat falsche Syntax:
PHP:
$sql = "INSERT INTO Jokes (JokeText, JokeDate) VALUES( '".$joketext."',CURDATE())"
 
Es hat jetzt mit dem $_POST davor geklappt so da die einträge in die DB eingefügt werden.
Besten Dank schonmal.

Hab aber jetzt mal noch ne kleine frage und zwar hab ich ja ein if-else konstrukt das die "addjoke" variable abfragt. Wenn addjoke gesetzt ist sehe ich mein Forumlarfeld ansonsten werden nur meine Einträge ausgelesen.
Wie schafft man es jetzt das wenn man in dem Formularfeld was einträgt und dann auf submit klickt das dann "addjoke" nicht gesetzt wird und man dann nur die einträge sieht.
Weil mit dem skript klappt das nicht. Ich komm immer wieder auf das formularfeld zurück , da addjoke ja in url stehen bleibt.

PHP:
<!-- --------------------IF-------------------------- -->
<?php 
	if (isset($_GET['addjoke'])):
?>

<form action="<?php $PHP_SELF ?>" method="post">
<p>Geben Sie ihren Witz ein: <br>
<textarea name="joketext" rows="10" cols="40"></textarea><br>
<input type="submit" name="submitjoke" value="Speichern" ></input>
</p>
</form>

<!-- -------------------ELSE-------------------------- -->
<?php	
	else:
	
	$dbcnx = @mysql_connect("localhost", "root", "");
	if(!$dbcnx){
		echo("<p>keine verbindung möglich</p>");
		exit();
	}
	
	if(!@mysql_select_db("jokes")){
		echo("<p>auswahl nicht möglich</p>");
		exit();
	}
	
	if($_POST['submitjoke'] == 'Speichern'){
	     $sql = 'INSERT INTO Jokes SET 
                JokeText="' .$_POST['joketext']. '", 
                JokeDate=CURDATE()';  
		if(@mysql_query($sql)){
			echo("<p>witz wurde hinzugefügt</p>");
		}else{
			echo("<p>fehler beim hinzufügen</p>");
		}
	}
	
	echo("<p>hier sind alle witze</p>");
	
	$result = @mysql_query("SELECT JokeText FROM Jokes");
	if(!$result){
		echo ("<p>fehler ab der abfrage</p>");
	}
	
	while($row = mysql_fetch_array($result)){
		echo("<p>".$row["JokeText"]."</p>");
	}
	
	
	// HIER WIRD ADDJOKE GESTZT, aber wenn ich dann in Formular was eintrage will ich wieder zu den einträgen kommen
	// also mußte addjoke wieder gelöscht werden
	echo("<p><a href='$PHP_SELF?addjoke=1'>"."Einen Witz hinzufügen</a></p>");
	
	endif;
?>

EDT:
Ich denke mal das im Formularfeld ein verstecktes Feld erstellt werden muß das dann beim absende "addjoke" wieder löscht damit ich zu meinem else Teil wieder komme, weiß aber nicht wie man das in PHP schreibt. - Nur so eine idee vielleicht gibts ja auch ein besseren weg.


Help
 
Zuletzt bearbeitet:
Du könntest nach dem Eintrag in die DB folgendes machen:
PHP:
header('location: witze.php');
Dann sollte das Get aus der URL weg sein.

//edit: oder Du setzt in dem Else-Zweig ein neues Get. (Nach erfolgreichem DB-Eintrag)
 
Zuletzt bearbeitet:
//edit: oder Du setzt in dem Else-Zweig ein neues Get. (Nach erfolgreichem DB-Eintrag)

Es wird über ein Link die "addjoke" variable gesetzt um dann zu dem if Teil zu kommen in dem man das Formular sieht. Jetzt bekomme ich die addjoke varibale nicht mehr weg so das ich nach senden eines Textes immer wieder zum Formular zurückkomme, -ist ja auch logisch da addjoke immer noch in der url steht.

Ich denke mal das im Formularfeld jetzt ein verstecktes Feld erstellt werden muß das dann beim absende "addjoke" wieder löscht damit ich zu meinem else Teil wieder komme und die einträge sehe, weiß aber nicht wie man das in PHP schreibt.
 
PHP:
        if(@mysql_query($sql)){
            echo("<p>witz wurde hinzugefügt</p>");
			$addjoke = 2;

Addjoke auf 2 setzen und du kommst wieder in den Else-Zweig. Schlag mich wenn das nicht geht ;)

//edit: bah ne das geht nicht. dazu muss:

PHP:
    if (isset($_GET['addjoke'])):

so:
PHP:
    if (isset($_GET['addjoke']) && $_GET['addjoke'] == 1):
 
Zuletzt bearbeitet:
Mein Skript:
ich möchte nach dem senden die GET Variable "addjoke" wieder löschen , wie geht das?

PHP:
<!-- ******************IF******************  -->
<?php 
	if (isset($_GET['addjoke'])):
	
	$dbcnx = @mysql_connect("localhost", "root", "");
    if(!$dbcnx){
        echo("<p>keine verbindung möglich</p>");
        exit();
    }
    
    if(!@mysql_select_db("jokes")){
        echo("<p>auswahl nicht möglich</p>");
        exit();
    }
    
    if($_POST['submitjoke'] == 'Speichern'){
         $sql = 'INSERT INTO Jokes SET 
                JokeText="' .$_POST['joketext']. '", 
                JokeDate=CURDATE()';  
        if(@mysql_query($sql)){
            echo("<p>witz wurde hinzugefügt</p>");
        }else{
            echo("<p>fehler beim hinzufügen</p>");
        }
    }
?>

<form action="<?php $PHP_SELF ?>" method="post">
<p>Geben Sie ihren Witz ein: <br>
<textarea name="joketext" rows="10" cols="40"></textarea><br>
<input type="submit" name="submitjoke" value="Speichern" ></input>
</p>
</form>

<!-- ******************ELSE******************  -->
<?php	
	else:
	$dbcnx = @mysql_connect("localhost", "root", "");
    if(!$dbcnx){
        echo("<p>keine verbindung möglich</p>");
        exit();
    }
    
    if(!@mysql_select_db("jokes")){
        echo("<p>auswahl nicht möglich</p>");
        exit();
    }
   
	
	echo("<p>hier sind alle witze</p>");
	
	$result = @mysql_query("SELECT JokeText FROM Jokes");
	if(!$result){
		echo ("<p>fehler ab der abfrage</p>");
	}
	
	while($row = mysql_fetch_array($result)){
		echo("<p>".$row["JokeText"]."</p>");
	}
	
	
	// HIER WIRD ADDJOKE GESTZT, aber wenn ich dann in Formular was eintrage will ich wieder zu den einträgen kommen
	// also mußte addjoke wieder gelöscht werden
	echo("<p><a href='$PHP_SELF?addjoke=1'>"."Einen Witz hinzufügen</a></p>");
	
	endif;
?>
 
@Loomes: Ne das funktioniert isrgendwie nicht, weil ob da addjoke=1 oder 2 ist doch egal weil ja in dem if geprüft wird ob die überhaupt gesetzt ist.
Ich muß die varibale nach dem versenden irgendwie wieder wegbekommen so das die nicht mehr in der url steht. Dann komm ich zu meinem gewünschten else Teil.

Nun die Frage: wie bekomme ich die GET Variable nach dem Versenden wieder aus der url enfernt. Was muß ich in dem Formularfeld eintragen, - ein weiteres verstecktes Feld das die Varible löscht. Wenn ja wie macht man das

PHP:
PHP:
<!-- ****************IF****************** -->
<?php 
	if (isset($_GET['addjoke'])):  
?>

<form action="<?php $PHP_SELF ?>" method="post">
<p>Geben Sie ihren Witz ein: <br>
<textarea name="joketext" rows="10" cols="40"></textarea><br>
<input type="submit" name="submitjoke" value="Speichern" ></input>
</p>
</form>

<!-- ****************ELSE****************** -->
<?php	
	else:
	
	$dbcnx = @mysql_connect("localhost", "root", "");
	if(!$dbcnx){
		echo("<p>keine verbindung möglich</p>");
		exit();
	}
	
	if(!@mysql_select_db("jokes")){
		echo("<p>auswahl nicht möglich</p>");
		exit();
	}
	
	if($_POST['submitjoke'] == 'Speichern'){
	     $sql = 'INSERT INTO Jokes SET 
                JokeText="' .$_POST['joketext']. '", 
                JokeDate=CURDATE()';  
		if(@mysql_query($sql)){
			echo("<p>witz wurde hinzugefügt</p>");
			$addjoke = 2;
		}else{
			echo("<p>fehler beim hinzufügen</p>");
		}
	}
	
	echo("<p>hier sind alle witze</p>");
	
	$result = @mysql_query("SELECT JokeText FROM Jokes");
	if(!$result){
		echo ("<p>fehler ab der abfrage</p>");
	}
	
	while($row = mysql_fetch_array($result)){
		echo("<p>".$row["JokeText"]."</p>");
	}
	
	
	echo("<p><a href='$PHP_SELF?addjoke=1'>"."Einen Witz hinzufügen</a></p>");
	
	endif;
?>
 
Zurück