[PHP] Aanwezigheid

Status
Niet open voor verdere reacties.

Razing

Gebruiker
Lid geworden
13 okt 2008
Berichten
167
Hallo, ik ben momentele bezig met een script/systeem wat nu alles werkt. Alleen nu nog het laten zien.

Dit is mijn script:

PHP:
<?php
// Include bestand ophalen
include ('training/training_config.php');
// De datum post ophalen
$jaar = $_POST['jaar'];
$maand = $_POST['maand'];
$dag = $_POST['dag'];
$datum = $jaar."-".$maand."-".$dag;
// Speler toevoegen opslaan
if ($_POST['toevoegen']) {
if ($_POST['naam']!="") {
$insert = "INSERT INTO spelers (spelerid,spelernaam) VALUES ('','".$_POST[naam]."')"; 
mysql_query($insert) or die(mysql_error());
echo ""; } 
else { echo"<strong>Je hebt niet alle velden ingevuld!</strong><br /><br />";}}
// Training opslaan
if ($_POST['opslaan']) {
if ($_POST['opslaan']!="") {
$insert = "INSERT INTO trainingen (training_id,datum) VALUES ('','".$datum."')"; 
mysql_query($insert) or die(mysql_error());
echo ""; } 
else { echo"<strong>Je hebt niet alle velden ingevuld!</strong><br /><br />";}}
// De checkbox opslaan
$training_id = mysql_insert_id();

foreach ( $_POST[ 'speler' ] as $spelerid => $val ) {
  if ( mysql_query ( "INSERT INTO trainingen_spelers (id,spelerid,training_id) VALUES ('','".$spelerid."','" . $training_id . "')" ) ) {
    echo '<strong>Succesvol opgeslagen!</strong><br /><br />';
  } else {
    echo 'Query kan niet worden uitgevoerd.';
  }
}
?>
<FORM METHOD="post" ACTION="?id=training&ga=trainingsopkomst">
		<select name="dag">
		<?php
		for($i = 1 ; $i < 32 ; $i++)
		{
			if($i<10)
			{
				$i = "0".$i;
			}
			if($i == "01")
				echo "<option value=\"$i\" SELECTED>$i</option>\n";
			else
				echo "<option value=\"$i\">$i</option>\n";
		}
		?>
		</select>&nbsp;/&nbsp;

		<select name="maand">
		<?php
		for($i = 1 ; $i < 13 ; $i++)
		{
			if($i<10)
			{
				$i = "0".$i;
			}
			if($i == "01")
				echo "<option value=\"$i\" SELECTED>$i</option>\n";
			else
				echo "<option value=\"$i\">$i</option>\n";
		}
		?>
		</select>&nbsp;/&nbsp;

		<select name="jaar">
		<?php
		for($i = 2009 ; $i < 2099 ; $i++)
		{
			if($i<10)
			{
				$i = "0".$i;
			}
			if($i == "2003")
				echo "<option value=\"$i\" SELECTED>$i</option>\n";
			else
				echo "<option value=\"$i\">$i</option>\n";
		}
		?>
        </select><br><br>

<TABLE width="380" BORDER="0" CELLPADDING="2" CELLSPACING="2">
<TR>
<TD width="200" align="left"><strong>Spelers ID</strong></TD>
<TD width="71"><strong>Aanwezig</strong></TD>
</TR>
<?php
// Spelers + aanwezigheid uit de database halen
$query_2 = "SELECT * FROM `spelers`";
$sql_2 = mysql_query($query_2) or die ( mysql_error( ) );
while($rij_2 = mysql_fetch_object($sql_2)){
$spelernaam = $rij_2->spelernaam;
$spelerid = $rij_2->spelerid;
?>
<TR>
<TD width="200" align="left">
<?php echo $spelerid ?>. <?php echo $spelernaam ?></TD>
<TD width="71"><input type="checkbox" name="speler[<?php echo $spelerid; ?>]" />&nbsp;<font color="green">(<?php echo $aanwezig ?>)</font>&nbsp;<font color="red">(<?php echo $afwezig ?>)</font></TD></TR>
<?php
}
?>
</TABLE><br />
<input type="submit" value="Opslaan" name="opslaan">
</FORM><br /><br />
<?php

if(isset($_GET['actie'])) {
	
switch($_GET['actie']) {
		    case 'toevoegen':
			echo "Klik <a href=\"?id=training&ga=trainingsopkomst\">hier</a> om het weer in te klappen.
			      <table> 
                  <form method=\"post\" action=\"?id=training&ga=trainingsopkomst\" name=\"gastenboek\"> 
                  <tr>
                  </tr> 
                  <tr><td width=\"10\">Naam:</td><td width=\"35\"><input type=\"text\" name=\"naam\" size=\"35\"></td></tr> 
				  </textarea><br></td></tr> 
                  <tr><td></td><td><input type=\"submit\" name=\"toevoegen\" value=\"Speler toevoegen\"></td></tr> 
				  </form> 
				  </table>";
			break;	

								default:
                                 echo "Deze actie bestaat helemaal niet!";
                                break;
                                }
}else{
	echo "Klik <a href=\"?id=training&ga=trainingsopkomst&actie=toevoegen\">hier</a> om een speler toe te voegen.";
}
?>

Mijn database ziet er zo uit:

spelers:
- spelerid
- spelernaam

trainingen
- training_id
- datum

trainingen_spelers
- id
- spelerid
- training_id

Wat ik wil laten zien is wanneer welke speler is geweest en hoevaak en hoevaak afwezig, heb van alles al zelfgeprobeerd maar kwam er niet uit.
 
Laatst bewerkt:
Wellicht kun je deze vraag beter even in het MySQL-forum stellen, aangezien het grootste probleem hier het samenstellen van de query is. Ik kom er in ieder geval niet helemaal uit.
 
Je zou het inderdaad met allemaal losse queries kunnen doen, maar dit is erg inefficient.

Als je ervoor kiest om het zo te doen komt het op het volgende neer:

PHP:
$trainingen = mysql_query ( "SELECT training_id, datum FROM trainingen" );

while ( $aTrainingen = mysql_fetch_assoc ( $trainingen ) ) {

  echo '<br><b>Training #', $aTrainingen[ 'training_id' ], ' - ', $aTrainingen[ 'datum' ], '</b><br>';

  $spelers_aanwezig = mysql_query ( "SELECT spelerid FROM trainingen_spelers WHERE training_id = '" . $aTrainingen[ 'training_id' ] . "'" );

  $aanwezig = array();

  while ( $row = mysql_fetch_assoc ( $spelers_aanwezig ) ) {

    $aanwezig[] = $row[ 'spelerid' ];

  }

  $spelers = mysql_query ( "SELECT spelerid, spelernaam FROM spelers" );

  while ( $speler = mysql_fetch_assoc ( $spelers ) ) {

    if( in_array ( $speler[ 'spelerid' ], $aanwezig ) ){

      echo '<font color="green">', $speler[ 'spelernaam' ], ' was aanwezig</font><br>';

    } else {

      echo '<font color="red">', $speler[ 'spelernaam' ], ' was afwezig</font><br>'; 

    }  

}

Ik denk dat het zo wel ongeveer zal werken, maar nogmaals je voert nu naar mate er meer trainingen bijkomen steeds meer queries uit.


EDIT: oh, zie nu dat het opgelost is ;)
 
Dankje dankje dankje eric!
Dit werkt veel beter, die andere is inmiddels al de deur uit want werkte niet goed.
En allemaal verschillende Query's zoals jij al zij.

Maar zou de while er ook af kunnen en met GET?

Bij die andere ging dat makkelijk maar. get = bekijk dus dat je met bekijk=1 training 1 weergeeft.

Je was alleen een } vergeten ;)
 
Laatst bewerkt:
Oeh mijn fout, ik zal eens even kijken of het met een $_GET wil.

PHP:
$training = mysql_query ( "SELECT datum FROM trainingen WHERE training_id = '" . $_GET[ 'training' ] . "'"); 

$aTraining = mysql_fetch_assoc ( $training );

echo '<br><b>Training #', $_GET[ 'training' ], ' - ', $aTraining[ 'datum' ], '</b><br>';
 
$spelers_aanwezig = mysql_query ( "SELECT spelerid FROM trainingen_spelers WHERE training_id = '" . $_GET[ 'training' ] . "'" );
 
$aanwezig = array();
 
while ( $row = mysql_fetch_assoc ( $spelers_aanwezig ) ) {
 
  $aanwezig[] = $row[ 'spelerid' ];
 
}
 
$spelers = mysql_query ( "SELECT spelerid, spelernaam FROM spelers" );
 
while ( $speler = mysql_fetch_assoc ( $spelers ) ) {
 
  if( in_array ( $speler[ 'spelerid' ], $aanwezig ) ){
 
    echo '<font color="green">', $speler[ 'spelernaam' ], ' was aanwezig</font><br>';
 
  } else {
 
    echo '<font color="red">', $speler[ 'spelernaam' ], ' was afwezig</font><br>'; 
 
  }  

}

Als het goed is werkt ie nu met ?training={#}

{#} = id van de training.

Er kan eventueel nog wel een controle in voor de waarde van $_GET[ 'training' ], maar het gaat hier even om het idee.
 
Laatst bewerkt:
Zo weer heel wat stapjes verder.
Heb nu rugnummer toegevoegd, je kan nu verwijderen.
Wat ik nu nog moet doen is:
Achter elke training dit zetten (Hoeveel aanwezig) (Hoeveel afwezig)
Achter elke speler dit zetten (Hoevaak afwezig) (Hoevaak aanwezig)

Zorgen dat je niet 2 keer dezelfde spelers en training kan opslaan (dus niet kan overschrijven)

Als er geen training is toegevoegd, dat echoën/printen.

Kunnen wijzigen, spelers lijkt me niet zo moeilijk, maar de traingen.

En nog de aanwezigheid gegevens verwijderen bij het deleten van een training of speler.

Heb vandaag ook weer heel wat dingen opgelost en toegevoegd.

Als iemand mij met een van deze dingen kan helpen zou dat mooi zijn.
 
Wat betreft niet twee keer dezelfde training opslaan, je kunt een UNIQUE CONSTRAINT zetten in phpMyAdmin, gewoon alle velden selecteren die er in moeten en dan op het 'U' tekentje klikken.

Dat betekend dat nergens in de tabel die combinatie van velden dezelfde waarde mag bevatten; je krijgt dan een error van mySQL, die je op kunt vangen :)

En nu moet ik naar mijn werk, dus verder kan ik je niet helpen :(
 
Wat betreft niet twee keer dezelfde training opslaan, je kunt een UNIQUE CONSTRAINT zetten in phpMyAdmin, gewoon alle velden selecteren die er in moeten en dan op het 'U' tekentje klikken.

Dat betekend dat nergens in de tabel die combinatie van velden dezelfde waarde mag bevatten; je krijgt dan een error van mySQL, die je op kunt vangen :)

En nu moet ik naar mijn werk, dus verder kan ik je niet helpen :(

Ja maar ik doe niks via phpmyadmin.`

Nu moet ik kunnen uitlezen hoevaak iemand op een training is geweest en hoevaa niet en bij de training ook hoeveel er aanwezig waren en hoeveel niet. Dit lukt me maar niet, heb van alles gerpobeer met JOIN.
 
Laatst bewerkt:
PHP:
$alleTrainingen = mysql_query ( "SELECT training_id FROM trainingen" );
$aantalTrainingen = mysql_num_rows ( $alleTrainingen );

$spelers = mysql_query ( "SELECT spelerid, spelernaam FROM spelers" );

while ( $speler = mysql_fetch_assoc ( $spelers ) ) {

  $wedstrijden = mysql_query ( "SELECT id FROM trainingen_spelers WHERE spelerid = '" . $speler[ 'spelerid' ] . "'");

  $aantalAanwezig = mysql_num_rows ( $wedstrijden );
  $aantalAfwezig = $aantalTrainingen - $aantalAanwezig;

  echo $speler[ 'spelernaam' ], ' was ', $aantalAanwezig, 'x aanwezig en ', $aantalAfwezig, 'x afwezig.<br />';
}

Wat je doet is:

- Je haalt eerst alle wedstrijden op en kijkt hoeveel dat er zijn
- Je gaat dan per speler kijken hoe vaak die in de tabel trainingen_spelers voorkomt (hoe vaak ie aanwezig is geweest)
- Je trekt dit getal van het totaal af (hoe vaak ie afwezig is geweest)
- Je echoot het naar de browser
 
Werkt, echt super bedankt!

Zou je dit bij de trainingen ook lukken?
 
Hoe bedoel je precies? Bedoel je dat je per training wilt kijken hoeveel mensen er aan-/afwezig zijn?
 
Hoe bedoel je precies? Bedoel je dat je per training wilt kijken hoeveel mensen er aan-/afwezig zijn?


Ja ;)

EDIT //
Heb er nu dit van gemaakt
PHP:
  echo '<font color=\"green\">('.$aantalAanwezig.')</font>';
  echo '<font color=\"red\">('.$aantalAfwezig.')</font>';
 
Laatst bewerkt:
PHP:
$alleSpelers = mysql_query ( "SELECT spelerid FROM spelers" );
$aantalSpelers = mysql_num_rows ( $alleSpelers );
 
$trainingen = mysql_query ( "SELECT trainingid, datum FROM trainingen" );
 
while ( $training = mysql_fetch_assoc ( $trainingen ) ) {
 
  $spelers = mysql_query ( "SELECT id FROM trainingen_spelers WHERE training_id = '" . $training[ 'trainingid' ] . "'");
 
  $aantalAanwezig = mysql_num_rows ( $spelers );
  $aantalAfwezig = $aantalSpelers - $aantalAanwezig;
 
  echo 'Bij trainging #', $training[ 'trainingid' ], ' (', $training[ 'datum' ], ') waren ', $aantalAanwezig, ' spelers aanwezig en ', $aantalAfwezig, ' spelers afwezig.<br />';
}

EDIT: ik zie nu je EDIT maar ik zie niet precies in wat je veranderd hebt. Werkt bovenstaand script?
 
PHP:
$alleSpelers = mysql_query ( "SELECT spelerid FROM spelers" );
$aantalSpelers = mysql_num_rows ( $alleSpelers );
 
$trainingen = mysql_query ( "SELECT trainingid, datum FROM trainingen" );
 
while ( $training = mysql_fetch_assoc ( $trainingen ) ) {
 
  $spelers = mysql_query ( "SELECT id FROM trainingen_spelers WHERE training_id = '" . $training[ 'trainingid' ] . "'");
 
  $aantalAanwezig = mysql_num_rows ( $spelers );
  $aantalAfwezig = $aantalSpelers - $aantalAanwezig;
 
  echo 'Bij trainging #', $training[ 'trainingid' ], ' (', $training[ 'datum' ], ') waren ', $aantalAanwezig, ' spelers aanwezig en ', $aantalAfwezig, ' spelers afwezig.<br />';
}

EDIT: ik zie nu je EDIT maar ik zie niet precies in wat je veranderd hebt. Werkt bovenstaand script?

Je bent geweldig echt waar! Ja het werkt zeker weten. Ik hou van je, nee grapje maar echt superrrrrrrrrr!

Ik heb het script nu zo voor de spelers:

PHP:
$alleTrainingen = mysql_query ( "SELECT training_id FROM trainingen" );
$aantalTrainingen = mysql_num_rows ( $alleTrainingen );
 
$spelers = mysql_query ( "SELECT spelerid, spelernaam FROM spelers" );
 
while ( $speler = mysql_fetch_assoc ( $spelers ) ) {
 
  $wedstrijden = mysql_query ( "SELECT id FROM trainingen_spelers WHERE spelerid = '" . $speler[ 'spelerid' ] . "'");
 
  $aantalAanwezig = mysql_num_rows ( $wedstrijden );
  $aantalAfwezig = $aantalTrainingen - $aantalAanwezig;
 
  echo '<font color="green">('.$aantalAanwezig.')</font>';
  echo '<font color="red">('.$aantalAfwezig.')</font>';
}

Maar nu zet hij het er zo neer:
muwhaha.bmp
 
Ik kan niet zien waar die checkboxen vandaan komen.

Maar het probleem is neem ik aan dat het niet netjes uitgelijnd staat? En hoe wil je het dan precies hebben staan. Als je het even in statische HTML maakt en dan een screenshot / de code post, schept wat meer duidelijkheid.
 
Je hebt de code niet goed geimplementeerd. Je zet nu bij élke speler voor alle speler de aanwezigheid / afwezigheid.

Wat je kunt doen is het volgende:

PHP:
$alleTrainingen = mysql_query ( "SELECT training_id FROM trainingen" );
$aantalTrainingen = mysql_num_rows ( $alleTrainingen );

Dit kan helemaal buiten je while-loop, want dit hoeft maar 1 keer te worden uitgevoerd.

Vervolgens maak je van:

PHP:
$spelers = mysql_query ( "SELECT spelerid, spelernaam FROM spelers" );
 
while ( $speler = mysql_fetch_assoc ( $spelers ) ) {
 
  $wedstrijden = mysql_query ( "SELECT id FROM trainingen_spelers WHERE spelerid = '" . $speler[ 'spelerid' ] . "'");
 
  $aantalAanwezig = mysql_num_rows ( $wedstrijden );
  $aantalAfwezig = $aantalTrainingen - $aantalAanwezig;
 
  echo '<font color="green">('.$aantalAanwezig.')</font>';
  echo '<font color="red">('.$aantalAfwezig.')</font>';
}

dit:

PHP:
$wedstrijden = mysql_query ( "SELECT id FROM trainingen_spelers WHERE spelerid = '" . $rij_2->spelerid . "'");
 
$aantalAanwezig = mysql_num_rows ( $wedstrijden );
$aantalAfwezig = $aantalTrainingen - $aantalAanwezig;
 
echo '<font color="green">('.$aantalAanwezig.')</font>';
echo '<font color="red">('.$aantalAfwezig.')</font>';

Denk dat het dan wel ongeveer goed moet gaan.
 
Je hebt de code niet goed geimplementeerd. Je zet nu bij élke speler voor alle speler de aanwezigheid / afwezigheid.

Wat je kunt doen is het volgende:

PHP:
$alleTrainingen = mysql_query ( "SELECT training_id FROM trainingen" );
$aantalTrainingen = mysql_num_rows ( $alleTrainingen );

Dit kan helemaal buiten je while-loop, want dit hoeft maar 1 keer te worden uitgevoerd.

Vervolgens maak je van:

PHP:
$spelers = mysql_query ( "SELECT spelerid, spelernaam FROM spelers" );
 
while ( $speler = mysql_fetch_assoc ( $spelers ) ) {
 
  $wedstrijden = mysql_query ( "SELECT id FROM trainingen_spelers WHERE spelerid = '" . $speler[ 'spelerid' ] . "'");
 
  $aantalAanwezig = mysql_num_rows ( $wedstrijden );
  $aantalAfwezig = $aantalTrainingen - $aantalAanwezig;
 
  echo '<font color="green">('.$aantalAanwezig.')</font>';
  echo '<font color="red">('.$aantalAfwezig.')</font>';
}

dit:

PHP:
$wedstrijden = mysql_query ( "SELECT id FROM trainingen_spelers WHERE spelerid = '" . $rij_2->spelerid . "'");
 
$aantalAanwezig = mysql_num_rows ( $wedstrijden );
$aantalAfwezig = $aantalTrainingen - $aantalAanwezig;
 
echo '<font color="green">('.$aantalAanwezig.')</font>';
echo '<font color="red">('.$aantalAfwezig.')</font>';

Denk dat het dan wel ongeveer goed moet gaan.

Bedankt dat werkt ook erg mooi! Kan dit bij de trainingen ook zo? Had al wat geprobeerd, maar heb er nu geen overzicht meer in.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan