Gå til innhold

Hjelp til å skrive ut noe fra database


Anbefalte innlegg

Heia!

 

Driver som sagt og mekker et seatmap system, og trenger hjelp til en ting som jeg ikke får til.

 

Jeg har ett script som vha. 2 for løkker skriver ut en tom tabell.

 

Funksjonen ser slik ut:

$template = '';
$cell = '<td class="%s">%s</td>';

function createSeatmap($x = 10, $y = 10) {
	global $template, $cell;
	$x = $x+1;
	$y = $y+1;
   $output = "<table id='create_seatmap'>";

   for($i = 0; $i < $y; ++$i) {
	  $output .= "<tr>";

	  for($j = 0; $j < $x; ++$j) {



		 $output .= sprintf ($cell, $class, sprintf ($template, $i, $j));
	  }

	  $output .= "</tr>";
   }

   $output .= "</table>";

   return $output;
}  

echo createSeatmap(31, 10);

?>

 

I den tabellen som blir printet her, skal det være mulig for bruker å tegne hvordan sete plassene skal se ut.

Har ikke laget den tegne funksjonen enda, men kommer tilbake til den.

 

I hvertfall, det jeg ønsker og trenger hjelp til å implementere i denne koden er følgende :

 

Det skal hentes id-felt,ett status-felt,x og y felt fra tabellen 'seatmap'.

Stauts feltet inneholder 0,1 eller 2.

0 står for vanlig hvite tabell ruter, 1 står for grønne ruter, og 2 står for blå ruter.

x og y er koordinater for hvilken plass i tabellen som er registrert med hvilken status og id.

 

Og det som skal skje når dette scriptet over printer ut en tabell, er at jeg ønsker ett script som sjekker om hver x og y verdi som blir generert av koden ovenfor, er registrert i databasen og under hvilken status.

Slik at om det ikke er registrert noen x og y verdier, blir tabellen helt vanlig og hvit. Men om f.eks en rute (x=3 y=4) er registrert i databasen med status 1, skal det printes ut som en grønn rute i tabellen som blir generert, på akkurat den plassen som den er registrert på i databasen.

 

Skjønner ?

 

Jeg skjønner ikke hvorfor jeg ikke får det til, men jeg har prøvd alt jeg kan komme på, men får ikke til noe som skaper resultat

 

Om du ser på scriptet over, ser du en variabel $class i sprintf funksjonen. Denne indikerer hvilken class navn som skal stå i <td class ="" >.

 

 

TAKKTAKK! :)

Endret av zaxz
Lenke til kommentar
Videoannonse
Annonse
Og det som skal skje når dette scriptet over printer ut en tabell, er at jeg ønsker ett script som sjekker om hver x og y verdi som blir generert av koden ovenfor, er registrert i databasen og under hvilken status.

Slik at om det ikke er registrert noen x og y verdier, blir tabellen helt vanlig og hvit. Men om f.eks en rute (x=3 y=4) er registrert i databasen med status 1, skal det printes ut som en grønn rute i tabellen som blir generert, på akkurat den plassen som den er registrert på i databasen.

 

Skjønner ?

 

Jeg skjønner ikke hvorfor jeg ikke får det til, men jeg har prøvd alt jeg kan komme på, men får ikke til noe som skaper resultat

 

Om du ser på scriptet over, ser du en variabel $class i sprintf funksjonen. Denne indikerer hvilken class navn som skal stå i <td class ="" >.

$class er ikke satt til noen verdi og du skriver ikke kordan du henter data fra seatmap.

Dessuten ser eg ingen grunn til at de 2 første variablene skal være globale. Og $template med '' gjør ikke så mye nytte.

 

Du kan fjerne $x = $x+1; og istedenfor bruke $j <= $x;

 

$classes = array(0 => 'free', 1 => 'reserved', 2 => 'other');

$class = $classes[$seatmapRow['status']];

Bruk CSS for å fargelegge.

 

Du kan også lage en tabell seatmap_status og legge inn verdiene over og joine med spørringen din via noe likt SELECT sm.*, ss.seatmap_status_name from seatmap as sm left join seatmap_status as ss on sm.status_id = ss.seatmap_status_id. Da får du ut $class = $seatmapRow['seatmap_status_name'];

Lenke til kommentar

$class variabelen er meningen skal innholde de ulike typene av celler(seter) som skal printes ut, slik du som gav eksempel på i koden du postet.

 

Vel dette scriptet her skal brukes til å tegne seatmapet. Det blir da lagret data til en tabell.

id|x|y|status

 

Dette scriptet genererer bare den tomme hvite tabellen, men om tabellen er allerede ferdig tegnet og lagret i databasen, skal ikke scriptet printe ut tomme hvite celler, men celler med forskjellige fargen(Dvs at $class variabelen blir satt til en spesifikk klasse om det aktuelle setet(x,y koordinater) har en annen status enn 0 i mysql tabellen.

 

Det jeg sliter med er å integrere en lignende funksjon slik som den den du postet ovenfor, i den koden jeg allerede har.

 

TAKKTAKK!:)

Lenke til kommentar

Hvis du lager en tabell til for navnet på statusen så er det enkelt...

<?php
$sql = "SELECT sm.x, ss.status_name FROM seatmap as sm left join seatstatus as ss on sm.status_id = ss.status_id ORDER BY sm.x, sm.y";
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {
$data[$row['x']] .= '<td class="' . $row['status_name'] . '"> </td>';
}
echo '<table><tr>' . implode('</tr><tr>', $data) . '</tr></table>';

 

Edit: Alle radene må allerede være i tabellen.

Endret av OIS
Lenke til kommentar

Takk for svar!

 

Men hele poenget er at rekkene ikke skal ligge i tabellen fra før.

De skal bli genererte automatisk, og administrator skal kunne tegne inn seatmapet i tabellen.(Når administrator tegner en grønn rute får den status =1, når administrator tegner en svart rute får den status = 2. Ellers er status på de tomme rutene = 0)

Deretter skal dette kunne lagres. Alle rutene i tabellen blir lagret i tabellen. De rutene som også er hvite.

Jeg ønsker derfor en kode som jeg kan sette inn i min allerede eksisterende, som gjør slik at når scriptet mitt genererer en tabell(seatmap), sjekkes det opp mot databasetabellen min om noen av de rutene som blir generert har status 1 eller 2. Om dette er tilfelle får disse rutene en annen class enn de ordinære hvite tomme rutene.

 

Skjønner du problemstillingen min ?:)

 

Takk for hjelpen forresten:)

Meget takknemlig

Lenke til kommentar

<?php

echo <<<EOF
<style type='text/css'>
#create_seatmap td
{
width: 10px;
height: 10px;
border: 1px solid #000;
}
.free
{
background-color: #FFF;

}
.reserved
{
background-color: red;
}
.other
{
background-color: cyan;
}
.rows
{
text-align: center;
}
th
{
border-bottom: 1px dotted #000;
}
</style>
EOF;

function createSeatmap($x = 10, $y = 10, $seats=array() ) 
{
$cell = '<td class="%s">%s</td>';
$classes = array( 0 => 'free', 1 => 'reserved', 2 => 'other' );

$output = "<table id='create_seatmap' cellspacing='5'>
			<th>Rows</th>
			<th colspan='{$x}'>Seats</th>";

for($i = 1; $i <= $y; ++$i) 
{
	$output .= "<tr><td class='rows'>{$i}</td>";

	for( $j = 1; $j <= $x; ++$j ) 
	{
		$class = ( $seats[ $i ][ $j ] AND $classes[ $seats[ $i ][ $j ] ] ) 	? $classes[ $seats[ $i ][ $j ] ] 
																			: $classes[0];

		$output .= sprintf ( $cell, $class, $j );
	}

	$output .= "</tr>";
}

$output .= "</table>";

return $output;
}

$seats = array();

