ugrás a tartalomhoz

Egy sorban 2 oszlop után újabb sor

pezo · 2007. Ápr. 1. (V), 11.17
Azt szeretném megcsinálni hogy egy sorban van 2 cella, és úgy olvasson ki adatbázisból h minden 2 cella után újabb sor van.
idáig így néz ki a kódom:
$egyoldalon = 10;
for($sorok = 0; $sorok < 5; $sorok++) {
   print "<tr>";
   for($oszlopok = 0; $oszlopok < 2; $oszlopok++) {
      if($i < $egyoldalon) {
         while($cikk = DBFetch($result)) {
            $kep = $cikk['kep'];
            $cim = $cikk['cim'];
            $szoveg = $cikk['szoveg'];
            $bevezeto = explode(".", $szoveg);
            print "<td width='50%' valign='top'>
               <table width='100%' border='0' cellpadding='2' cellspacing='0' style='background-color: #F9F5D5;'>
                 <tr>
                   <td valign='top'>
                     <div style='padding-right: 5px;'><img src=\"".$kep."\" width=\"75\" height=\"75\" border=\"1\" /></div>
                   </td>
                   <td>
                     <div style=\"text-transform: uppercase; padding-bottom: 4px;\"><strong>$cim</strong></div>
                     <div class=\"divLi\">".$bevezeto[0].".<br />
                     <a href=\"index.php?p=cikkek&cikkID=".$cikk['id']."\"><strong>Tov&aacute;bb&hellip;</strong></a></div>
                   </td>
                 </tr>
               </table>
             </td>";
         }
      } else {
         print "";
      }
      $i++;
   }
   print "</tr>";
}
 
1

segítség

pezo · 2007. Ápr. 1. (V), 13.36
valaki segítsen!
2

Te írtad?

janoszen · 2007. Ápr. 1. (V), 13.53
Mit szeretnél elérni a nyafogással?

Egyébként meg sztem HTML/táblázat leckét nézd át, van egy rakás + 1 leírás róla a neten és megfelelően alkalmazd. És esetleg fogalmazd meg, hogy mit értesz egy sor alatt, egy táblázat cellát vagy tényleg egy sort?
3

táblázat

pezo · 2007. Ápr. 1. (V), 14.30
Már nem tudom hány féleképpen megpróbáltam már hogy jó legyen de nem mükődik. Tehát azt szeretnem megcsinálni, hogy egy sorban van cella ugyebár, és kiolvassa adatbázisból az értékeket, majd ha 2 cellába már kiolvasta akkor újabb sorban kezdje és ott is két cellába írja bele...
+---------+---------+
| rekord1 | rekord2 |
+---------+---------+
| rekord3 | rekord4 |
+---------+---------+

... amíg el nem éri a tízet. nekem nem sikerül megcsinálnom :S
4

For...

janoszen · 2007. Ápr. 1. (V), 19.38
Mondjuk pl. úgy tudod megcsinálni, hogy a for ciklust az összes record szám feléig futtatod és egy for ciklusban mindig két lekérést, azaz két egymás után levő cellát szolgálsz ki. Természetesen le kell kezelni azt az esetet is, ha a végén maradt egy árva cella.

Ha while-al akarod megcsinálni, akkor viszel egy számlálót és megvizsgálod, hogy a számláló értéke osztható-e kettővel. (moduló) Ha igen, akkor utána le kell zárni egy táblázat sort, ha nem akkor el kell kezdeni előtte egy új sort. És persze a végén ügyelni kell az árva cellákra.
5

példa

DsA · 2007. Ápr. 1. (V), 20.53
nemtudom erre gondolsz-e tökéletesen énse értem amit kérdezel, de az előttem szóló erre gondolt:

for($i=0;$i<mysql_num_rows($asd);$i++) {
	if ($i%2) {
		//egyik
	} else {
		//másik
	}
}
6

kód

