PHP script aanvinken

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

EWP

Gebruiker
Lid geworden
28 feb 2009
Berichten
17
Hallo wie heeft er voor mij een script waar spelers kunt aanvingen die aanwezig zijn per wedstrijd/training en deze dan ook opteld en weer geeft in een overzicht en wie het meeste is geweest ook boven aan komt te staan
test1.jpg
:thumb:
 
Hm, het idee is meer dat je hier komt met vragen als je zelf bezig bent het script te maken... ik ken iig geen scripts hier voor, maar het is niet héel erg lastig zelf te doen denk ik.
 
Ik was hier mee bezig voor hem maar loop tegen een probleem hoe ik de selectiebox kan opslaan in de database. Ik pruts nog wat.
 
Je kunt in PHP heel makkelijk controleren of een checkbox wel of niet is aangevinkt door middel van:

PHP:
<?php

  if ( isset ( $_POST[ 'naamVanJeCheckbox' ] ) ) {

    $aanwezig = true;

  } else {

    $aanwezig = false;

  }

?>

En dat kun je dan op verschillende manieren in je database zetten. Door middel van een boolean value, maar ook door bijv. een TinyINT (op 0 of 1 zetten) of gewoon 'ja' of 'nee' als string erin zetten. Er zijn legio mogelijkheden.
 
Je kunt in PHP heel makkelijk controleren of een checkbox wel of niet is aangevinkt door middel van:

PHP:
<?php

  if ( isset ( $_POST[ 'naamVanJeCheckbox' ] ) ) {

    $aanwezig = true;

  } else {

    $aanwezig = false;

  }

?>

En dat kun je dan op verschillende manieren in je database zetten. Door middel van een boolean value, maar ook door bijv. een TinyINT (op 0 of 1 zetten) of gewoon 'ja' of 'nee' als string erin zetten. Er zijn legio mogelijkheden.

Bedankt voor je reactie, ik snap wat je bedoelt maar ik gebruiker voor elke speler 1 checkbox dan moet ik toch gewoon de naam van checkbox het id ophalen van die speler?

PHP:
<INPUT TYPE="checkbox" NAME="<?php echo $spelerid ?>" VALUE="<?php echo $spelerid ?>

Zoiets dacht ik?
 
Een checkbox heeft geen value.

Maar je zou het inderdaad zo kunnen doen ja:

PHP:
<INPUT TYPE="checkbox" NAME="<?php echo $spelerid ?>" />
 
Een checkbox heeft geen value.

Maar je zou het inderdaad zo kunnen doen ja:

PHP:
<INPUT TYPE="checkbox" NAME="<?php echo $spelerid ?>" />

Dat heb ik nu gedaan en dat ID herkent hij ook (bron van pagina bekijken ;d). Maar nu moet ik dus bovenaan de pagina een Query maken ik dacht zo: ?

PHP:
if ($_POST['$spelerid']) {
if ($_POST['$spelerid']!="") {
$insert = "INSERT INTO trainingen_spelers (training_id,spelerid) VALUES ('','".$spelerid."')"; 
mysql_query($insert) or die(mysql_error());
echo "<strong>Succesvol opgeslagen!</strong><br /><br />"; } 
else { echo"<strong>Je hebt niet alle velden ingevuld!</strong><br /><br />";}}
 
PHP:
<?php

  if ( isset ( $_POST[ $spelerid ] ) ) {

    if ( mysql_query ( "INSERT INTO trainingen_spelers (training_id,spelerid) VALUES ('','".$spelerid."')" ) ) {

      echo '<strong>Succesvol opgeslagen!</strong><br /><br />';

    } else {

      echo 'Query kan niet worden uitgevoerd.';

    }

  } else {

    echo '<strong>Je hebt niet alle velden ingevuld!</strong><br /><br />';

  }
?>
 
PHP:
<?php

  if ( isset ( $_POST[ $spelerid ] ) ) {

    if ( mysql_query ( "INSERT INTO trainingen_spelers (training_id,spelerid) VALUES ('','".$spelerid."')" ) ) {

      echo '<strong>Succesvol opgeslagen!</strong><br /><br />';

    } else {

      echo 'Query kan niet worden uitgevoerd.';

    }

  } else {

    echo '<strong>Je hebt niet alle velden ingevuld!</strong><br /><br />';

  }
?>


Aha ik dachta al waarom doet pakt hij $spelerid niet maar de Query hiervan wordt pas later in de pagin gemaakt omdat daar een while opzit.

Hoe doe ik dit nu?
 
Kun je even de hele pagina posten?

Hier, slordige scripting maar goed.

PHP:
<?php
// Gemaakt door Harm Wesselink
// 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 "<strong>Succesvol opgeslagen!</strong><br /><br />"; } 
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 "<strong>Succesvol opgeslagen!</strong><br /><br />"; } 
else { echo"<strong>Je hebt niet alle velden ingevuld!</strong><br /><br />";}}
// De checkbox opslaan
if ( isset ( $_POST[ $spelerid ] ) ) {
if ( mysql_query ( "INSERT INTO trainingen_spelers (id,training_id,spelerid) VALUES ('','','".$spelerid."')" ) ) {
echo '<strong>Succesvol opgeslagen!</strong><br /><br />';
} else {
echo 'Query kan niet worden uitgevoerd.';
}
} else {
echo '<strong>Je hebt niet alle velden ingevuld!</strong><br /><br />';
}
?>
Voer hier een datum in:<br /><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;
$aanwezig = $rij_2->aanwezig;
// Afwezigheid berekenen
$query_1 = mysql_query("SELECT training_id FROM trainingen") or die(mysql_error());
$sql_1 = mysql_num_rows($query_1);
$afwezig_sql_1 = $sql_1;
$afwezig = $afwezig_sql_1 - $aanwezig;
?>
<TR>
<TD width="200" align="left">
<?php echo $spelerid ?>. <?php echo $spelernaam ?></TD>
<TD width="71"><INPUT TYPE="checkbox" NAME="<?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.";
}
?>
 
Wat je dan het beste kunt doen, is de checkboxen als volgt nummeren:

PHP:
<input type="checkbox" name="speler[<?php echo $spelerid; ?>]" />

Dan kun je op je verwerkingspagina het volgende doen:

PHP:
foreach ( $speler as $spelerid => $val ) {
  if ( mysql_query ( "INSERT INTO trainingen_spelers (id,training_id,spelerid) VALUES ('','','".$spelerid."')" ) ) {
    echo '<strong>Succesvol opgeslagen!</strong><br /><br />';
  } else {
    echo 'Query kan niet worden uitgevoerd.';
  }
}

in plaats van:

PHP:
if ( isset ( $_POST[ $spelerid ] ) ) {
if ( mysql_query ( "INSERT INTO trainingen_spelers (id,training_id,spelerid) VALUES ('','','".$spelerid."')" ) ) {
echo '<strong>Succesvol opgeslagen!</strong><br /><br />';
} else {
echo 'Query kan niet worden uitgevoerd.';
}
} else {
echo '<strong>Je hebt niet alle velden ingevuld!</strong><br /><br />';
}
 
Een checkbox heeft geen value.

Om hier even op te reageren, een checkbox heeft wel degelijk een value. Je kunt het value="" gewoon setten, en dan stuurt hij die waarde door via POST, als je hem aangevinkt hebt, en hij stuurt niks door als het niet aangevinkt is.

Pas dus ook goed op; het is mogelijk om een SQL injection te doen via een checkbox, als je de value gebruikt ;)
 
Warning: Invalid argument supplied for foreach() in /home/sis0088/domains/trainerew.nl/public_html/svhalle/cms/training/trainingsopkomst.php on line 25
 
@Frats, excuses, je hebt helemaal gelijk :thumb:

@Razing,

PHP:
foreach ( $speler as $spelerid => $val ) {

moet zijn

PHP:
foreach ( $_POST[ 'speler' ] as $spelerid => $val ) {
 
Mooi, nu werkt hij zo'n beetje alleen het training_id slaat hij nog niet op, de database structuur ziet er zo uit:

id int(11) auto_increment
spelerid int(11)
training_id int(11)

En deze regel (beetje aangepast) staat nu in het php script.
if ( mysql_query ( "INSERT INTO trainingen_spelers (id,spelerid,training_id) VALUES ('','".$spelerid."','')" ) ) {
 
je zult het training_id nog wel mee moeten geven in de query.
 
je zult het training_id nog wel mee moeten geven in de query.

Deze staat er toch tussen?

EDIT: Deze komt ook nog steeds:
Warning: Invalid argument supplied for foreach() in /home/sis0088/domains/trainerew.nl/public_html/svhalle/cms/training/trainingsopkomst.php on line 25
 
Laatst bewerkt:
Niet bij de VALUES. Je geeft voor id geen waarde mee, maar dat hoeft ook niet. Je geeft spelerid de waarde $spelerid mee. training_id geef je weer geen waarde mee en dat moet wel. Ik zal je dan meteen maar aangeven hoe je het kunt oplossen.

PHP:
if ( mysql_query ( "INSERT INTO trainingen_spelers (id,spelerid,training_id) VALUES ('','".$spelerid."','" . mysql_insert_id() . "')" ) ) {

mysql_insert_id() retourneert het id van het laatst toegevoegde record.
 
Hij slaat Training_id niet goed op, de eerste 2 wel maar dan telt hij door 4 5 6 etc.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan