Goedenavond,

Ik heb een probleem en ik zie momenteel even de bomen door het bos niet meer.
Voor het vak informatica moeten we een praktische opdracht doen met een zelf gekozen onderwerp.
Nu maken wij een werknemers website voor een zeker bedrijf.
De inlog/registratie/uitlog en index pagina staan.
Ook heb ik hierbij een extra pagina gemaakt om het rooster te kunnen maken, als je niet de functie filiaalmanager hebt dan kom je er niet op. Als default staat er dat je hulpkracht bent.

Echter nu komt het probleem,
Ik heb een tabel gemaakt met de data's en uiteraard de gebruikers (verkregen uit de database door middel van een query en een while-loop). In de cellen staan text fielden waar je de werktijden in kunt vullen, welke daarna in de database komen te staan. De andere werknemers kunnen dan op hun beurt de gegevens uitlezen en hun eigen rooster zien. Dat is het idee.

Maar wanneer ik op de submit knop druk, voert hij alle waarden in behalve de username. Daar stoort het 'm. Want eerst had ik de username die op dat moment ingelogd was, ik (Sander) dus. Dus wanneer ik dan een tijd voor een andere werknemer invul, pakt het systeem hem niet.

Dit kan ik het beste aan de hand van het voorbeeld hanteren.
Er werken twee werknemers, Sander en Victor. Sander is de filiaalmanager en Victor de hulpkracht.
Sander maakt dus het rooster voor hemzelf en Victor. Wanneer Sander het rooster voor Sander invult, pakt het systeem hem en komt er ook in de tabel te staan: Username; Sander, WerkTijd1: ... etc. Voor Victor pakt hij hem niet en vult hij in het veld niet de username Victor in.

De vraag is nu: Hoe pak ik een specifieke variable uit de while loop en vul de username daarbij in?

Help help help.

De broncode volgt hieronder.
<?php
include_once "includes/config.php";
?>
<html>
<head>
</head>
<body>
<?php
if(empty($_SESSION['LoggedIn']) && empty($_SESSION['Username']))
{
    header("Location: login.php");
}
else
{
	if($_SESSION['Function'] != "Filiaalmanager")
	{	
	echo "Je bent niet bevoegd om deze pagina te bekijken. Je wordt terug gestuurd.";
	echo "<meta http-equiv=\"refresh\" content=\"2;url=index.php\">";
	}
	else
	{
	$maandag = date("d/m/Y");
	$dinsdag = date("d/m/Y", time()+86400);
	$woensdag = date("d/m/Y", time()+172800);
	$donderdag = date("d/m/Y",  time()+259200);
	$vrijdag = date("d/m/Y", time()+432000);
	$zaterdag = date("d/m/Y", time()+518400);
	$zondag = date("d/m/Y", time()+604800);
	
	$resultaat = mysql_query("SELECT Username FROM users");
	
     ?>
 
     <h1>Filiaalmanagers pagina</h1>
     <p>Welkom <b><?php echo $_SESSION['Username'];?></b>.</p>
	 
	 <form name = "rooster" method = "post" action = "<?php echo $_SERVER['PHP_SELF'];?>">
	 <table border = "1">
	 <tr>
		<th>Naam</th>
		<th><?php echo $maandag;?></th>
		<th><?php echo $dinsdag;?></th>
		<th><?php echo $woensdag;?></th>
		<th><?php echo $donderdag;?></th>
		<th><?php echo $vrijdag;?></th>
		<th><?php echo $zaterdag;?></th>
		<th><?php echo $zondag;?></th>
	 </tr>
	 <?php
	 while ($row = mysql_fetch_assoc($resultaat))
	 {
	 ?>
	 
	 <tr>
	 <?php
	 echo "<td>" . $row['Username'] . "</td>";
	 echo "<td><input type = 'text' size = '10' name = 'werktijd1'></td>";
	 echo "<td><input type = 'text' size = '10' name = 'werktijd2'></td>";
	 echo "<td><input type = 'text' size = '10' name = 'werktijd3'></td>";
	 echo "<td><input type = 'text' size = '10' name = 'werktijd4'></td>";
	 echo "<td><input type = 'text' size = '10' name = 'werktijd5'></td>";
	 echo "<td><input type = 'text' size = '10' name = 'werktijd6'></td>";
	 echo "<td><input type = 'text' size = '10' name = 'werktijd7'></td>";
	 ?>
	 </tr>
	 <?php
	 }
	 ?>
	 </table>
	 
	 <input type = "submit" name = "submit" value = "Verstuur naar database">
	 
	 </form>
	 
	 <li><a href = "index.php">Index</a></li> 
	 <li><a href = "logout.php">Log uit</a></li> 
     <?php
	 if($_POST['submit']){
		$gebruiker = mysql_fetch_assoc($resultaat);
		$werktijd1 = $_POST['werktijd1'];
		$werktijd2 = $_POST['werktijd2'];
		$werktijd3 = $_POST['werktijd3'];
		$werktijd4 = $_POST['werktijd4'];
		$werktijd5 = $_POST['werktijd5'];
		$werktijd6 = $_POST['werktijd6'];
		$werktijd7 = $_POST['werktijd7'];	

		$sql = mysql_query("INSERT INTO `roster`(`Username`, `WorkDate1`, `WorkDate2`, `WorkDate3`, `WorkDate4`, `WorkDate5`, `WorkDate6`, `WorkDate7`, `WorkTime1`, `WorkTime2`, `WorkTime3`, `WorkTime4`, `WorkTime5`, `WorkTime6`, `WorkTime7`) 
		VALUES ('".$gebruiker."','".$maandag."','".$dinsdag."','".$woensdag."','".$donderdag."','".$vrijdag."','".$zaterdag."','".$zondag."','".$werktijd1."','".$werktijd2."','".$werktijd3."','".$werktijd4."','".$werktijd5."','".$werktijd6."','".$werktijd7."')");
		
		
		if($sql){
			echo "Succes";
		}
		else{
			echo "Error";
		}
	 }
	 
}
}
?>
</body>
</html>


[size=xsmall]Toevoeging op 25/11/2014 20:56:15:[/size]

PS. Ik gebruik nog mysql_ . Het is puur voor een opdracht. Als ik MySqli gebruik snapt mn docent het niet meer. Hij snapt het nu al niet meer want hij kan me al niet meer helpen. -_-
In de waarde gebruiker moet de naam van de gebruiker zitten. Echter haal je met de while loop alles eruit. En nu wil ik één naam terug zetten met een bij behorende werktijd en datum. Daar gaat het fout..
Over de beveiliging gesproken, deze heb ik wel alleen niet genoteerd in de codes. Er zit namelijk nog een verificatie code bij en nog een extra beveiliging in het configuratie bestand (:
Sander Haug op 26/11/2014 15:11:33

In de waarde gebruiker moet de naam van de gebruiker zitten. Echter haal je met de while loop alles eruit. En nu wil ik één naam terug zetten met een bij behorende werktijd en datum. Daar gaat het fout..

Omdat je in je formulier nergens aangeeft welke werknemer het betreft.

Sander Haug op 26/11/2014 15:11:33

Over de beveiliging gesproken, deze heb ik wel alleen niet genoteerd in de codes. Er zit namelijk nog een verificatie code bij en nog een extra beveiliging in het configuratie bestand (:

Je query is onveilig: het formulier bevat een text-veld. Als ik daar niet bv 8:00 invul, maar phphulp, wordt dat het geaccepteerd. Daar controleer je niet op.

Ik weet dat de query nog onveilig is. Dat is momenteel mn probleem niet. Dat fix ik later wel.
Ik zal een screenshot sturen van hoe het eruit ziet en dan aan de hand daarvan is het probleem glas helder..



De namen worden verkregen door middel van een while loop.
Maar stel nu:

Ik wil bij Victor een werktijd invoeren. Op 26/11/14 met als tijd van 17:00-21:00.
Dan voert hij de tijd wel in in de table, maar niet de username. Omdat ik niet weet hoe ik die username moet pakken in een variabele.
Dat moet kunnen. Maar niet op de manier van:
$username = 'Victor van Bilsen'
.
Die naam is variabel.

Dát is het echte probleem... Als dat gefixt is, dan maak ik uiteraard alles veilig (:
Gewoon een <input type="hidden" name="user_id" value="12"> aan je formulier toevoegen met daarin standaard ingevuld het id van de user.

Na het verzenden uitlezen met $_POST['user_id']
Zou u dat iets extra kunnen toelichten..? Waar komt die
 Value = '12' 
vandaan?.. Waarom hidden?
Ja hoor, (inmiddels thuisgekomen en achter de pc)

hidden omdat het veld dan niet weergegeven wordt en de gebruiker er dus niets van merkt. 12 is gewoon een voorbeeld voor een user id.

Met php wordt het dan zoiets:
<?php

echo '<form action="user-rooster.php?userid='.$userid.'" method="post" >';
echo "<td>" . $row['Username'] . "</td>";
echo "<td><input type = 'text' size = '10' name = 'werktijd1' value=".@$user-week-rooster['Maandag']."></td>";
echo "<td><input type = 'text' size = '10' name = 'werktijd2' value=".@$user-week-rooster['Dinsdag']."></td>";
echo "<td><input type = 'text' size = '10' name = 'werktijd3'></td>";
echo "<td><input type = 'text' size = '10' name = 'werktijd4'></td>";
echo "<td><input type = 'text' size = '10' name = 'werktijd5'></td>";
echo "<td><input type = 'text' size = '10' name = 'werktijd6'></td>";
echo "<td><input type = 'text' size = '10' name = 'werktijd7'></td>";


echo '<input type="hidden" name="user_id" value="'.$userid.'">';


echo '</form>';

?>
Maar wanneer ik dit doe krijg je toch een undefined index error van $user_id?.. Of niet?
Ik zal misschien beter eens een werkend voorbeeld maken?
Als dat mogelijk is graag. Want ik worstel hier gigantisch mee haha.

Vindt dit heel moeilijk. Ik heb geen problemen met de hele lijst, in een kolom (HTML) te zetten. Maar om dan vervolgens in de kolom daarnaast iets te zetten (werktijd bv.) en deze terug te INSERTEN in de tabel, pakt hij de specifieke Username niet. Want hij heeft de hele loop. Arggh.. Vandaar ook dat ik de screen postte haha.

[size=xsmall]Toevoeging op 26/11/2014 17:24:56:[/size]

Ik heb nu geprobeerd om de Usernames in een textfield te zetten met een readonly waarde, dit field noem je $Username en zet je terug in de tabel. Maar helaas ook dat werkt niet..
Je zegt dat het inserten van de werktijden wel goed gaat, maar wat als je voor medewerker 1 een dag invult en voor medewerker 2 dezelfde dag? Worden dan twee gegevens weggeschreven?
Want als ik naar je code kijk, ga je volgens mij maar 1 rij verwerken.

Reageren