pezo · 2007. Ápr. 2. (H), 09.09
<table width="450" border="0" align="center" cellpadding="5" cellspacing="5" bgcolor="#FBF9E3">
<tr>
<?php
include('admin/resources/common_admin.php');
include('admin/resources/db.php');
include('admin/resources/common.php');

DBConnect();
$sql = "select * from cikkek order by datum desc";
$result = DBQuery($sql);
$egyoldalon = 10;

if($i < $egyoldalon) { 
	while($cikk = DBFetch($result)) {
		$kep = $cikk['kep'];
		$cim = $cikk['cim'];
		$szoveg = $cikk['szoveg'];
		$bevezeto = explode(".", $szoveg);
		print "<td width='50%' valign='top'>
				 <table width='100%' border='0' cellpadding='2' cellspacing='0' style='background-color: #F9F5D5;'>
				   <tr>
					 <td valign='top'>
					   <div style='padding-right: 5px;'><img src=\"".$kep."\" width=\"75\" height=\"75\" border=\"1\" /></div>
					 </td>
					 <td>
						 <div style=\"text-transform: uppercase; padding-bottom: 4px;\"><strong>$cim</strong></div>
						 <div class=\"divLi\">".$bevezeto[0].".<br />
						 <a href=\"index.php?p=cikkek&cikkID=".$cikk['id']."\"><strong>Tov&aacute;bb&hellip;</strong></a></div>
					 </td>
				   </tr>
				 </table>
			   </td>";
		if($i%2) {
			print "<tr>\n";
			print "</tr>\n";
		} else {
			print "</tr>\n";
			print "<tr>\n";
		}
	}
}
$i++;
?>
</tr>
</table>
7

Majdnem

janoszen · 2007. Ápr. 2. (H), 09.15
Ha kettővel osztható, akkor csak /tr-t kell printelni UTÁNA, ha nem, akkor viszont a kiírás ELŐTT kell a tr-t printelni. Emlékeztetőül a negálás jele: !
9

nem jó

pezo · 2007. Ápr. 2. (H), 09.45
amúgy az $i-vel a kiiratások számát számolom. de még mindig nem rakja 2 oszlopba..
vagy több sorban és egy oszlopban, vagy több oszlopban de egy sorban :S
én azt szeretném ha lenne 5 sorom és 2 oszlopom de nem akar összejönni.
for($i = 0; $i < $egyoldalon; $i++) { 
	while($cikk = DBFetch($result)) {
		if(!($i%2)) {
			print "<tr>\n";
		}	
		$kep = $cikk['kep'];
		$cim = $cikk['cim'];
		$szoveg = $cikk['szoveg'];
		$bevezeto = explode(".", $szoveg);
		print "<td width='50%' valign='top'>
				 <table width='100%' border='0' cellpadding='2' cellspacing='0' style='background-color: #F9F5D5;'>
				   <tr>
					 <td valign='top'>
					   <div style='padding-right: 5px;'><img src=\"".$kep."\" width=\"75\" height=\"75\" border=\"1\" /></div>
					 </td>
					 <td>
						 <div style=\"text-transform: uppercase; padding-bottom: 4px;\"><strong>$cim</strong></div>
						 <div class=\"divLi\">".$bevezeto[0].".<br />
						 <a href=\"index.php?p=cikkek&cikkID=".$cikk['id']."\"><strong>Tov&aacute;bb&hellip;</strong></a></div>
					 </td>
				   </tr>
				 </table>
			   </td>";
		if($i%2) {
			print "</tr>\n";
		}
	}
}
11

húú

DsA · 2007. Ápr. 2. (H), 10.18
nah mostmár értem, hogy mit mondasz ezzel énis bajban voltam,
de én ugy oldottam meg, hogy lekérdeztem hogy mennyi találat van
és azt megfeleztem. aztán 0tól a felééig kiírattam az egyik oldalra, felétől az összes találatig a másik oldalra
de hogy ezt hogy is írtam le azt már nemtudom :) meg msot nem otthon vagyok és nemtudom bemásolni de ha érdekel hogy-hogy csináltam akkor még a mainap folyamán bemásolom!
12

