Avatar billede saxtus Nybegynder
13. november 2003 - 22:34 Der er 24 kommentarer og
1 løsning

placering af resultater i tabel

Jeg er i gang med at lave et projekt på skolen med et boigraf system, og ind til videre går det godt, men nu er jeg løbet ind i et problem jeg ikke lige kan overskue og håber at der er en eller flere der kan hjælpe mig

Jeg skal have placeret sæderne i boigrafen så numrene starter inde fra midten og ud efter, med lige numre på den ene side og ulige på den anden side. Det skal den så gøre på alle rækkerne. Der ud over skal den kunne gøre det ud fra et vilkårligt antal sæder pr række (i min føreste udgave er der det samme antal sæder pr række9 men vælger man en anden sal er antallet af sæder måske ikke det samme.

Til placeringen af sæderne har jeg overvejet at sortere dem med en modolus division med 2 så
x mod 2= 0 bliver højre side og
x mod 2= 1 bliver venstre side.

hvis du ønkser yderlige oplysninger om hvordan og hvorledes skal du bare spørge.
Avatar billede detox Nybegynder
13. november 2003 - 22:51 #1
Jeg kunne forestille mig noget i den her stil:

<?
$antal = 9;
for ($i=1;$i<=$antal;$i++) {
if ($i&1) $lige[] = $i;
else $ulige[] = $i;
}
$ulige = array_reverse($ulige);
$alle = array_merge($ulige, $lige);
?>
<table>
<tr>
<?
foreach ($alle as $val) {
    echo "<td>{$val}</td>";
}
?>
</tr>
</table>
Avatar billede detox Nybegynder
13. november 2003 - 22:52 #2
Der sætter du bare antal sæder ($antal) i starten af scriptet.
Avatar billede detox Nybegynder
13. november 2003 - 22:55 #3
Ok skal betegnelserne lige og ulige give mening skal det se sådan ud:

<?
$antal = 14;
for ($i=1;$i<=$antal;$i++) {
if ($i&1) $ulige[] = $i;
else $lige[] = $i;
}
$lige = array_reverse($lige);
$alle = array_merge($lige, $ulige);
?>
<table>
<tr>
<?
foreach ($alle as $val) {
    echo "<td>{$val}</td>";
}
?>
</tr>
</table>
Avatar billede detox Nybegynder
13. november 2003 - 23:19 #4
Eksempel med forskellige antal sæder pr række:

<?
$antal = array(13,12,12,12,11,11,11,12,13,14,15);//Antal sæder pr række
$out = "";
for ($i=count($antal);$i>0;$i--) {
    $alle = opstil($antal[$i-1]);
    $out .= "<table align='center'><tr>";
    $out .= "<td><font color='#FF3300'>Række: $i</font></td>";
    foreach ($alle as $val) {
        $out .= "<td>{$val}</td>";
    }
    $out .= "</tr></table>";
}
echo $out;
//Fuktioner
function opstil($antal) {
    for ($i=1;$i<=$antal;$i++) {
        if ($i&1) $ulige[] = $i;
        else $lige[] = $i;
    }
    $lige = array_reverse($lige);
    $alle = array_merge($lige, $ulige);
return $alle;
}
?>
Avatar billede detox Nybegynder
13. november 2003 - 23:22 #5
$out .= "<td><font color='#FF3300'>Række: $i</font></td>";
En mere korrekt formatering er nok:
$out .= "<td style='color: #00CC66;'>Række: $i</td>";
Avatar billede saxtus Nybegynder
14. november 2003 - 14:34 #6
Antallet af sæder skal trækkes ud af databasen, og der kan man vel lave en count på antal sæder pr række.
De ting jeg kan trække ud fra databasen er: sædeId, rækkeNr, sædeNr og bioId
Avatar billede detox Nybegynder
14. november 2003 - 16:39 #7
Ja, det er klart. Mangler du mere hjælp, må du sige til. I så fald kunne du smide et dump af databasestrukturen og evt. lidt data, så er det nemmere at danne sig et indtryk at problematikken.
Avatar billede saxtus Nybegynder
14. november 2003 - 21:34 #8
så har jeg fundet en databasestruktur

#
# Struktur dump for tabellen `seats`
#

CREATE TABLE seats (
  seatId int(11) NOT NULL auto_increment,
  bioId tinyint(11) NOT NULL default '0',
  rowNr tinyint(11) NOT NULL default '0',
  seatNr tinyint(11) NOT NULL default '0',
  avl tinyint(4) NOT NULL default '1',
  PRIMARY KEY  (seatId)
) TYPE=MyISAM;

#
# Data dump for tabellen `seats`
#

INSERT INTO seats VALUES (1, 1, 1, 1, 1);
INSERT INTO seats VALUES (2, 1, 1, 2, 1);
INSERT INTO seats VALUES (3, 1, 1, 3, 1);
INSERT INTO seats VALUES (4, 1, 1, 4, 1);
INSERT INTO seats VALUES (5, 1, 1, 5, 1);
INSERT INTO seats VALUES (6, 1, 2, 1, 1);
INSERT INTO seats VALUES (7, 1, 2, 2, 1);
INSERT INTO seats VALUES (8, 1, 2, 3, 1);
INSERT INTO seats VALUES (9, 1, 2, 4, 1);
INSERT INTO seats VALUES (10, 1, 2, 5, 1);
INSERT INTO seats VALUES (11, 1, 3, 1, 1);
INSERT INTO seats VALUES (12, 1, 3, 2, 1);
INSERT INTO seats VALUES (13, 1, 3, 3, 1);
INSERT INTO seats VALUES (14, 1, 3, 4, 1);
INSERT INTO seats VALUES (15, 1, 3, 5, 1);

Mit output skal så opbygges sådan her, det er så set ud fra det der står i databasen, men det skal virke dynamisk.

Række 3:  sæde5, sæde3, sæde1, sæde2, sæde4
Række 2:  sæde5, sæde3, sæde1, sæde2, sæde4
række 1:  sæde5, sæde3, sæde1, sæde2, sæde4

måske kan det laves ved hjlæp af et par count funktioner hvor man først tæller antal rækker og bagefter tæller antal sæder på den bestemte række.
Avatar billede detox Nybegynder
14. november 2003 - 22:42 #9
Her er et forslag:

<?
require 'db.php';
$res = mysql_query("select * from seats where bioId=1");
while ($row = mysql_fetch_assoc($res)) {
    if ($row['seatNr']&1) $nr[$row['rowNr']]['ulige'][] = $row['seatNr'];
    else $nr[$row['rowNr']]['lige'][] = $row['seatNr'];
}
echo "<table border='1'>";
for ($i=count($nr);$i>0;$i--) {
    $ulige = array_reverse($nr[$i]['ulige']);
    $alle = array_merge($ulige, $nr[$i]['lige']);
    echo "<tr><td style='width: 4em; color:red;'>Række: ".$i."</td>";
    foreach ($alle as $en){
        echo "<td style='text-align: center; color:blue; width: 2em;'>".$en."</td>";
    }
    echo "</tr>";
}
echo "</table>";
?>
Avatar billede detox Nybegynder
15. november 2003 - 02:29 #10
En lidt mere komplet version:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Biffen</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<style type="text/css">
<!--
body {
    text-align: center;
    color: #000099;
}
.seat {
    background-color: #CCFFFF;
    text-align: center;
    border: thin groove #00CC00;
    width: 2em;
    color: blue;
}
.row {
    background-color: #FFFFCC;
    text-align: center;
    border: thin groove #CC0000;
    width: 5em;
    color: red;
    font-weight: bolder;
}
-->
</style>
<body>
<h1>Bio grande</h1>
<?
require 'db.php';// Forbindelse til database
$res = mysql_query("select * from seats where bioId=1");
while ($row = mysql_fetch_assoc($res)) {
    if ($row['seatNr']&1) $nr[$row['rowNr']]['ulige'][] = $row['seatNr'];
    else $nr[$row['rowNr']]['lige'][] = $row['seatNr'];
}
for ($i=count($nr);$i>0;$i--) {
    $ulige = array_reverse($nr[$i]['ulige']);
    $alle = array_merge($ulige, $nr[$i]['lige']);
    echo "<table><tr><td class='row'>Række: ".$i."</td>";
    foreach ($alle as $en){
        echo "<td class='seat'>".$en."</td>";
    }
    echo "</tr></table>";
}
?>
</body>
</html>
Avatar billede saxtus Nybegynder
15. november 2003 - 11:34 #11
perfekt, nu mangler jeg bare lige at smide et link på hvert sæde med seatId så man kan trykke på et bestemt sæde.

Du har godt nok været til stor hjælp
Avatar billede detox Nybegynder
15. november 2003 - 11:53 #12
Ok, et eksempel der linker til: 'ny.php'. Skift:
echo "<td class='seat'>".$en."</td>";
ud med:
echo "<td class='seat'><a href='ny.php?row=".$i."&seat=".$en."'>".$en."</a></td>\n";
Avatar billede detox Nybegynder
15. november 2003 - 11:55 #13
Så kan du hente oplysningerne i 'ny.php' med:

$row = $_GET['row'];
$seat = $_GET['seat'];
Avatar billede saxtus Nybegynder
15. november 2003 - 13:24 #14
kan jeg ændre størelsen på sæderne så de har den samme størrelse hele vejen over (ved godt at der kommer bundscroller)
så skal du nok få dine point, og det er velfortjænt
Avatar billede detox Nybegynder
15. november 2003 - 13:27 #15
Jeg troede de havde samme størrelse. Det fastlægges jo her:

.seat {
    background-color: #CCFFFF;
    text-align: center;
    border: thin groove #00CC00;
    width: 2em;
    color: blue;
}

Ellers prøv at lege med width.
Avatar billede saxtus Nybegynder
15. november 2003 - 13:29 #16
det har jeg lige prøvet, men det virker ikke. du kan se det hvis du skriver 3 i den med vis biograf på www.kalundhobbyen.dk/biffen/
Avatar billede saxtus Nybegynder
15. november 2003 - 13:33 #17
det passer godt nok med sal 1 og sal 2 men sal 3 jeg har lavet består af mange flere sæder. hvad kan jeg så gøre med ændring af højden. eller er det bare at skrive height ind
Avatar billede detox Nybegynder
15. november 2003 - 13:34 #18
Ok, du skal nok for det første ændre:
width: 5em; til width: 6em; i .row{}, så den viser det på en række.
Avatar billede detox Nybegynder
15. november 2003 - 13:36 #19
Så kan du osse eksperomentere lidt med width i .seat{}, fx: width: 24px; (eller lign.)
Avatar billede detox Nybegynder
15. november 2003 - 13:41 #20
Endelig kan du jo osse lege lidt med skrifttype og størrelse i .seat og .row. Fx:

.seat {
    background-color: #CCFFFF;
    text-align: center;
    border: medium groove #00CC00;
    width: 18px;
    color: blue;
    font-family: "Times New Roman", Times, serif;
    font-size: 9px;
}
.row {
    background-color: #FFFFCC;
    text-align: center;
    border: medium ridge #CC99FF;
    width: 42px;
    color: #CC0000;
    font-weight: bolder;
    font-family: "Times New Roman", Times, serif;
    font-size: 10px;
}
Avatar billede saxtus Nybegynder
15. november 2003 - 13:43 #21
em det virker da så en underlig målestok. kan man ikke gå helt over til px??
Avatar billede detox Nybegynder
15. november 2003 - 13:45 #22
Netop.
Avatar billede saxtus Nybegynder
15. november 2003 - 13:51 #23
mystisk, den prøver stadig at tilpasse dem til siden uden bundscroller, selvom jeg har sat det sådan her op

.seat {
    background-color: #CCFFFF;
    text-align: center;
    border: thin groove #00CC00;
    width: 30px;
    height: 25px;
    color: blue;
}
.row {
    background-color: #FFFFCC;
    text-align: center;
    border: thin groove #CC0000;
    width: 160px;
    height: 25px;
    color: red;
    font-weight: bolder;
}
Avatar billede detox Nybegynder
15. november 2003 - 14:03 #24
Jeg har desværre ikke mere tid lige nu, så du må lege lidt med det.
Avatar billede detox Nybegynder
16. november 2003 - 00:43 #25
Jeg har prøvet at ligge det hele i en tabel, det afhjælper problemet for så vidt at det kan være i denne. Derfor har jeg osse brugt mindre tekst. Men du kan lege lidt med skriftstørrelse ift hvor stor du vil have den omliggende tabel.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Biffen</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<style type="text/css">
<!--
body {
    text-align: center;
    color: #999900;
    background-color: #EEEEEE;
}
.abso {
    width: 1024px;
    text-align: center;
}
.seat {
    background-color: #CCFFFF;
    text-align: center;
    border: medium groove #00CC00;
    width: 12px;
    color: blue;
    font-family: "Times New Roman", Times, serif;
    font-size: 10px;
}
.row {
    background-color: #FFFFCC;
    text-align: center;
    border: medium ridge #CC99FF;
    width: 68px;
    color: #CC0000;
    font-weight: bolder;
    font-family: "Times New Roman", Times, serif;
    font-size: 11px;
}
-->
</style>
<body>
<table class="abso"><tr><td>
<h1>Bio Grande</h1>
<?
require 'db.php';// Forbindelse til database
$res = mysql_query("select * from seats where bioId=1");
while ($row = mysql_fetch_assoc($res)) {
    if ($row['seatNr']&1) $nr[$row['rowNr']]['ulige'][] = $row['seatNr'];
    else $nr[$row['rowNr']]['lige'][] = $row['seatNr'];
}
mysql_free_result($res);
for ($i=count($nr);$i>0;$i--) {
    $ulige = array_reverse($nr[$i]['ulige']);
    $alle = array_merge($ulige, $nr[$i]['lige']);
    echo "<table><tr>\n<td class='row'>R&aelig;kke: ".$i."</td>\n";
    foreach ($alle as $en){
        echo "<td class='seat'><a href='ny.php?row=".$i."&seat=".$en."'>".$en."</a></td>\n";
    }
    echo "</tr></table>\n";
}
?>
</td></tr></table>
</body>
</html>
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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