afisare rezultate db in tabel cu x coloane

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori

Avatar utilizator
menace_forevermore
Average Member
Mesaje: 128
Membru din: Mar Aug 07, 2007 9:21 am
Localitate: Barlad

afisare rezultate db in tabel cu x coloane

Mesajde menace_forevermore » Mar Aug 07, 2007 9:26 am

dupa ce extrag niste rezultate din baza de date, as dori sa le afisez intrun tabel cu x coloane.
Daca luam de exemplu x = 3 adica un tabel cu 3 coloane, codul generat ar trebui sa fie ceva de genul:

Cod: Selectaţi tot

<table>
<tr>
<td>nume1</td><td>nume2</td><td>nume3</td>
</tr>
<tr>
<td>nume4</td><td>nume5</td><td>nume6</td>
</tr>
<tr>
<td>nume7</td><td></td><td></td>
</tr>
</table>


cum as putea face acest lucru ?




Avatar utilizator
menace_forevermore
Average Member
Mesaje: 128
Membru din: Mar Aug 07, 2007 9:21 am
Localitate: Barlad

re

Mesajde menace_forevermore » Mar Aug 07, 2007 9:58 am

m-am uitat peste topicurile respective insa nu ma descurc, as dori o indicatie deoarece nu pot sa definesc algoritmul astfel incat sa imi genereze codul corect.

ideea ar fi ca la fiecare 3 rezultate sa imi apara un rand

Cod: Selectaţi tot

<tr>
<td>nume1</td> -- coloana 1
<td>nume2</td> -- coloana 2
<td>nume3</td> -- coloana 3
</tr>



iar daca am 1 singur rezultat sau 2 pe ultimul rand sa imi genereze un rand tot cu 3 celule insa cu ultimele goale

pt 1 rezultat pe ultimul rand

Cod: Selectaţi tot

<tr>
<td>nume1</td>
<td></td>
<td></td>
</tr>


pt 2 rezultate pe ultimul rand

Cod: Selectaţi tot

<tr>
<td>nume1</td>
<td>nume2</td>
<td></td>
</tr>


ultimul rand poate fi bineinteles si primul, adica sa am un singur rand (caz in care am 1,2 sau 3 rezultate)

repet ca toate codurile care le-am scris sau incercat pana acum imi generau cod incorect care in anumite cazuri nu avea inchise tagurile cum trebuie

crivion
Senior Member
Mesaje: 781
Membru din: Mar Apr 10, 2007 4:20 pm
Localitate: Somewhere

Mesajde crivion » Mar Aug 07, 2007 10:39 am