/*$sql = "SELECT row, seat, status FROM seats";
$res = mysql_query( $sql );

if( mysql_num_rows( $res ) > 0 )
{
while( $row = mysql_fetch_assoc( $res ) )
{
	if( $row['row'] AND $row['seat'] AND $row['status'] )
	{
		$seats[ $row['row'] ][ $row['seat'] ] = $row['status'];
	}
}
}*/

// Disse er bare for å teste at det faktisk fungerer.
$seats[1][2] = 1;
$seats[1][5] = 2;
$seats[5][17] = 2;
$seats[8][5] = 1;
$seats[4][28] = 2;

echo createSeatmap(30, 10, $seats );

?>

 

Noe slikt kanskje?

Lenke til kommentar

Da oppdaget jeg noe som ikke helt fungerte slik som det skulle.

 

Jeg byttet om på variabelen

 

$seats[ $row['row'] ][ $row['seat'] ] = $row['status'];

 

slik at den ble sånn:

 

$seats[ $row['seat'] ][ $row['row'] ] = $row['status'];

 

Da skriver den tabellen ut slik som den skal.

 

Men det som skjer når den skriver ut tabellen er at hele tabellen flytter seg en rute til høyre, og det blir kuttet en rute under tabellen.

 

La meg demonstrere :

 

Tabellen blir lagret slik :

 

xxxx

xxxx

xxxx

xxxx

 

Men den blir seende slik ut :

 

xxxx

xxxx

xxxx

 

 

Som du kan se blir det tatt bort en rekke nederst i tabellen, og hele tabellen blir forskjøvet mot høyre.

 

Her er koden. Har modifisert den litt.

 

</script>
<style type='text/css'>
#create_seatmap 
{
width: auto;
border: 1px solid;
}
#create_seatmap td {
	padding: 8px;
}
.white
{
background-color: #FFF;

}
.green
{
background-color: green;
}
.black
{
background-color: black;
}

</style>
<?

$dbh = mysql_connect('localhost','')
 or die ("Unaable to connnect to MySQL");

$selected = mysql_select_db("",$dbh)
 or die("Could not select sort_test");

function createSeatmap($x = 10, $y = 10, $seats=array() )
{
$cell = '<td class="%s"></td>';
$classes = array( 0 => 'white', 1 => 'green', 2 => 'black' );

$output = "<table id='create_seatmap'>
";

for($i = 1; $i <= $y; ++$i)
{
$output .= "<tr>";

for( $j = 1; $j <= $x; ++$j )
{
$class = ( $seats[ $i ][ $j ] AND $classes[ $seats[ $i ][ $j ] ] ) ? $classes[ $seats[ $i ][ $j ] ]
: $classes[0];

$output .= sprintf ( $cell, $class );
}

$output .= "</tr>";
}

$output .= "</table>";

return $output;
}

$seats = array();

$sql = "SELECT x, y, type FROM seatmap ORDER BY id ASC";
$res = mysql_query( $sql );

if( mysql_num_rows( $res ) > 0 )
{
while( $row = mysql_fetch_assoc( $res ) )
{
if( $row['y'] AND $row['x'] AND $row['type'] )
{
$seats[ $row['y'] ][ $row['x'] ] = $row['type'];
}
}
}

// Disse er bare for å teste at det faktisk fungerer.


echo createSeatmap(30, 10, $seats );

?>

<form class="submit_field" action="print.php" method="post" onsubmit="java script: saveSeatmap();">
		<p>

			<a class="right" href="java script: emptyAll();">Tøm alle</a>
			<input type="submit" name="submit" value="Lagre" class="submit" />
			<input type="submit" name="cancel" value="Avbryt" class="cancel" />
		</p>
		<input type="hidden" name="seatmap" id="seatmap_input" />
	</form>

 

Jeg tviler igrunn på at det har noe med måten jeg skriver til databasen på , fordi at jeg har også ett annet script som printer ut seatmapet, men i en annen sammenheng, og den skriver det riktig ut.

 

Takk for hjelpen !! :)

Endret av zaxz
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...