09. januar 2013 - 07:42
Der er
5 kommentarer og 1 løsning
output sprintf loop igennem str_replace
jeg har det her mysqli loop, jeg bruger echo sprintf til at udskrive og det fungere, men det bliver udskrevet i toppen af siden, det er jo ikke css stylet endnu. if ($stmt = $mysqli->prepare("SELECT sider.sideid, sider.sidenavn FROM sider")){ $stmt->execute(); $stmt->bind_result($sideid, $sidenavn); while ($stmt->fetch()){ $txt = sprintf("<a href='%s'> %s </a> ", $sideid, $sidenavn); echo $txt; } $stmt->close(); }else{ printf("Prepared Statement Err: %s\n", $mysqli->error); } men hvis jeg nu gerne vil placere mysqli loopet et andet sted, og jeg fjerner echo $txt og bruger en placeholder på mit design.htm, som hedder %%txt%% og jeg bruger $skabelon = file_get_contents('design.htm', true); $skabelon = str_replace("%%txt%%",$txt, $skabelon); echo $skabelon; så kommer $txt = sprintf("<a href='%s'> %s </a> ", $sideid, $sidenavn); ikke frem i mit output ?? kan man ikke bruge sprintf sammen med str_replace, og hvad vil være en bedre tilgang til visning af mysqli loopet, det rigtig sted i designet???
Annonceindlæg fra Visma Enterprise
09. januar 2013 - 09:07
#1
$txt vil jo kun indeholde den sidste side i de rækker du hiver ud - du overskriver $txt for hver iteration af dit loop
09. januar 2013 - 11:09
#2
Ja det stemmer, den sidste række var en tom række, den har jeg fjernet nu, og nu viser den kun den sidste række fra databasen. Det er jo ikke optimalt. Kan jeg lave mysqli sætningen om til en function, sådan at jeg kan udskrive databasen, det sted jeg har brug for det i mit design ??
09. januar 2013 - 12:57
#3
hvad er det præcis du vil have vist? en liste over de rækker du trækker ud, eller?
09. januar 2013 - 17:52
#4
Jeg lavede dette her til et andet spoergsmaal. Og det har en ekstra kroelle med to tabeller og 1:M. Men alligevel kan det maaske give lidt inpisration: <?php class Main { public $txt; public $subs; public function __construct($txt) { $this->txt = $txt; $this->subs = array(); } }; class Sub { public $nam; public function __construct($nam) { $this->nam = $nam; } }; function load() { $data = array(); $con = new mysqli('localhost', 'root', '', 'Test'); $stmt = $con->prepare('SELECT main.txt,subs.nam FROM main LEFT JOIN subs ON main.id=subs.main_id ORDER BY main.txt;'); $stmt->execute(); $stmt->store_result(); $stmt->bind_result($maintxt, $subnam); $ix = 0; $lastmaintxt = '>>>>BOF<<<<'; while($stmt->fetch()) { if($maintxt != $lastmaintxt) { $ix++; $data[$ix] = new Main($maintxt); $lastmaintxt = $maintxt; } if($subnam != null) $data[$ix]->subs[] = new Sub($subnam); } $stmt->close(); $con->close(); return $data; }; function display_as_lists($data) { echo "<ul>\r\n"; foreach($data as $main) { echo "<li>$main->txt</li>\r\n"; echo "<ul>\r\n"; foreach($main->subs as $sub) { echo "<li>$sub->nam</li>\r\n"; } echo "</ul>\r\n"; } echo "</ul>\r\n"; }; function display_as_table($data) { echo "<table border='1'>\r\n"; echo "<tr><th>Text</th><th>Name</th></tr>\r\n"; foreach($data as $main) { echo "<tr>\r\n"; $n = count($main->subs); echo "<td rowspan='$n'>$main->txt</td>\r\n"; for($ix = 0; $ix < $n; $ix++) { if($ix > 0) echo "</tr>\r\n<tr>\r\n"; $sub = $main->subs[$ix]; echo "<td>$sub->nam</td>\r\n"; } echo "</tr>\r\n"; } echo "</table>\r\n"; } $data = load(); display_as_lists($data); display_as_table($data); ?>
10. januar 2013 - 16:00
#5
Hej Arne tak for scriptet, det fungere rigtig godt, og jeg lære også en del ved at kik det igennem. Smider du et svar ? :-)
10. januar 2013 - 18:36
#6
svar
Vi tilbyder markedets bedste kurser inden for webudvikling