lordkimahri
Goto Top

Dynamische Tabelle mit php erzeugen, leider leere anzeige obwohl datenbankeintrag besteht!

Also ich versuche derzeit eine art Pinnwand selbst zu kreieren, stolpere aber über das erzeugen einer dynamischen tabelle!

Mein problem ist das er mir leider nur eine Blanke seite anzeigt, ich den fehler aber nicht finden kann....

hier der Code:
<?php
require_once ('./board/settings.php');  
$conn = mysqli_connect (
                     $host, 
                     $username, 
                     $password, 
                     $dbname
                    );
					
$sql = "SELECT * FROM adminboard ORDER BY date DESC ";  
error_reporting(E_ALL);
?>
<center>
<table border="1" bordercolor="purple" width="65%">  
<?php
$result=mysqli_query($sql);
$spalten = 4; //Spaltenanzahl
$fueller = '-'; //Fuellzeichen für leere Zellen z.B. '&nbsp;'  
$i = 0;
while ($rows = mysqli_query($result)[$i]) {

// Tabellenzeile beginnen
if ($i % $spalten == 4) {
echo '<tr>';  
}

// Zellen erstellen und mit Daten füllen
?>
	<td width="20%">  
					<?php $rows->"id" ?>  
	</td>
	<td width="20%">  
					<?php  
					if ($rows['done'] == "0") {  
							echo "OFFEN";  
						} else {
							echo "Erledigt";   
						}
					?>
	</td>
	<td width="60%">  
					<?php $rows->"date" ?>  
	</td>
	</tr>
	</table>
	<table border="1" bordercolor="green" width="100%">  
	<tr>
	<td width="100%">  
					<?php $rows->"title" ?>  
	</td>
	</tr>							
	<tr>							
	<td width="100%">							  
					<?php $rows->"text" ?>  
	</td>
	</tr>
	</table>
	<table border="1" bordercolor="green" width="100%">  
	<tr>
	<td width="50%">  
					<?php $rows->"usersend" ?>  
	</td>
	<td width="50%">  
					<?php $rows->"donefrom" ?>  
	</td>
	</tr>							
<?php
$i++;

// Zeile nach vorgegebener Spaltenzahl beenden
if ($i % $spalten == 4) {
echo '</tr>';  
}

}

// Tabelle mit Zellen auffüllen und letzte Tabellenzeile korrekt abschliessen
if ($i % $spalten != 4) {
echo (str_repeat ('<td>' . $fueller . '</td>', $spalten - (bcmod($i, $spalten))));  
echo '</tr>';  
}
?>
</table>

Link zur seite ist: http://rpg.gaming-squad.eu/administration/board/board_test.php

Content-ID: 270854

Url: https://administrator.de/contentid/270854

Ausgedruckt am: 05.11.2024 um 07:11 Uhr

wiesi200
wiesi200 01.05.2015 um 12:55:02 Uhr
Goto Top
Hallo,

Mal abgesehen davon das ich es jetzt auf den ersten kurzen Blick merkwürdig finde das du mehrfach Tabellen erstellst.

Was sagt denn das Logfile vom Webserver? Der müsste eigentlich recht genau sagen wo PHP Probleme hat.
LordKimahri
LordKimahri 01.05.2015 aktualisiert um 13:04:22 Uhr
Goto Top
Also ich mache es mit mehreren Tabellen weil es mir so besser gefällt....

und das logfile sagt mir:

[Fri May 01 12:24:25.323017 2015] [fcgid:warn] [pid 2812] [client ..*.*:*] mod_fcgid: stderr: PHP Parse error: syntax error, unexpected '"id"' (T_CONSTANT_ENCAPSED_STRING), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in /var/www/vhosts/rpg.gaming-squad.eu/httpdocs/administration/board/board_test.php on line 30


Leider werde ich daraus nicht zu 100% schlau derzeit (war ne lange nacht)!
wiesi200
wiesi200 01.05.2015 um 13:09:43 Uhr
Goto Top
Ich kenn zwar das Ergebnisse nicht aber ich stell den erzeugten HTML Code eher grausig vor.
aber gut nicht mein Problem.

Der Fehler ist in Zeile 30mund die ist jetzt wirklich nicht lange

$rows->"id"   
LordKimahri
LordKimahri 01.05.2015 um 13:17:43 Uhr
Goto Top
Also das ergebnis ist ist auf dem selben link erreichbar nur am ende das _test wegnehmen!!


Nur was daran nun falsch sein soll verstehe ich nicht ganz ;-(
wiesi200
Lösung wiesi200 01.05.2015 aktualisiert um 15:30:53 Uhr
Goto Top
Sag ich doch, da stellt es einem die Nackenhaare auf.

Das ist HTML von vor x Jahren als ich noch Jung war.

Versuch mal:

<?php
require_once ('./board/settings.php');  
$conn = mysqli_connect (
					 $host, 
                     $username, 
                     $password, 
                     $dbname
                    );
					
$sql = "SELECT * FROM adminboard ORDER BY date DESC ";  
error_reporting(E_ALL);
?>
<center>
<table border="1" bordercolor="purple" width="65%">  
<?php
$result= mysqli_query($conn,$sql);
$spalten = 4; //Spaltenanzahl
$fueller = '-'; //Fuellzeichen für leere Zellen z.B. ' '  
$i = 0;

while($row = mysqli_fetch_array($result)) {

// Tabellenzeile beginnen
if ($i % $spalten == 4) {
echo '<tr>';  
}

// Zellen erstellen und mit Daten füllen
?>
	<td width="20%">  
					<?php $rows["id"] ?>  
	</td>
	<td width="20%">  
					<?php  
					if ($rows['done'] == "0") {  
							echo "OFFEN";  
						} else {
							echo "Erledigt";   
						}
					?>
	</td>
	<td width="60%">  
					<?php $rows["date"] ?>  
	</td>
	</tr>
	</table>
	<table border="1" bordercolor="green" width="100%">  
	<tr>
	<td width="100%">  
					<?php $rows["title"] ?>  
	</td>
	</tr>							
	<tr>							
	<td width="100%">							  
					<?php $rows["text"] ?>  
	</td>
	</tr>
	</table>
	<table border="1" bordercolor="green" width="100%">  
	<tr>
	<td width="50%">  
					<?php $rows["usersend"] ?>  
	</td>
	<td width="50%">  
					<?php $rows["donefrom"] ?>  
	</td>
	</tr>							
<?php
$i++;

// Zeile nach vorgegebener Spaltenzahl beenden
if ($i % $spalten == 4) {
echo '</tr>';  
}

}

// Tabelle mit Zellen auffüllen und letzte Tabellenzeile korrekt abschliessen
if ($i % $spalten != 4) {
echo (str_repeat ('<td>' . $fueller . '</td>', $spalten - (bcmod($i, $spalten))));  
echo '</tr>';  
}
?>
</table>
LordKimahri
LordKimahri 01.05.2015 aktualisiert um 14:47:53 Uhr
Goto Top
also funktionieren tut es schonmal ein wenig, das ergebnis kann man hier bewundern:

http://rpg.gaming-squad.eu/administration/board/board2.php

habs mal in ne andere datei gepackt um mir später jeden unterschied richtig anschauen zu können und es verstehen zu können

allerdings is es nicht ganz das gewünschte ergebnis


so sollte es dann in etwas sein:

http://rpg.gaming-squad.eu/administration/board/board.php

Irgendwo is da noch nen kleines problem drinnesuche nebenbei auch noch

edit
Also das rows-problem habe ich gelöst! aber anzeigen tut er mir den inhalt immernoch nicht!

edit2

Formatierungsproblem gelöst!

Bleibt nurnoch der inhalt, warum er den nicht anzeigt versteh ich nicht ganz! der log gibt auch nichts her!
Arano
Lösung Arano 01.05.2015 aktualisiert um 15:30:55 Uhr
Goto Top
Hi,

die Werte die du angezeigt haben möchtest, müssen auch ausgegeben werden -> echo
Zeile 31, 43, 50, 55, 62 und 65 da fehlt überall das echo
z.B.
<?php echo $rows["id"] ?>  


~Arano
LordKimahri
LordKimahri 01.05.2015 um 15:32:12 Uhr
Goto Top
Danke man war ich blind^^
wiesi200
wiesi200 01.05.2015 um 15:47:44 Uhr
Goto Top
Stimmt, hab das Echo vergessen.
dog
dog 01.05.2015 um 18:15:22 Uhr
Goto Top
<?php echo $rows["id"] ?>

XSS-Lücke in 3,2,1,...
Arano
Arano 01.05.2015 um 18:19:32 Uhr
Goto Top
und besser wäre ... ?
dog
dog 01.05.2015 aktualisiert um 18:53:42 Uhr
Goto Top
Ich dafür zwei kleine Helferfunktionen:
	/** Escapt einen String für die HTML-Ausgabe
	 * @param string $string Der zu escapende String (UTF-8)
	 * @return string Ein escapter String, der in HTML-Seiten benutzt werden kann
	 * @warning Der String kann in HTML-Tags (<tt><p>string</p></tt>) aber NICHT in Attributen (<tt><img attr="string" /></tt>) benutzt werden 
	 * @code
	 *   //Beispiele: 
	 *   svr("<script>alert();</script>") #=> &lt;script&gt;alert();&lt;/script&gt; 
	 * @endcode
	 */
	function svr($string) {
		return htmlspecialchars($string, ENT_NOQUOTES, 'UTF-8');  
	}
	
	/** Shortcut: Escapt einen String und gibt ihn aus
	 * @param string $string Der zu escaptende String (UTF-8)
	 * @see svr()
	 * 
	 */
	function sv($string) {
		echo svr($string);
	}
	
	/** Escapt einen String für die HTML-Ausgabe in Attributwerten
	 * @param string $string Der zu escapende Wert in UTF-8
	 * @return string Ein escapter Wert
	 * @notice Diese Funktion ist für die Benutzung in Attributen gedacht (<tt><img src="string" /></tt>), für reguläre Werte (<tt><p>string</p></tt>) gibt es svr() 
	 */
	function sar($string) {
		return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');  
	}
Ausgehend von PHP 5.4 (oder war es 5.5?) wo <?= zur Standardsyntax gehört (nicht mehr deaktivierbar), würde sv() sogar überflüssig.
Arano
Arano 01.05.2015 um 19:50:18 Uhr
Goto Top
Ah okay !

XSS-Lücke also "nur" wegen des möglichen inhalts der Variable aber nicht direkt wegen der einfachen Ausgabe per echo $var;.
(Ich für meinen Teil speichere die Daten bereits entsprechende escaped und ersetzt in der Datenbank.)

Zitat: PHP-Manual - php.ini direktives
Since PHP 5.4.0, <?= is always available.
Waren die short_open_tags nicht mal deprecated !? ...scheint als hätte ich da mal was falsches aufgeschnappt.

Danke dog

~Arano
dog
dog 02.05.2015 um 02:11:07 Uhr
Goto Top
Waren die short_open_tags nicht mal deprecated !?

Sind sie auch. <?= ist eine Ausnahme.