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. -_-
1) Laat je niet verwarren door de gebruiker die ingelogd is en "alle" gebruikers. Dat zijn twee dingen die totaal los staan van elkaar.
2) Je zult de namen van de medewerkers uit de database moeten trekken en in een <select> moeten stoppen zodat de filiaal manager een keuze kan maken uit een lijst met werknemers waarvoor hij een "dienst" wil toevoegen.


Als ik MySqli gebruik snapt mn docent het niet meer.


Dat vind ik echt treurig!
Ja het probleem blijft dan. Want nu heb ik ook alle gebruikers uit de tabel users getrokken. Maar als ik dan de user in de tabel Roster wil pompen met de tabellen: username, workdate1, worktime1.. en zo verder tot en met 7. Dan pakt hij de insert username niet. Omdat hij dan vindt dat username geen waarde heeft. Want dan pak je de hele while in een array, en niet specifiek één user, per row. Het is een variabele. Dus samenvattend:

-Ik haal de namen van de werknemers uit de tabel 'users'
-Ik wil de namen van de werknemers inserten in de tabel 'rosters', met hun werktijden.

De vraag is: Hoe? :(

En idd, dat is ook treurig..
Niet!

Je gaat NIET de namen van de werknemers invoegen. Je voegt hooguit het ID van de werknemer toe.
Wat als iemand gaat trouwen? Extra gebruiker?

Je geeft in je <select> iets mee als $_POST['maandag'] u=38&t=800
u=38 : gebruikersid 38 (naam is onbelangrijk)
t=800 : tijdstip, bijvoorbeeld 8:00 beginnen (+ 8 uur is dus tot 16:30, inclusief pauze)

Dan kan zo:
<?php
$_POST['maandag'] = 'u=38&t=800';
$gegevens = parse_url($_POST['maandag'];
print_r($gegevens);
?>
Sorry maar ik volg het nog niet helemaal. Je bent me een stap te ver voor. Want, we hebben uit een while loop een dropdown list gemaakt met de UserID's. Stel dat daar de nummers: 1,2,3 uit komen. Hoe moet je dan in de database invoegen:
1, t = 06:00-15:00??
Je hebt een tabel roster (waarom noem je die niet rooster of schedule?) en je hebt een tabel users.

In users staat alleen informatie over de users.

In roster verwijs je door middel van het user_id om welke user het gaat:

user:
user_id (integer, auto increment, primary key)
name (varchar)
email (varchar)
...

schedule:
schedule_id (integer, auto increment, primary key)
user_id (integer, index)
start (datetime)
stop (datetime)



[size=xsmall]Toevoeging op 25/11/2014 23:01:37:[/size]

Stel dat je nu op een pagina wilt laten zien wanneer een gebruiker dienst heeft dan doe je zoiets:


SELECT
	user.name, schedule.start, schedule.stop
FROM
	schedule
JOIN
	user
ON
	user.user_id = schedule.user_id
WHERE
	user.user_id = 'Victor' AND schedule.start > NOW()

[/code]
Exact. Zo heb ik het ook in mijn database staan. Ik hou van Engels. Vandaar. Werkt makkelijker.
Alleen waar ik problemen mee heb is dat ik uit die while loop de namen/ids haal. Dan krijg je een hele lijst. Gewoon in een PHP form/HTML tabel uitgevoerd.
In de overige cellen staan 7 kolommen met als headers de data. De data en de ingevoerde werktijden dmv textfields, moeten corresponderen met de naam en of id.
Het zou er zo uit moeten zien:

Sander (of 1) | 26/11/12 | 0600:1500

Alleen hoe voer je die username/ID naar de database? Nu neem je één waarde terwijl je bij de while loop alles had.
Alles werkt behalve die username of ID. Want bij een andere gebruiker, gebruiker 2 bijvoorbeeld. Die piet heet,
Staat er het volgende:

.... | 26/11/12 | 17:00-21:00

Mijn excuses als het allemaal vaag klinkt. Ik hoop dat ik te volgen ben. De naam moet automatisch mee gezonden worden.
Niet met een handmatige WHERE name • 'Victor'. Deze zou variabel moeten zijn. Want als er 100 werknemers zijn is het omslachtig om alles met de hand te typen..

Heb je mijn query gezien? Ik denk dat dat het antwoord op je vraag is? Je krijgt met deze query namelijk de gebruikersnaam met daar bij zijn/haar roostertijden. alles netjes rij voor rij.

en door het tweede stuk in het WHERE gedeelte krijg je alleen de roostertijden voor de toekomst en niet die van het verleden.

JOIN: de tabel die je er aan wil koppelen
ON: de regel die bepaalt welk record uit tabel A aan welk record uit tabel B gekoppeld moet worden
Hey Sander,

Het zal goed komen man.

Je moet gewoon je probleem verdelen, en make it simple.

Bijvoorbeeld.

-> choice-user.php


<head>
 <script type="text/javascript">
        var sitefolder = "http://localhost/admin/" /* hier moet je de folder geven van user-rooster.php */
        function OnSelectionChange (select) {
            var selectedOption = select.options[select.selectedIndex];
            document.location.href=sitefolder+selectedOption;
        }
    </script>
</head>
<body>
<?php
// inlog/verificatie code hier


$resultaat = mysql_query("SELECT Userid, Username FROM users");

echo '<select onchange="OnSelectionChange (this)">';
while ($row = mysql_fetch_assoc($resultaat)):
echo '<option value="user-rooster.php?userid='.$row['Userid'].'" >'.$row['Username'].'</option>';
endwhile;
echo '</select>';
?>
</body>




-> user-rooster.php


<head>
<!-- je code hier--> 
</head>
<body>
<?php
// inlog/verificatie code hier

$userid = intval($_GET['userid']);

$user-info-query = mysql_query("SELECT * FROM users where Userid=".$userid);

$user-week-rooster-query = mysql_query("SELECT Maandag, Dinsdag, * FROM rooster where Userid=".$userid);
// als de werknemer geen rooster heeft dan krijg je een False.

//info ophalen van database (dus je hebt de mogelijkheid om de data toe te voegen of te wijzigen)

$user-week-rooster = mysql_fetch_assoc($user-week-rooster-query))

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 '</form>';


// hier clean the POST's
// Insert the Info in table
// show success message

?>
</body>





Succes
@Simo
Met bovenstaande code zal succes uitblijven, regel 10 zal een fatal error opleveren en dezelfde fout wordt verderop nog een aantal maal gemaakt.
Sander Haug op 25/11/2014 20:47:50


<?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."')");
		
?>

Ga eens debuggen en controleer wat er in elke waarde zit. Bedenk daarna waar het fout gaat.
Het aanmaken van al die variabelen ($werktijd1 t/m 7) is in ieder geval niet nodig.
Verder schrijf je zonder enige controle/ beveiliging de gegevens naar je database.

Wat denk/verwacht je dat er in $gebruiker zal zitten?

Reageren