Gegevens netjes in een tabel

  • Onderwerp starter Onderwerp starter rob59
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

rob59

Gebruiker
Lid geworden
1 okt 2007
Berichten
39
Hallo,

Ik heb een zoekquery gemaakt om vanuit een invulformulier op onze clubsite gegevens uit een uitslagendatabase te halen. Deze werkt, maar de presentatie op het scherm van de gegevens wil ik verbeteren. Ik gebruik nu enkel het echo functie.

De volgende verbeteringen zoek ik:
1. alles overzichtelijk uitgelijnd in een tabel.
2. resultaten in hetzelfde scherm.
3. de datum in ons europees format tonen.

Wie kan mij helpen om dit script te verbeteren?

PHP:
<html>
<head>
<title>Uitslagenlijst</title>
</head>
<body>

Hallo <?php echo htmlspecialchars($_GET['lidnaam']); ?>, dit zijn de uitslagen.

<h2><font size="4" face="Verdana" color="#0000FF">Uitslagenoverzicht  AV de Liemers te Zevenaar</h2><font size="3" face="Verdana" color="#000000">

<?php

  setlocale (LC_ALL, 'nl_NL');
    include( 'connect_db_strato_avl.php' );
  
$lidnaam = $_GET['lidnaam'];
$wedstrijddatum = $_GET['wedstrijddatum'];
//$wedstrijdjaar = $_GET['wedstrijdjaar'];

$query = "SELECT tblid.lidnaam, tblid.lidgeslacht, tbwedstrijd.wedstrijddatum ,tbwedstrijd.wedstrijdnaam, tbonderdeel.onderdeelnaam, tbresultaat.resultaat FROM tbwedstrijd INNER JOIN (tbonderdeel INNER JOIN (tblid INNER JOIN tbresultaat ON tblid.lidcode = tbresultaat.lidcode) ON tbonderdeel.onderdeelcode = tbresultaat.onderdeelcode) ON tbwedstrijd.wedstrijdcode = tbresultaat.wedstrijdcode WHERE tblid.lidnaam LIKE \"$lidnaam\" OR tbwedstrijd.wedstrijddatum = \"$wedstrijddatum\" ORDER BY tbwedstrijd.wedstrijddatum ASC " ;

if( strpos( $query, ";" ) == TRUE )
  print_error_and_exit( "Ongeldige query!!" );

$result = mysql_query($query) or die("Query failed : " . mysql_error());
		 
        $result = mysql_query( $query );

while ($row = mysql_fetch_array($result, MYSQL_ASSOC))

{
print "<table class=\"Resultaat\">\n
<tr align=center><th></th></tr>";
echo $row['lidnaam']. " - ". $row['wedstrijddatum']. " - " . $row['wedstrijdnaam']. " - ". $row['onderdeelnaam']. " - ". $row['resultaat']. "<br />";
} 
?> 

</body>
</html>

Deze regel zit er in om een lege regel tussen de resultaten te krijgen. Is niet alles, maar werkt ook. Nog een tip?
print "<table class=\"Resultaat\">\n
<tr align=center><th></th></tr>";
 
Laatst bewerkt:
Erg gecharmeerd van die tabel ben ik niet.

- Je maakt voor elke entry een nieuwe tabel aan, dat is aardig onnodig.
- Ook sluit je het niet netjes af, er is nergens een </table>, gevolg daarvan is dat je alleen maar <table>'s krijgt en die niet worden afgesloten. Nu zal een browser het wel goed interpreteren maar erg handig is het niet. Het kan een aardige vertraging in de pagina opleveren.
- Daarnaast heb je 2x $result, terwijl het 2x hetzelfde is alleen heeft de ene een error-handeling

Dit is aardig wat netter:
PHP:
<html>
<head>
<title>Uitslagenlijst</title>
</head>
<body>

Hallo <?= htmlspecialchars($_GET['lidnaam']) ?>, dit zijn de uitslagen.

<h2><font size="4" face="Verdana" color="#0000FF">Uitslagenoverzicht  AV de Liemers te Zevenaar</h2><font size="3" face="Verdana" color="#000000">

<?php

  setlocale (LC_ALL, 'nl_NL');
    include( 'connect_db_strato_avl.php' );
  
$lidnaam = $_GET['lidnaam'];
$wedstrijddatum = $_GET['wedstrijddatum'];
//$wedstrijdjaar = $_GET['wedstrijdjaar'];

$query = "SELECT tblid.lidnaam, tblid.lidgeslacht, tbwedstrijd.wedstrijddatum ,tbwedstrijd.wedstrijdnaam, tbonderdeel.onderdeelnaam, tbresultaat.resultaat FROM tbwedstrijd INNER JOIN (tbonderdeel INNER JOIN (tblid INNER JOIN tbresultaat ON tblid.lidcode = tbresultaat.lidcode) ON tbonderdeel.onderdeelcode = tbresultaat.onderdeelcode) ON tbwedstrijd.wedstrijdcode = tbresultaat.wedstrijdcode WHERE tblid.lidnaam LIKE \"$lidnaam\" OR tbwedstrijd.wedstrijddatum = \"$wedstrijddatum\" ORDER BY tbwedstrijd.wedstrijddatum ASC " ;

if( strpos( $query, ";" ) == TRUE )
  print_error_and_exit( "Ongeldige query!!" );

$result = mysql_query($query) or die("Query failed : " . mysql_error());
echo '<table class="Resultaat">\\n
<tr align="center"><th>&nbsp;</th></tr>';
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  echo '<tr><td>'. $row['lidnaam']. ' - '. $row['wedstrijddatum']. ' - ' . $row['wedstrijdnaam'] .'  - '. $row['onderdeelnaam'] .' - '. $row['resultaat']. '</td></tr>\\n';
}
echo '</table>';
?>

</body>
</html>
Volgens mij is punt 1 nu aardig opgelost (Het kan zijn dat je steeds \\n ziet staan, meldt dat even dan kijk ik voor een oplossing)

Punt 2 is een beetje cryptisch: welke resultaten bedoel je? Wijken die af van de resultaten uit punt 1?

Punt 3 valt alleen te wijzigen wanneer wij weten hoe je de wedstrijddatum opslaat in de tabel. Dus wat het resultaat nu is en hoe je het het liefste ziet.
 
\\n

Hallo,

1. Er staat inderdaad repeterend \n

2. Het zoeken gaat vanuit een pagina op onze website.
Het resultaat verschijnt echter in heel nieuw scherm, terwijl ik de rest van de
website ook in beeld wil houden.
Kijk maar een even hier (linkermenu onder wedstrijden - uitslagen) en type mijn naam Rob Roelofsen maar eens in. http://nieuw.avdeliemers.nl

3. In de SQL database staat in de tabel tbwedstrijd het format van veld het wedstrijddatum op Date.
Ik kan daar nergens een format wijzigen.
Alle datumgegevens in de tabel staan als jjjj-mm-dd weergegeven.
Het zou netter zijn als dat dd-mm-jjjj is.

Rob
 
Laatst bewerkt:
PHP:
<html>
<head>
<title>Uitslagenlijst</title>
</head>
<body>

Hallo <?= htmlspecialchars($_GET['lidnaam']) ?>, dit zijn de uitslagen.

<h2><font size="4" face="Verdana" color="#0000FF">Uitslagenoverzicht  AV de Liemers te Zevenaar</h2><font size="3" face="Verdana" color="#000000">

<?php
//Voor nette weergave in bron
$nl = "\n";
//end
  setlocale (LC_ALL, 'nl_NL');
    include( 'connect_db_strato_avl.php' );
  
$lidnaam = $_GET['lidnaam'];
$wedstrijddatum = $_GET['wedstrijddatum'];
//$wedstrijdjaar = $_GET['wedstrijdjaar'];

$query = "SELECT tblid.lidnaam, tblid.lidgeslacht, tbwedstrijd.wedstrijddatum ,tbwedstrijd.wedstrijdnaam, tbonderdeel.onderdeelnaam, tbresultaat.resultaat FROM tbwedstrijd INNER JOIN (tbonderdeel INNER JOIN (tblid INNER JOIN tbresultaat ON tblid.lidcode = tbresultaat.lidcode) ON tbonderdeel.onderdeelcode = tbresultaat.onderdeelcode) ON tbwedstrijd.wedstrijdcode = tbresultaat.wedstrijdcode WHERE tblid.lidnaam LIKE \"$lidnaam\" OR tbwedstrijd.wedstrijddatum = \"$wedstrijddatum\" ORDER BY tbwedstrijd.wedstrijddatum ASC " ;

if( strpos( $query, ";" ) == TRUE )
  print_error_and_exit( "Ongeldige query!!" );

$result = mysql_query($query) or die("Query failed : " . mysql_error());
echo '<table class="Resultaat">'. $nl .'
<tr align="center">'. $nl .'
  <th>Naam</th>'. $nl .'
  <th>Datum</th>'. $nl .'
  <th>Wedstrijd</th>'. $nl .'
  <th>Afstand</th>'. $nl .'
  <th>Eindtijd</th>'. $nl .'
</tr>'. $nl;
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  $datum = explode("-", $row['wedstrijddatum']);
  $datum = $datum[2] .'-'. $datum[1] .'-'. $datum[0];
  echo '
  <tr>'. $nl .'
    <td>'. $row['lidnaam'] .'</td>'. $nl .'
    <td>'. $datum .'</td>'. $nl .'
    <td>'. $row['wedstrijdnaam'] .'</td>'. $nl .'
    <td>'. $row['onderdeelnaam'] .'</td>'. $nl .'
    <td>'. $row['resultaat'] .'</td>'. $nl .'
  </tr>'. $nl;
}
?>
</table>
</body>
</html>

Probeer die eens.

Ik zie trouwens dat je je pagina weer terug hebt gezet naar het oude... Wat is daarvan de reden?

Over punt 2: Je zult dat deze pagina moeten includen. Ik zie dat je gebruik maakt van een soort CMS, wellicht dat je daarbij een verwijzing kunt maken...

Edit: Het lijkt mij netter om gewoon de gegevens in tabelcellen weer te geven in plaats van maar 1 cel heb ik nu voor elke variabele een cel.
 
Laatst bewerkt:
@ Tha Devil

Hallo,

Ik heb ontdekt dat er een verschil zit of je de Internet Explorer of Firefox gebruikt.
Bij Firefox laat hij bij mijn oude script wel alle data regel voor regel zien en in de explorer
kapt hij de gegevens af en krijg ik een heel onoverzichtelijk geheel.
Daarom eerst als test maar eens mijn "oude script" terugezet.
Ik ga nu je laatste verbeteringen uitproberen.
Het het includen zal ik als laatste testen, eerst maar eens kijken of het zo voor elkaar komt.
Alvast bedankt voor het meedenken.:thumb:

Rob
 
Je moet wel even de code die er nu staat gebruiken, ik heb hem om 00:18 nog gewijzigd.

Als het goed is geeft hij dan ook geen parse error.
 
@ Tha Devil

Klasse!! Het werkt en alles netjes in mooie kolommen, de datum in het juiste format.
Ook even op de andere pc met de explorer getest en daar komt ook alles netjes in beeld.
Kijk zelf maar even......
Mijn dank is groot, ook namens de vereniging...:thumb::thumb:
Morgen zal ik het includen gaan uitproberen.

Rob
 
Ik vind het alleen raar dat in de bron steeds en extra enter is. Zou je daarom onderstaande even willen proberen?

Daarnaast zal ik even wat ruimere tabel maken. Ik zet in bij de <TH>'s een breedte (width=), deze kun je zelf aanpassen wanneer het je niet bevalt. Ze zijn nu in percentages, maar eigenlijk had ik liever een vaste waarde er in gezet maar dat doe ik nu niet omdat ik niet weet hoe groot het moet zijn... Mocht je het zelf willen testen dan zul je het percentage teken weg moeten halen en dan met de waardes moeten experimenteren.

PHP:
<html>
<head>
<title>Uitslagenlijst</title>
</head>
<body>

Hallo <?= htmlspecialchars($_GET['lidnaam']) ?>, dit zijn de uitslagen.

<h2><font size="4" face="Verdana" color="#0000FF">Uitslagenoverzicht  AV de Liemers te Zevenaar</h2><font size="3" face="Verdana" color="#000000">

<?php
//Voor nette weergave in bron
$nl = "\n";
//end
  setlocale (LC_ALL, 'nl_NL');
    include( 'connect_db_strato_avl.php' );
  
$lidnaam = $_GET['lidnaam'];
$wedstrijddatum = $_GET['wedstrijddatum'];
//$wedstrijdjaar = $_GET['wedstrijdjaar'];

$query = "SELECT tblid.lidnaam, tblid.lidgeslacht, tbwedstrijd.wedstrijddatum ,tbwedstrijd.wedstrijdnaam, tbonderdeel.onderdeelnaam, tbresultaat.resultaat FROM tbwedstrijd INNER JOIN (tbonderdeel INNER JOIN (tblid INNER JOIN tbresultaat ON tblid.lidcode = tbresultaat.lidcode) ON tbonderdeel.onderdeelcode = tbresultaat.onderdeelcode) ON tbwedstrijd.wedstrijdcode = tbresultaat.wedstrijdcode WHERE tblid.lidnaam LIKE \"$lidnaam\" OR tbwedstrijd.wedstrijddatum = \"$wedstrijddatum\" ORDER BY tbwedstrijd.wedstrijddatum ASC " ;

if( strpos( $query, ";" ) == TRUE )
  print_error_and_exit( "Ongeldige query!!" );

$result = mysql_query($query) or die("Query failed : " . mysql_error());
echo '<table class="Resultaat">
<tr align="center">
  <th width="20%">Naam</th>
  <th width="10%">Datum</th>
  <th width="50%">Wedstrijd</th>
  <th width="10%">Afstand</th>
  <th width="10%" >Eindtijd</th>
</tr>';
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  $datum = explode("-", $row['wedstrijddatum']);
  $datum = $datum[2] .'-'. $datum[1] .'-'. $datum[0];
  echo '
  <tr>'. $nl .'
    <td>'. $row['lidnaam'] .'</td>'. $nl .'
    <td>'. $datum .'</td>'. $nl .'
    <td>'. $row['wedstrijdnaam'] .'</td>'. $nl .'
    <td>'. $row['onderdeelnaam'] .'</td>'. $nl .'
    <td>'. $row['resultaat'] .'</td>'. $nl .'
  </tr>'. $nl;
}
?>
</table>
</body>
</html>
 
@ Tha Devil

Ik probeer wel even wat uit.
Ik heb overigens de veldnamen even links uitgelijnd met align="left" bij de td regels.
Met de % krijg je niet zo'n mooie verdeling en ik zal het getalsmatig met trial en error
proberen totdat het mooi oogt. Moet de som samen 100% zijn bij de % verdeling?

PHP:
<th width="10%" align="left">Naam</th>
  <th width="10%" align="left">Datum</th>
  <th width="20%" align="left">Wedstrijd</th>
  <th width="10%" align="left">Afstand</th>
  <th width="10%" align="left">Eindtijd</th>
 
Nee 100% is niet verplicht, lager kan ook. Groter wil vanzelfsprekend niet :)

Heb je trouwens nu de laatste code gebruikt die ik je gaf? Aangezien ik die extra enters in de bron nogal vreemd vind had ik daarom wat $nl's weggelaten.
 
@ Tha Devil

Ik heb het laatste script gebruikt.
Verder heb ik de lay-out aangepast aan de clubkleuren met kop en voet incl logo.
Men is hier zeer over te spreken.
Kun je mee eens laten zien hoe ik het include moet uitvoeren zodat de resultaten
in hetzelfde frame worden getoond.
Als bijlage het door mij in clubkleuren aangpaste script. Kijk maar eens op de clubsite voor het resultaat. :thumb:
PHP:
<html>
<head>
<title>Uitslagenlijst</title>
</head>
<body background="../images/achtergrond_avl.gif">

<table border="6" width="100%" bgcolor="#FF0000" style="border-collapse: collapse" bordercolor="#000080">
	<tr>
		<td bordercolor="#000080" bgcolor="#CC0000">

<h2><font face="Verdana" color="#0000FF">&nbsp;</font><font face="Verdana" color="#FFFFFF">Uitslagenoverzicht AV de Liemers 
te Zevenaar</font><font face="Verdana" color="#0000FF"> </h2></font>
		<p><font size="4">&nbsp;<font color="#FFFFFF"> Hallo <?= htmlspecialchars($_GET['lidnaam']) ?>, dit zijn de uitslagen die bij <a href="mailto:uitslagen@avdeliemers.nl">
		<font color="#FFFFFF">uitslagen@avdeliemers</font></a> bekend zijn.</font></font></td>
		<td bgcolor="#FFFFFF">
		<p align="center"><font size="4" face="Verdana" color="#0000FF">
		<img border="0" src="/images/Logo_AVL_kleur_kl.jpg" width="69" height="83"></td>
	</tr>
</table>
<font size="3" face="Verdana" color="#000000">

<?php
//Voor nette weergave in bron
$nl = "\n";
//end
  setlocale (LC_ALL, 'nl_NL');
    include( 'connect_db_strato_avl.php' );
  
$lidnaam = $_GET['lidnaam'];
$wedstrijddatum = $_GET['wedstrijddatum'];
//$wedstrijdjaar = $_GET['wedstrijdjaar'];

$query = "SELECT tblid.lidnaam, tblid.lidgeslacht, tbwedstrijd.wedstrijddatum ,tbwedstrijd.wedstrijdnaam, tbonderdeel.onderdeelnaam, tbresultaat.resultaat FROM tbwedstrijd INNER JOIN (tbonderdeel INNER JOIN (tblid INNER JOIN tbresultaat ON tblid.lidcode = tbresultaat.lidcode) ON tbonderdeel.onderdeelcode = tbresultaat.onderdeelcode) ON tbwedstrijd.wedstrijdcode = tbresultaat.wedstrijdcode WHERE tblid.lidnaam LIKE \"$lidnaam\" OR tbwedstrijd.wedstrijddatum = \"$wedstrijddatum\" ORDER BY tbwedstrijd.wedstrijddatum ASC " ;

if( strpos( $query, ";" ) == TRUE )
  print_error_and_exit( "Ongeldige query!!" );

$result = mysql_query($query) or die("Query failed : " . mysql_error());
echo '<table class="Resultaat">
<tr align="left">
  <th fontcolor="#FFFFCC" width="10%" >Naam</th>
  <th width="10%" >Datum</th>
  <th width="20%" >Wedstrijd</th>
  <th width="10%" >Afstand</th>
  <th width="10%" >Eindtijd</th>
</tr>';
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  $datum = explode("-", $row['wedstrijddatum']);
  $datum = $datum[2] .'-'. $datum[1] .'-'. $datum[0];
  echo '
  <tr>'. $nl .'
    <td>'. $row['lidnaam'] .'</td>'. $nl .'
    <td>'. $datum .'</td>'. $nl .'
    <td>'. $row['wedstrijdnaam'] .'</td>'. $nl .'
    <td>'. $row['onderdeelnaam'] .'</td>'. $nl .'
    <td>'. $row['resultaat'] .'</td>'. $nl .'
  </tr>'. $nl;
}
?>
</table>

	<p>&nbsp;</p>

<table border="6" width="100%" bgcolor="#FF0000" style="border-collapse: collapse" bordercolor="#000080">
	<tr>
		<td bordercolor="#000080" bgcolor="#CC0000">

<h2><font face="Verdana" color="#0000FF">&nbsp;</font><font face="Verdana" color="#FFFFFF" size="3">©</font><font size="4" face="Verdana" color="#0000FF">
</font><font size="4" face="Verdana" color="#FFFFFF">2007 AV de Liemers </font> </h2></td>
	</tr>
</table>

</body>
</html>
 
Ik heb even op de site van PHP fusion rondgekeken en het blijkt dat je zelf ook PHP in eigen pagina's kunt doen.

Dus je zult een "custom" pagina aan moeten maken, zet daar dezelfde inhoud in als die van uitslagen.php.

Je zult dan wel het formulier aan moeten passen zodat hij naar de juiste pagina gaat. (Dit formulier bedoel ik)

Ik denk echter dat het niet meteen goed zal komen, omdat je met het formulier gebruik maakt van action="get", hierdoor kan het zijn dat hij de juiste pagina niet meer weergeeft.

Mijn persoonlijke voorkeur is dat je een lijst met alle mensen hebt en dat men dan op die naam klikt en al zijn tijden ziet.

Die lijst kun je makkelijk genereren door elke unieke lidnaam uit de database te trekken.

De lijst laten zien:
PHP:
$query = "SELECT DESTINCT tblid.lidnaam FROM tbwedstrijd"; 
//Hopelijk is dit de juiste query
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)) {
  echo $row['lidnaam'] .'<br />';
}
Dit is echter een simpel, tekstueel lijstje. Wanneer je dat handiger lijkt dan zul je het bestaande script moeten uitbreiden. Dan kun je lijst en resultaat in 1 pagina krijgen en in 1 script.
 
Uitslagen

Hoi Rob59,

Dit is precies wat ik nodig heb.
Wil jij mij de structuur van de database sturen?

Alvast bedankt.

Loek.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan