Zum Inhalt springen

page_php_content und <select>

Erstellt am 5. September 2006 · 5 Antworten · letzte Antwort am 6. September 2006

Tags: Frage

framemaster ·

Hallo Leute!

Bin richtig am verzweifeln!!! Ich habe mir eine sehr individuelle Extension vorgenommen und aus Unkenntnis vorerst auf die Beschäftigung mit dem kickstarter verzichtet. Somit habe ich meine eigenen Tabellen in der DB angelegt. Damit ich auf diese zugreifen kann, habe ich die Extension page_php_content installiert.
Ich hatte es vorher getestet und konnte ohne Probleme auf Datenbestände zugreifen. Soweit war alles in Ordnung.

Nun baue ich für einen Kunden über ein Login-Formular eine Ausgabe einer gesamten Tabelle. Im Endeffekt bekommt er die Datensätze zeilenweise untereinander aufgelistet. Es soll dabei einige (änderbare, festgelegte) Select-Felder geben. Hierbei soll das entsprechende Select-Feld natürlich bei der Ausgabe den aktuellen Wert des entsprechenden Datenbankfeldes haben. Insgesamtes Ziel ist, dass der Kunde eine Übersicht über (seine wenigen Einräge) hat und z.B. bestimmte Attribute schnell und bequem über die Select-Felder ändern kann. Am Ende des späteren Formulars wird es einen Update-Button geben, worüber dann alle veränderten Datansätze in der DB aktualisiert werden sollen.

Mit page_php_content drehe ich aber gerade dabei durch!!!!! Hier mein Code (ok, bin nicht der Hardcoder, hatte aber bisher mit meinen einfachen Mitteln immer so funktioniert):

<?
	$result=mysql_query("SELECT * FROM racer_products ORDER BY id ASC");
	//$result=$GLOBALS['TYPO3_DB']->sql(TYPO3_db,"SELECT * FROM racer_products ORDER BY id ASC");
	
	echo "<br />Es sind insgesamt ".mysql_num_rows($result)." Datens&auml;tze vorhanden.<br /><br />";
	echo "<table border="\&quot;0\&quot;" cellpadding="\&quot;1\&quot;" cellspacing="\&quot;0\&quot;" width="\&quot;99%\&quot;"><tr><td><b>Nr.</b></td><td><b>Rubrik</b></td><td><b>Bezeichnung</b></td><td><b>Preis</b></td><td><b>Status</b></td><td><b>Kunde?</b></td></tr>";
	
	//while($row=$GLOBALS['TYPO3_DB']->sql_fetch_assoc($result)) {
	while ($row=mysql_fetch_array($result)) {
			
		if ($row['Status']=='frei') {
			$selected_frei=" selected";
		} else {
			$selected_frei="";
		}
				
		echo"<tr>
				<td>".$row['id']."</td>
				<td><select name="\&quot;catname\&quot;" size="\&quot;1\&quot;">
						<option value="\&quot;1\&quot;">1.</option>
						<option value="\&quot;2\&quot;">2.</option>
						<option value="\&quot;3\&quot;">3.</option>
					</select></td>
				<td><input type="\&quot;text\&quot;" name="\&quot;Bezeichnung\&quot;" size="\&quot;25\&quot;" maxlength="\&quot;50\&quot;" value="\&quot;&quot;.$row['Bezeichnung'].&quot;\&quot;" /></td>
				<td><select name="\&quot;pricevalue\&quot;" size="\&quot;1\&quot;">
						<option value="\&quot;1\&quot;">1.</option>
						<option value="\&quot;2\&quot;">2.</option>
						<option value="\&quot;3\&quot;">3.</option>
					</select></td>
				<td><select name="\&quot;Status\&quot;" size="\&quot;1\&quot;">
						<option value="\&quot;frei\&quot;&quot;.$selected_frei.&quot;">frei</option>
						<option value="\&quot;angefragt\&quot;">angefragt</option>
						<option value="\&quot;gebucht\&quot;">gebucht</option>
					</select></td>
				<td bgcolor="\&quot;red\&quot;">&nbsp;</td>
			</tr>";
	}
	
	echo "</table>";
?>

Es geht dabei um die Variable $selected_frei (welche sich in der while-Schleife befindet, Zeile 11-15) und die Ausgabe der gleichen Variablen in Zeile 31.

In der HTML-Ausgabe wird an entsprechender Stelle nicht der vermutete Wert der Variablen ausgegeben (" selected" oder ""), sondern komischerweise "selected='selected' ". Was soll das???

Wie kann ich den von mir festgelegten Wert ausgeben???? Ich checke das einfach nicht.

Die Ausgabe von Datenbankfelder klappt ohne jegliche Probleme. In diesem Fall überprüfe ich aber den Inhalt einiger Felder. Sobald ich aber neue Variablen definiere und diese in meinem echo-Code ausgeben will, werden diese nicht in herkömmlicher Weise ausgegeben. Statt "selected" steht dann "selected='selected'" an entsprechender Stelle. Warum? Was mache ich falsch??????

wusel ·
framemaster schrieb

Es geht dabei um die Variable $selected_frei (welche sich in der while-Schleife befindet, Zeile 11-15) und die Ausgabe der gleichen Variablen in Zeile 31.

In der HTML-Ausgabe wird an entsprechender Stelle nicht der vermutete Wert der Variablen ausgegeben (" selected" oder ""), sondern komischerweise "selected='selected' ". Was soll das???

Hast du irgendwo so etwas wie XHTML-Cleaning oder ähnliches aktiviert? Dann könnte automatisch vor der Ausgabe der Code bereinigt werden und aus "selected" wird korrekterweise "selected='selected'".

Das sollte aber auf die Funktion des Formulars keinen Einfluss haben. Der Eintrag im Select sollte trotzdem ausgewählt sein.

steffenk ·

gewöhn Dir doch mal ne andere String-Schreibweise an - so steigt ja keiner durch.

"" = quotes, wo geparst wird
Das ist bei Dir nicht nötig, schnellere Performance und bessere Lesbarkeit erreichst Du mit SingleQuotes:

echo '<table border="0" cellpadding="1" cellspacing="0" width="99%"><tr><td><b>Nr.</b></td><td><b>Rubrik</b></td><td><b>Bezeichnung</b></td><td><b>Preis</b></td><td><b>Status</b></td><td><b>Kunde?</b></td></tr>';
framemaster ·

Yoh, danke Euch beiden!

Das mit der String-Schreibweise habe ich heute auch gelesen. Hab noch einiges zu lernen. Das Dumme ist, ich hab mir das hier im stillen Kämmerlein selbst beigebracht. Da fehlt noch so einiges an Basics und man bringt sich viel Müll bei... Deswegen bin ich für jede Kritik offen und dankbar.

Dass selected='selected' ok ist, wusste ich bis heute auch noch nicht. Lustigerweise habe ich heute festgestellt, dass der alte IE 5.1 auf Mac Classic an der Stelle 'selected' ausgibt, hingegen der aktuelle Firefox auf XP selected='selected'. Scheint dann wohl irgendwie Browser-abhängig zu sein, oder checkt Typo3 vorher den Browser ab?

framemaster ·

Kleiner Nachtrag:

Ach ja, gibt's eigentlich noch eine etwas raffiniertere Methode um solche Select-Felder auf den aktuellen Status des DB-Feldes zu setzen?
Ich denke, ich mache das sicherlich zu umständlich in dem ich für jede Auswahlmöglichkeit des Selects eine eigene Variable für den ausgewählten Zustand definiere und dann ggfs. in den Ausgabecode einfüge. Das funktioniert, ist aber bestimmt nicht so toll, oder?

steffenk ·

selected="selected" ist xhtml.Das hat den Grund, das unter xhtml jedes Attribut ein Wert zugewiesen sein muss, die Zuweisung also ein Pseudo ist, um den Source valide zu halten (selected="selected",checked="checked",disabled="disabled",...) , alle anderen Varianten kommen mit selected aus.
Da Typo3 meist auch als xhtml läuft (ist ja auch zeitgemäss), bist Du mit erster variante immer auf der sicheren Seite.

Solche Flags setzt man i.d.R. so:

$out .= '<option value="1455"'.($var==1455 ? ' selected="selected"' : '').'>xxx</option>';