Problem mit EingabeFormuler (PHP)

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Loeffel
Mitglied
Beiträge: 97
Registriert: 09.12.2004 15:06
Wohnort: Overath

Problem mit EingabeFormuler (PHP)

Beitrag von Loeffel »

Hallo,

ich glaube ich sehe den Wald vor lauter Bäumen nicht. Ich möchte ein Eingabeformular machen, indem ein Benutzer einen Wert einträgt und der dann an eine Tabelle anghängt wird. Allerdings nimmt er den Submit nicht, ich lande immer wieder auf der normalen Eingabeseite. :-( Leider finde ich meinen Fehler nicht.

Vielleicht kann mir ja jemand helfen.

Code: Alles auswählen

<?
	define('IN_PHPBB', True); 
	
	$phpbb_root_path = './'; // <-- 
	include($phpbb_root_path . 'extension.inc'); 
	include($phpbb_root_path . 'common.'.$phpEx); 
		
	$userdata = session_pagestart($user_ip, PAGE_INDEX); 
	init_userprefs($userdata); 
		
	include($phpbb_root_path . 'includes/page_header.'.$phpEx); 
	
	$submit = ( isset($HTTP_POST_VARS['post']) ) ? TRUE : 0;

	echo($submit);
	if ($submit):	// Edit has been entered using the form below.
		$dbcnx = @mysql_connect( "localhost", "benutzer", "passwort"); 
		mysql_select_db("datenbank");

		$text=htmlspecialchars($text);
		echo("blablabla");
		$select = "SELECT user_id, username FROM schiffsfor_users WHERE (user_id = " . $uid . ")";
		$geschichten = mysql_query($select);
		if (!$geschichten) {
			echo("<P>Error retrieving username from database!<BR>".
				"Error: " . mysql_error());
			exit ( ) ;
		}
		while ($geschichte = mysql_fetch_array($geschichten)) {
			$uid	= $geschichte["user_id"] ;
		}
		if ($user_id <> $uid) {
			$sql = "INSERT INTO schiffsfor_users SET story_id='$story_id', user_id='$user_id', text='$text'";
			if (mysql_query($sql)) {
				echo("<P>Dein Text wurde angehängt.</P>");
			} else {
				echo("<P>Error inserting Modulversionen: " .mysql_error() . "</P>");
			}
		} else {
			echo("Du hast den letzten text eingegeben, Du mußt warten bis jemand anderes die Geschichte fortgeführt hat!");
		}
	else: // Allow the user to edit
		$dbcnx = @mysql_connect( "localhost", "benutzer", "passwort"); 
		mysql_select_db("datenbank");
		
		// The basic SELECT statement
		$select = "SELECT * FROM schiffsfor_story WHERE (story_id = 1)";
		echo("
		<br>
		<center><h1>Es war einmal ... das unendliche Weihnachtsmärchen</h></center>
		<br>
		<br>
		<table width='100%' cellpadding='3' cellspacing='1' border='0' class='forumline'>
		  <tr> 
			<td class='catHead' colspan='2' height='28'><span class='row1'><b>Jeder erweitert den Satz des Vorgängers um genau drei Worte.<br><br>Die Geschichte beginnt mit: Es war einmal ...</b></span></td>
		  </tr>
		  <tr>
		");
		$geschichten = mysql_query($select);
		if (!$geschichten) {
			echo("</TABLE>");
			echo("<P>Error retrieving story from database!<BR>".
				"Error: " . mysql_error());
			exit ( ) ;
		}
		$fulltext = '<br>';
		while ($geschichte = mysql_fetch_array($geschichten)) {
			$uid	= $geschichte["user_id"] ;
			$stext = $geschichte["text"];
			$fulltext = $fulltext . " " . $stext;
		}
		echo("<td class='row2'>$fulltext</span></td>\n");
		echo("
			</tr>	
		</table>
		<br>
		");
		$select = "SELECT user_id, username FROM schiffsfor_users WHERE (user_id = " . $uid . ")";
		$geschichten = mysql_query($select);
		if (!$geschichten) {
			echo("<P>Error retrieving username from database!<BR>".
				"Error: " . mysql_error());
			exit ( ) ;
		}
		$geschichte = mysql_fetch_array($geschichten);
		$usertext = "<span class='gen'>Benutzer, der zuletzt eine Ergänzung gemacht hat: " . $geschichte["username"] . "</span>";
		echo($usertext);
?>
<br>
<br>

		<FORM ACTION='<?php echo($PHP_SELF); ?>' METHOD=POST>
			<TABLE BORDER=0>
				<TR>
					<TD align='right'>Deine Erweiterung:</TD>
					<TD><INPUT TYPE=TEXT NAME='Text' SIZE=50 MAXLENGTH=200></TD>
				</TR>
			</TABLE>
			<INPUT TYPE=HIDDEN NAME='story_id' VALUE='<?php echo('1'); ?>'>
			<INPUT TYPE=HIDDEN NAME='user_id' VALUE='<?php echo($userdata['user_id']); ?>'>
			<BR>
			<INPUT TYPE=SUBMIT NAME='submit' VALUE='submit'></P>
		</FORM>
<?
	endif; 
	include($phpbb_root_path . 'includes/page_tail.'.$phpEx); 
?>
Yours
Loeffel
Murphy: Professionals are predictable, but beware the world is full of amateurs.
Benutzeravatar
QCO
Mitglied
Beiträge: 708
Registriert: 15.03.2003 12:30
Wohnort: Leipzig

Beitrag von QCO »

Dein Submit-Button im Formular heißt submit, im PHP-Teil schreibst du aber
$submit = ( isset($HTTP_POST_VARS['post']) ) ? TRUE : 0;
Schnelle direkte Hilfe? Modeinbau? Umfassender, persönlicher Support? Ein individuelles Design/Template?
Ich bin käuflich und löse zu kleinen Preisen Deine Probleme. Anfragen bitte per PN oder Mail.
Loeffel
Mitglied
Beiträge: 97
Registriert: 09.12.2004 15:06
Wohnort: Overath

Beitrag von Loeffel »

Stimmt, aber das ist es leider nicht, der Effekt ist der gleiche. Geht man auf Submit wird das Formular zwar neugeladen, aber der Datensatz nicht angefügt, sondern die reine Anzeige ausgeführt.
*grummel*
Yours
Loeffel
Murphy: Professionals are predictable, but beware the world is full of amateurs.
fagus
Mitglied
Beiträge: 71
Registriert: 30.03.2004 16:55

Beitrag von fagus »

1. qco hat recht. du musst das ändern sonst gehts erst recht nicht.

2. ich hatte das problem auch. versuche mal folgendes:

ersetze

Code: Alles auswählen

$HTTP_POST_VARS['submit']
mit

Code: Alles auswählen

$_POST['submit']
Loeffel
Mitglied
Beiträge: 97
Registriert: 09.12.2004 15:06
Wohnort: Overath

Beitrag von Loeffel »

Also ich habe jetzt den oberen Teil gemäß der beiden Vorschläge abgewandelt. Er sieht jetzt so:

Code: Alles auswählen

	include($phpbb_root_path . 'includes/page_header.'.$phpEx); 
	
	$submit = ( isset($_POST['submit']) ) ? TRUE : 0;

	echo($submit);
	if ($submit):	// Edit has been entered using the form below.
aus.

Das Testecho von submit sagt immer noch 0, also erkennt er immer noch nicht den submit. Ich hatte anfangs auch submit statt post oben, aber beim spielen muß ich wohl vergessen haben es zurückzusetzen.

Irgendwas muß ich doch noch übersehen haben. Groß-/Kleinschreibung stimmt und es wird ja scheinbar auch ein submit durchgeführt, da das Formular neu geladen wird.

Kann es sein, das er irgendwie das if...else...endif nicht richtig macht? Obwohl kann nicht sein, da $submit immer 0 ist.
Yours
Loeffel
Murphy: Professionals are predictable, but beware the world is full of amateurs.
fagus
Mitglied
Beiträge: 71
Registriert: 30.03.2004 16:55

Beitrag von fagus »

wie wäre es wenn du deinen code:

Code: Alles auswählen

 $submit = ( isset($_POST['submit']) ) ? TRUE : 0;

   echo($submit);
   if ($submit):   // Edit has been entered using the form below. 
dadurch ersezten würdest:

Code: Alles auswählen

   if (isset($_POST['submit']))   // Edit has been entered using the form below. 
doppelpunkt nach den klammern entfernen!
Loeffel
Mitglied
Beiträge: 97
Registriert: 09.12.2004 15:06
Wohnort: Overath

Beitrag von Loeffel »

Das hatte ich zwischendurch auch mal.

Jetzt habe ich das ganze auf Template-System verbogen, aber leider bringt das auch nicht, ich bin genauso weit wie vorher. Zur Zeit sieht es so aus:
story_body.tpl

Code: Alles auswählen

<h1>{L_STORY_TITLE}</h1>

<p>{L_STORY_EXPLAIN}</p>

<form action="{S_POST_ACTION}" method="post" name="post" onsubmit="return checkForm(this)"><table width="99%" cellpadding="4" cellspacing="1" border="0" align="center" class="forumline">
	<tr>
	  <th class="thHead" colspan="2">Geschichte</th>
	</tr>
	<tr>
		<td class="row1">{L_TEXT_EXPLAIN}</td>
		<td class="row2">{L_TEXT}</td>
	</tr>
	<tr>
		<td class="row1">{L_TEXT_INPUT}</td>
		<td class="row2"><input class="post" type="text" maxlength="255" size="40" name="new_text" value="" /></td>
	</tr>
	<tr>
		<td class="catBottom" colspan="2" align="center">{S_HIDDEN_FIELDS}<input type="submit" name="post" value="{L_SUBMIT}" class="mainoption" />&nbsp;&nbsp;<input type="reset" value="{L_RESET}" class="liteoption" />
		</td>
	</tr>
</table></form>

{L_USE}

<br clear="all" />
story.php

Code: Alles auswählen

<?
	define('IN_PHPBB', True); 
	
	$phpbb_root_path = './'; // <-- 
	include($phpbb_root_path . 'extension.inc'); 
	include($phpbb_root_path . 'common.'.$phpEx); 
		
	$userdata = session_pagestart($user_ip, PAGE_INDEX); 
	init_userprefs($userdata); 
		
//	$submit =  isset($HTTP_POST_VARS['Submit']);
	$submit = ( isset($_POST['post']) ) ? TRUE : 0;
	
	include($phpbb_root_path . 'includes/page_header.'.$phpEx); 
	
//Prepare and store data
	$dbcnx = @mysql_connect( "localhost", "user", "password"); 
	mysql_select_db("database");
	if ($submit)
	{
		$text=htmlspecialchars($text);
		echo($user_id);
		echo($story_id);
		echo($text_id);
		$select = "SELECT user_id, username FROM schiffsfor_users WHERE (user_id = '$uid')";
		$geschichten = mysql_query($select);
		if (!$geschichten) {
			echo("<P>Error retrieving username from database!<BR>".
				"Error: " . mysql_error());
			exit ( ) ;
		}
		while ($geschichte = mysql_fetch_array($geschichten)) {
			$uid	= $geschichte["user_id"] ;
		}
		if ($user_id <> $uid) {
			$sql = "INSERT INTO schiffsfor_users SET story_id='$story_id', user_id='$user_id', text='$text'";
			if (mysql_query($sql)) {
//				echo("<P>Dein Text wurde angehängt.</P>");
			} else {
				echo("<P>Error inserting Text: " .mysql_error() . "</P>");
			}
		} else {
			echo("Du hast den letzten Text eingegeben, Du mußt warten bis jemand anderes die Geschichte fortgeführt hat!");
		}
	}
	
	// The basic SELECT statement
	$select = "SELECT * FROM schiffsfor_story WHERE (story_id = 1)";
	$geschichten = mysql_query($select);
	if (!$geschichten) {
		echo("<P>Error retrieving story from database!<BR>".
			"Error: " . mysql_error());
		exit ( ) ;
	}
	$fulltext = '<br>';
	while ($geschichte = mysql_fetch_array($geschichten)) {
		$uid	= $geschichte["user_id"] ;
		$stext = $geschichte["text"];
		$fulltext = $fulltext . " " . $stext;
	}
	$select = "SELECT user_id, username FROM schiffsfor_users WHERE (user_id = " . $uid . ")";
	$geschichten = mysql_query($select);
	if (!$geschichten) {
		echo("<P>Error retrieving username from database!<BR>".
			"Error: " . mysql_error());
		exit ( ) ;
	}
	$geschichte = mysql_fetch_array($geschichten);
	$useage = "Um eine neue Zeile zu beginnen einmal <b><</b><b>br></b> eingeben, für einen Absatz <b><</b><b>br><</b><b>br></b><br><br>Benutzer, der zuletzt eine Ergänzung gemacht hat: <b>" . $geschichte["username"] . "</b>";

//set template variables
	$template->set_filenames(array(
		'body' => 'story_body.tpl')
	);

	$template->assign_vars(array(
		"L_STORY_TITLE" => 'Es war einmal ... das unendliche Weihnachtsmärchen',
		"L_STORY_EXPLAIN" => 'Jeder erweitert den Satz des Vorgängers um genau drei Worte.<br>Die Geschichte beginnt mit: Es war einmal ...',
		"L_TEXT_EXPLAIN" => 'Was bisher geschah',
		"L_TEXT" => $fulltext,
		"L_TEXT_INPUT" => 'Deine drei Wörter',
		"L_USE" => $useage,
		"L_SUBMIT" => $lang['Submit'], 
		'S_HIDDEN_FIELDS' => '',
		'S_POST_ACTION' => append_sid("story.$phpEx"),
		"L_RESET" => $lang['Reset']
		)
	);

	$template->pparse('body');

	include($phpbb_root_path . 'includes/page_tail.'.$phpEx); 
?>
Irgendwie scheinen die Parameter nicht übergeben zu werden. :-(
Yours
Loeffel
Murphy: Professionals are predictable, but beware the world is full of amateurs.
fagus
Mitglied
Beiträge: 71
Registriert: 30.03.2004 16:55

Beitrag von fagus »

Irgendwie scheinen die Parameter nicht übergeben zu werden.
dazu gibts einen einfachen test:

Code: Alles auswählen

print_r($_POST);
dann bekommst du in den quelltext alle übergabeparameter ausgegeben.
Loeffel
Mitglied
Beiträge: 97
Registriert: 09.12.2004 15:06
Wohnort: Overath

Beitrag von Loeffel »

Danke, jetzt bin ich etwas weiter, jetzt weiß ich, daß nur ein Parameter übergeben wird!

Nur der Parameter Text, den Parameter "submit" gibt es nicht.
Array ( [new_text] => hallo ihr da )
Yours
Loeffel
Murphy: Professionals are predictable, but beware the world is full of amateurs.
Benutzeravatar
Martin Truckenbrodt
Mitglied
Beiträge: 1143
Registriert: 15.08.2003 23:16
Wohnort: Südthüringen
Kontaktdaten:

Beitrag von Martin Truckenbrodt »

Hallo,
Du musst vielleicht ein hidden field hinzufügen.

Befasse Dich auch mal mit dem Thema sql injection.

Gruß Martin
Zuletzt geändert von Martin Truckenbrodt am 21.12.2005 18:45, insgesamt 1-mal geändert.
Advanced Block MOD 1.1.4 ist released! - Verhindere Spam auf Deinem phpBB3 Board mit Stop Forum Spam, BotScout, Akismet, Project Honey Pot und verschiedenen IP-RBL und Domain-RBL DNS Blacklisten! - Meine MODs - phpBB Complete Core
Antworten

Zurück zu „Coding & Technik“