oks

pezo · 2007. Ápr. 2. (H), 10.42
igen érdekel, megköszönném ha bemásolnád :)
13

nem értem, mi nehéz...

TeeCee · 2007. Ápr. 2. (H), 13.40
... ezen, persze lehet, hogy én vagyok túl gyakorlott, esetleg a problémát nem értem...

Mindenesetre gyógypéldaként, egy 6 és 7 elemes tömbbel illusztrálva itt van egy megoldás.
A Draw2Cols() az értehetőbb kezdőknek is, a DrawCols() pedig tetszőleges oszlopszámúra állítható, általánosabb.
(A border="1" azért van benne, hogy lássátok a cellákat...)

Működés közben megtekinthető: [itt]
Forrás itt is megtalálható: [itt]

<?php
$values1 = array('cella1', 'cella2', 'cella3', 'cella4', 'cella5', 'cella6');
$values2 = array('cella1', 'cella2', 'cella3', 'cella4', 'cella5', 'cella6', 'cella7');

function Draw2Cols( $arr ) {
	echo '<table border="1">';
	$rowsCount = ceil( count($arr)/2 );
	for( $i=0; $i<=$rowsCount+2; $i+=2) {
		echo '<tr>';
		echo '<td>'.$arr[$i].'</td>';
		echo '<td>'.@$arr[$i+1].'</td>';
		echo '</tr>';
	}
	echo '</table>';
}

function DrawCols( $arr, $cols=2 ) {
	echo '<table border="1">';
	$rowsCount = ceil( count($arr)/$cols );
	for( $i=0; $i<=$rowsCount+$cols; $i+=$cols) {
		echo '<tr>';
		for( $j=0; $j<$cols; $j++) {
			echo '<td>'.@$arr[$i+$j].'</td>';
		}
		echo '</tr>';
	}
	echo '</table>';
}

Draw2Cols( $values1 );
Draw2Cols( $values2 );
DrawCols( $values2, 2 );
DrawCols( $values2, 3 );
?>
14

probléma

pezo · 2007. Ápr. 3. (K), 00.05
van egy kis problémám a values változónál.. a tömbből csak az első értéket kapom meg :S
<?php
include('admin/resources/common_admin.php');
include('admin/resources/db.php');
include('admin/resources/common.php');

for($i=0; $i<=10; $i++) {
	DBConnect();
	$sql = "select * from cikkek order by datum desc limit $i, 1";
	$result = DBQuery($sql);
	while($row = DBFetch($result)) {
		$idk = $row['id'];
		$kepek = $row['cim'];
		$cimek = $row['cim'];
		$szoveg = $row['szoveg'];
		
		$bevezeto_ = explode(".", $szoveg);
		$bevezetok = $bevezeto_[0];
		
		$id = array($i => $idk);
		$kep = array($i => $kepek);
		$cim = array($i => $cimek);
		$bevezeto = array($i => $bevezetok);
		$table[$i] = "<table width='100%' border='0' cellpadding='2' cellspacing='0' style='background-color: #F9F5D5;'>
				    <tr>
					  <td valign='top'>
					    <div style='padding-right: 5px;'><img src=\"".$kep[$i]."\" width=\"72\" height=\"72\" border=\"1\" /></div>
					  </td>
					  <td>
					    <div style=\"text-transform: uppercase; padding-bottom: padding-bottom: 4px;\"><strong>".$cim[$i]."</strong></div>
					    <div class=\"divLi\">".$bevezeto[$i]."<br />
						<a href=\"index.php?pageID=cikkek&cikkID=".$id[$i]."\"><strong>Tov&aacute;bb&hellip;</strong></a></div>
					  </td>
					</tr>
				  </table>";
		$values = array($table[0], $table[1], $table[2]);
	}
	

	function Draw2Cols($arr) {
		echo '<table width="450" border="0" align="center" cellpadding="5" cellspacing="5" bgcolor="#FBF9E3">';
		$rowsCount = ceil( count($arr)/2 );
		for( $ii=0; $ii<=$rowsCount+2; $ii+=2) {
			echo '<tr>';
			echo '<td>'.$arr[$ii].'</td>';
			echo '<td>'.@$arr[$ii+1].'</td>';
			echo '</tr>';
		}
		echo '</table>';
	}
	
	Draw2Cols($values);
}
?>
15

Érted, amit lekódolsz?

janoszen · 2007. Ápr. 3. (K), 08.32
Te figyelj, egyáltalán érted, amit lekódolsz? Az elején van egy 1-től 10-ig menő ciklusod és minden ciklusban while-al lekéred az összes adatbázisból kapott értéket? Mint írtam korábban, VAGY-VAGY. Nem ÉS. Próbáld meg végiggondolni, mi mit csinál, ne csak copy paste-elni.
16

tudom

pezo · 2007. Ápr. 3. (K), 11.34
már rájöttem és megvan a müködő verzió.
itt:
<?php
include('admin/resources/common_admin.php');
include('admin/resources/db.php');
include('admin/resources/common.php');

for($i=0; $i<=10; $i++) {
	DBConnect();
	$sql = "select * from cikkek order by datum desc limit $i, 1";
	$result = DBQuery($sql);
	while($row = DBFetch($result)) {
		$idk = $row['id'];
		$kepek = $row['cim'];
		$cimek = $row['cim'];
		$bevezetok = $row['bevezeto'];;
		
		$id = array($i => $idk);
		$kep = array($i => $kepek);
		$cim = array($i => $cimek);
		$bevezeto = array($i => $bevezetok);
		
		$table[$i] = "<table width='100%' border='0' cellpadding='2' cellspacing='0' style='background-color: #F9F5D5;'>
				    <tr>
					  <td valign='top'>
					    <div style='padding-right: 5px;'><img src=\"".$kep[$i]."\" width=\"72\" height=\"72\" border=\"1\" /></div>
					  </td>
					  <td>
					    <div style=\"text-transform: uppercase; padding-bottom: padding-bottom: 4px;\"><strong>".$cim[$i]."</strong></div>
					    <div class=\"divLi\">".$bevezeto[$i]."<br />
						<a href=\"index.php?pageID=cikkek&cikkID=".$id[$i]."\"><strong>Tov&aacute;bb&hellip;</strong></a></div>
					  </td>
					</tr>
				  </table>";
		
	}
}

$values = array($table[0], $table[1], $table[2], $table[3], $table[4], $table[5], $table[6], $table[7], $table[8], $table[9]);
	

function Draw2Cols($arr) {
	echo '<table width="475" border="0" align="center" cellpadding="5" cellspacing="5" bgcolor="#FBF9E3">';
	$rowsCount = ceil( count($arr)/2 );
	for( $j=0; $j<=$rowsCount+2; $j+=2) {
		echo '<tr>';
		echo '<td valign="top">'.$arr[$j].'</td>';
		echo '<td valign="top">'.@$arr[$j+1].'</td>';
		echo '</tr>';
	}
	echo '</table>';
}
	
Draw2Cols($values);

?>
17

nem tudod

gex · 2007. Ápr. 3. (K), 11.59
ugynúgy benne hagytad a két ciklust:

<?php
for($i=0; $i<=10; $i++) {
    //...
    while($row = DBFetch($result)) {
        //...
    }
}
?>
ráadásul ciklusban csatlakozol az adatbázishoz.

ez a rész:

<?php
        $idk = $row['id'];
        $kepek = $row['cim'];
        $cimek = $row['cim'];
        $bevezetok = $row['bevezeto'];;
        
        $id = array($i => $idk);
        $kep = array($i => $kepek);
        $cim = array($i => $cimek);
        $bevezeto = array($i => $bevezetok);
?>
meg külön érthetetlen számomra. miért nem használod magát a $row tömböt a kiíratáskor?

kis józan paraszti ésszel, jelenleg neked erre van szükséged:

<?php
echo '<table>';
while ($row = DBFetch($result)) {
    echo '<tr>';
    echo '<td>' . htmlspecialchars($row['akarmi']) . '</td>';
    echo '<td>' . ($row = DBFetch($result) ? htmlspecialchars($row['akarmi']) : '&nbsp;') . '</td>';
    echo '</tr>';
}
echo '</table>';
?>
aztán ha majd gyakorolsz meg tanulsz még egy kicsit, akkor tovább tudod majd fejleszteni. tesztelni nem teszteltem, sok sikert!
18

hogyan?

pezo · 2007. Ápr. 3. (K), 23.16
most ezt szeretném elérni, hogy az adatbázisból így olvassa ki a rekordokat a táblázatba:

+-------+-------+-------+
|rekord1|rekord2|rekord3|
+-------+-------+-------+
|rekord4|rekord5|rekord6|
+-------+-------+-------+
|rekord7| ... amennyi rekord van az adatbázis kiválasztott táblájában
+-------+
19

Gondolkodsz is?

janoszen · 2007. Ápr. 4. (Sze), 09.37
Figyelj, komolyan, gondolkodsz is azon, amit copy pastelsz befele a kódodba? Mert az alapján komolyan, kb 2-3 sort kell átírni és működik. Nagyon szívesen a szádba rághatunk mindent, csak valahol feltűnő a gondolkodni nem akarásod.
20

15 elem, 3oszlop

Castor87 · 2007. Júl. 24. (K), 09.37
Üdv!
Van egy 15 elemű tömböm. A DrawCols verzióval szeretném kiíratni 3 oszlopban. Valamiért, csak az első 12 elemet írja ki.
Így néz ki:

<?
function DrawCols( $arr, $cols=2 ) {
    echo '<table border="1">';
    $rowsCount = ceil( count($arr)/$cols );
    for( $i=0; $i<=$rowsCount+$cols; $i+=$cols) {
        echo '<tr>';
        for( $j=0; $j<$cols; $j++) {
            echo '<td>'.@$arr[$i+$j].'</td>';
        }
        echo '</tr>';
    }
    echo '</table>';
}
DrawCols( $smallkeplista, 3 );

print_r($smallkeplista);
?>
Biztos minden esetben jól működik ez a függvény? Vagy én rontottam el valami??
21

gyors vagyok ;)

TeeCee · 2007. Aug. 4. (Szo), 15.17
Szia!

Természetesen egy hiba benne maradt, az 5. sorban ennek a feltételnek ennek kéne lennie:
$i<$rowsCount*$cols

Javított példa: [itt]
Forráskód pedig: [itt]
22

egyszerű

pezo · 2008. Ápr. 1. (K), 11.08
nem kell ehhez táblázat generáló fv.
ez könnyebb és érthetőbb akárkinek:
$oszlop = 1;
while(...) {
   if($oszlop == 1) {
      echo "<tr>\n";
   }

   //táblázat tartalma
   echo "<td>tartalom</td>"

   $oszlop++;

   //vizsgálat
   if($oszlop == kívánt cella száma egy sorban + 1) {
      $oszlop = 1;
      echo "</tr>\n"
   }
}
8

de

DsA · 2007. Ápr. 2. (H), 09.26
de amugy az $i változódat hol hozod létre meg miaz?
10

hát

pezo · 2007. Ápr. 2. (H), 10.12
a for ciklusban, és azzal számolom a kiiratások számát. ha kisebb mint $egyOldalon akkor több kiiratás nem kell.