uite asa m-au ajutat pe mine baietii si merge de minune
dupa query pui
$i=0;
while($row = @mysql_fetch_array($result)) {
$i++;

if($i%4==0){
print <td></tr><tr>
}else{
print <td></td>
}

pui tu ghilimelele si ce mai trebuie peacolo

fakker
PHPRomania Supporter
Mesaje: 21
Membru din: Mie Iul 25, 2007 5:01 pm
Contact:

Mesajde fakker » Mar Aug 07, 2007 11:13 am

Eu ma gandesc asa:

Cod: Selectaţi tot

//inainte faci conexiunea la baza de date
//$query este queryul pentru a obtine rezultatele pe care vrei sa le afisezi
$result=mysql_query($query);

echo("<HTML><TABLE frame=box rules=all width=75%><TR>");

$control=0;
$x=3; //$x e numarul de coloane pe rand; poti sa setezi cat vrei

while($row=mysql_fetch_array($result))
  {
   $control++;
   echo("<TD>".$row[0]);
   if(!($control%$x))
         echo("<TR>");
  };

echo("</TABLE></HTML>");

Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Mesajde vectorialpx » Mar Aug 07, 2007 11:21 am

si... te gandesti bine?
ai rezultatul in thread-urile alea... doar ca trebuie sa legi un pic de cod...

daca vrei totul gata-facut... asteapta pana se indura cineva sa-ti faca pomana

pehashpist
Average Member
Mesaje: 196
Membru din: Joi Feb 08, 2007 12:52 pm

Mesajde pehashpist » Mar Aug 07, 2007 1:24 pm

Cod: Selectaţi tot

<?php
echo'<table><tr>';
$i=1;
$x=3;
$sql=mysql_query("SELECT * FROM `blabla`");
while($cevreitu=mysql_fetch_array($sql)){
echo'<td>'.$cevreitu["coloana_din_baza_de_date"].'</td>';                     
if($i%$x==0)echo'</tr><tr>';
$i++;
}
echo'</tr></table>';
?>

cred ca asta cauti, sper sa nu fi gresit ceva pt ca nu am testat

Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Mesajde vectorialpx » Mar Aug 07, 2007 2:19 pm

cel mai simplu e cu div-uri [a zis cineva prin forum]...
daca voi vreti sa va iasa tabele "handicapate", treaba voastra...

daca i-ul ajunge la 7 => <table>
<tr> <td>1</td> <td>2</td> <td>3</td> </tr>
<tr> <td>4</td> <td>5</td> <td>6</td> </tr>
<tr> <td>7</td> </tr> </table>

si, e afisat corect in browser... dar arata ca draq :?

Avatar utilizator
kyron
Senior Member
Mesaje: 639
Membru din: Joi Sep 16, 2004 1:12 pm
Localitate: Bucuresti
Contact:

Mesajde kyron » Mar Aug 07, 2007 2:29 pm

exista css si pentru tabele, ca sa nu mai arate ca draq

Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Mesajde vectorialpx » Mar Aug 07, 2007 3:01 pm

nu era vorba de css... ci de structura lui

linie - 3 celule
linie - 3 celule
linie - 1 celula 8O

Avatar utilizator
menace_forevermore
Average Member
Mesaje: 128
Membru din: Mar Aug 07, 2007 9:21 am
Localitate: Barlad

Mesajde menace_forevermore » Mar Aug 07, 2007 8:38 pm

se pare ca nici unul din codurile voastre nu imi genera codul html asa cum am specificat, mai precis nu imi afisa si celulele goale, dar combinand algoritmul din codurile voastre si cu ce mai stiu si eu am obtinut

Cod: Selectaţi tot

<?php

$interogare = "SELECT * from `tabel`";
$rezultat=mysql_query($interogare);
$nr_randuri=mysql_num_rows($rezultat);
echo "<table border=\"1\">\n";
echo "<tr>\n";
$j = 0;
   for($i=0; $i < $nr_randuri; $i++)
   {
   $rand = mysql_fetch_array($rezultat);
   $j++;
   echo "<td>".$rand["nume"]."</td>\n";

      if($j%3==0)
      {
         if($j==$nr_randuri)
         {
         }
         else
         {
         echo "</tr>\n";
         echo "<tr>\n";
         }
      }
      elseif ($j==$nr_randuri)
      {
      $celule_lipsa = ceil($nr_randuri / 3) * 3 - $nr_randuri;
         for ($k=0; $k < $celule_lipsa; $k++)
         {
         echo "<td></td>\n";
         }
      }
   }
echo "</tr>\n";
echo "</table>\n";


mysql_free_result($rezultat);

?>


am testat si se pare ca afiseaza exact asa cum vreau... insa nu stiu daca procedura este cea mai buna... si daca merge in orice caz.... pareri ? 8O !

Avatar utilizator
MihaiC
Senior Member
Mesaje: 1644
Membru din: Dum Mai 14, 2006 8:07 pm

Mesajde MihaiC » Mie Aug 08, 2007 12:34 am

de ce ai folosit "$j" daca oricum are intotdeauna aceeasi valoare cu "$i" ? :?
Dev @ oblio.eu

Avatar utilizator
menace_forevermore
Average Member
Mesaje: 128
Membru din: Mar Aug 07, 2007 9:21 am
Localitate: Barlad

Mesajde menace_forevermore » Mie Aug 08, 2007 1:30 am

daca te uiti mai atent loopul incepe cand i = 0, iar in acel moment j = 1. Bine ca pot sa fac un artificiu si in loc de j sa pun mereu i+1 sau sa incep numerotarea de la 1 si sa pun <= dar functioneaza perfect ai asa :D


Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 38 vizitatori