Avatar billede 1mkha97 Nybegynder
25. januar 2003 - 16:38 Der er 13 kommentarer og
1 løsning

Printe ud i en tabel!

Er ny i php, så bær over med mig.

Jeg har et resultat fra en forespørgslen i en mysql database (i $result). Jeg kan godt udskrive til en tabel med en enkelt kolonne, men hvordan udskriver jeg resultater til flere kolonner?
Avatar billede Slettet bruger
25. januar 2003 - 16:48 #1
Prøv at vise hvordan du nu udskriver til en enkelt kolonne. Så skulle jeg nok kunne hjælpe :)
Avatar billede 1mkha97 Nybegynder
25. januar 2003 - 16:50 #2
print "<table align = 'center' width=90%>";
    while($row = mysql_fetch_array($result)) {
    print "<tr><td><A HREF='showdvd.php?dvdid=$row[id]'>$row[titel] </A></td></tr>";
      }
    print "</table><BR><BR>";
Avatar billede tipsen Nybegynder
26. januar 2003 - 01:37 #3
...du kan jo få et svar i morgen ;-) (Troede ikke du stadig fiflede med php?)
Avatar billede kinguru Nybegynder
26. januar 2003 - 02:13 #4
Jeg syntes at en smart måde at hente data fra et table er at smide hente funktionen i en fil, og så require() den i de sider som man skal hente data fra en sql database.

#fil: funktioner/mysql.php
<?php
// Funktion til at hente data fra en mysql database
function mysqlHent($query) {
  $resultat = mysql_query($query);

  if(!$resultat) {
    udskriv_fejl("Kunne ikke udføre: <em>$query</em>");
  }

  while($raekke = mysql_fetch_array($resultat)) {
    $resultat_array[] = $raekke;
  }

  return $resultat_array;
}
?>

#fil: test.php
<?php
// Includere mysql hente funktionen
require("funktioner/mysql.php");

$sql = "SELECT id FROM whatever";
// Opretter forbindelse til mysql og vælger database

mysql_connect('localhost','bruger','pass');
mysql_select_db('database');
$resultat = mysqlHent($sql);
mysql_close();

for($i=0;$i<count($resultat);$i++) {
    // hiver værdierne ud fra arrayen og smider dem i strings
    extract($resultat[$i]);
    echo "$id<br>\n";
}


Sådan syntes jeg ihvertfald at man kan spare en del tid på at skrive unødvendig kode! :D

mvh Michael
Avatar billede kinguru Nybegynder
26. januar 2003 - 02:14 #5
Doh!
Ja sorry men jeg glemte lige i farten at lukke for scriptet igen med ?>... Men jeg håber ikke det gør det noget! ;)!
Avatar billede kinguru Nybegynder
26. januar 2003 - 02:49 #6
Sorry, havde lige overset det med flere tables! :-) Sorry! :D

Det er ikke sådan når det er sent! :D
Avatar billede fangel Nybegynder
26. januar 2003 - 09:43 #7
du vil altså lave en X*Y table (X koloner, Y rækker; hvor X sættes i scriptet)? hvis ja, så kan jeg lige smide lidt kode om hvordan dette gøres...

Morten
Avatar billede 1mkha97 Nybegynder
26. januar 2003 - 10:47 #8
Til Morten:
Som du kan se kan jeg godt skrive resultatet fra forespørgslen ud i en tabel med en enkelt kolonne. Problemet er så at denne tabel bliver meget lang. Derfor ville det være mere overskueligt at skrive ud til en tabel med to kolonner... (håber du forstår)
Avatar billede fangel Nybegynder
26. januar 2003 - 12:00 #9
det gør jeg... jeg skal desværre afsted til en af mine venner og lave skolearbejde.... så hvis du kan vente til i aften, så skal jeg gerne svare...

Morten
Avatar billede hyttemeier Nybegynder
26. januar 2003 - 12:26 #10
print "<table align = 'center' width=90%>";
  $i = 0;
  while($row = mysql_fetch_array($result)) {
if($i % 2 == 0) {
        print "<tr><td><a href='showdvd.php?dvdid=$row[id]'>$row[titel]</a></td>";
    } else {
        print "<td><a href='showdvd.php?dvdid=$row[id]'>$row[titel]</a></td></tr>";
    }
    $i++;
    }
    if ($i % 2 == 1) {
    print "<td></td></tr>";
    }
print "</table><BR><BR>";

Hmm, jeg er ikke så god til at gennemgå det i hovedet :) Men jeg mener dette skulle virke :)
Skulle der være et ulige antal dvd'er skal der blive en tom celle tilsidst.

/Hyttemeier
Avatar billede hyttemeier Nybegynder
26. januar 2003 - 12:37 #11
Jeg kan lige se at linie 4 har flyttet sig lidt. Den skulle være rykket lidt ind under while :)
Avatar billede fangel Nybegynder
26. januar 2003 - 19:00 #12
jeg bruger følgende...

--- tabel.php ---
<?php

//MySQL connect
$sql = "SELECT * FROM noget ORDER BY noget DESC";
$query = mysql_query($sql)or die("fejl i " . $sql . "<br><br>fejlen var: " . mysql_error());

while($data = mysql_fetch_array($query)){
  $indhold[] = $data;
}

//så laver vi tabellen... du kan ændre i disse ting hvis du vil...
$brede = 2; // antal koloner per række
$brede_paa_table = 400; // bredden på tabellen...

echo "<table width=\"$brede_paa_table\">\n<tr>\n";

$i=0;
$ii=0;

while($brede*(ceil(count($indhold)/$brede))>$i){

  if($ii == $brede){
    echo "</tr>\n<tr>\n";
    $ii=0;
  }
if(isset($indhold[$i])){
    echo "  <td width=\"" . round($brede_paa_table / $brede,1) . "\" align=\"center\" valign=\"top\">
  " . $indhold[$i]['et_felt_i_din_db_som_du_vil_udskrive'] . "
  </td>\n";
  }
  else{
    echo "  <td width=\"" . round($brede_paa_table / $brede,1) . "\">&nbsp;</td>\n";
  }
  $i++;
  $ii++;
}
echo "</tr>\n</table>";
?>

Morten
Avatar billede tipsen Nybegynder
28. januar 2003 - 16:18 #13
Jeg har bikset følgende sammen som nemt kan bruges til at udskrive indhold af arrays, udtræk fra db osv:

<?php
//udtræk fra db
$res = mysql_query("select navn from table");

//Hvor mange søjler i tabellen
$ColumnCount = 2;
//Hvor mange poster i udtrækket
$RecordCount = mysql_num_rows($res);
//Hvor mange rækker får vi brug for
$RowCount = (int) ($RecordCount / $ColumnCount) + 1;

echo "<table>\n";
//loop over rækker
for ($i=0;$i<$RowCount;$i++) {
    echo "\t<tr>\n";
    //loop over søjler
    for ($j=0;$j<$ColumnCount;$j++) {
        echo "\t\t<td>";
        //hvis vi ikke er nået til sidste post
        if(($i+1)*$ColumnCount+$j < $RecordCount) {
            list($navn) = mysql_fetch_row($res);
            echo 'Navn: ' . $navn;
        }
        echo "</td>\n";
    }
    echo "\t</tr>\n";
}
echo "</table>\n";
?>

Hvis det kun er db-udtræk, kan man udnytte, at mysql_fetch_row() returnerer false når der ikke er flere poster:

<?php
$res = mysql_query("select navn from table");

$ColumnCount = 2;
$RecordCount = mysql_num_rows($res);
$RowCount = (int) ($RecordCount / $ColumnCount) + 1;

echo "<table>\n";
for ($i=0;$i<$RowCount;$i++) {
    echo "\t<tr>\n";
    for ($j=0;$j<$ColumnCount;$j++) {
        echo "\t\t<td>";
        if((list($navn) = mysql_fetch_row($res) !== false) {
            echo 'Navn: ' . $navn;
        }
        echo "</td>\n";
    }
    echo "\t</tr>\n";
}
echo "</table>\n";
?>

Den lille stump kode genererer desuden 'pæn' html-source - derfor nogle \t og \n
Avatar billede tipsen Nybegynder
28. januar 2003 - 16:39 #14
Fordelen ved deas og undertegnedes udgave er at hvis du finder på at ændre antallet af søjler til 3, 4, 5 el. flere kolonner fungerer de fejlfrit - hyttemeiers udgave benytter et lille "trick" i tilfældet med 2 søjler og kan ikke umiddelbart skaleres - men det kommer selvfølgelig an på behovet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester