Hallo, ik heb hieronder een script om de openingstijden in de database te zetten, ook is er een php check of de winkel niet meer dan 80 uur open is.

Alleen nu wil ik ervoor zorgen dat hij automatisch berekend hoeveel uren de winkel open is (afhankelijk van de ingevulde waardes).

Het script zoals ik het nu heb:

<?php
if(DB::Filter($row_online->user_id) == '0'){
    include("pages/home.php");
}elseif(DB::NumRows($sql_supermarket) == 0){
    include("pages/supermarket/start/index.php");
}else{
?>
    <div class="c_box">
        <div class="heading green">Openingstijden</div>
                        
        <div class="inner">
        <?php
        if(isset($_POST['confirm'])){
            $total = 0;
                for ($i = 1; $i < 8; $i++) {
                $total += ($_POST['closed'.$i] - $_POST['open'.$i]);
            }
                
            if($total > 80){
                echo'<div class="error">Het is maar mogelijk om maximaal 80 uur per week open te zijn.</div>';
            }else{
                for ($i = 1; $i < 8; $i++) {
                    $sql = DB::Query("SELECT * FROM hoursofoperation WHERE supermarket_id = '".DB::Escape($row_supermarket->id)."' AND day = '".$i."' ORDER BY id DESC LIMIT 1 ");
                    if(DB::Numrows($sql) == 0){
                        DB::Query("INSERT INTO hoursofoperation (supermarket_id,day,open,closed) VALUES('".DB::Filter($row_supermarket->id,ENT_QUOTES)."','".$i."','".DB::Filter($_POST['open'.$i])."','".DB::Filter($_POST['closed'.$i])."')")or die(mysql_error());
                    }else{
                        DB::Query("UPDATE hoursofoperation SET open = '".DB::Filter($_POST['open'.$i])."', closed = '".DB::Filter($_POST['closed'.$i])."' WHERE supermarket_id = '".DB::Escape($row_supermarket->id)."' AND day = '".$i."' ORDER BY id DESC LIMIT 1")or die(mysql_error());
                    }
                }
                echo'<div class="correct">De openingstijden zijn met succes aangepast.</div>';
            }
        }
        ?>
        <form method="POST" action="index.php?p=supermarket&a=hoursofoperation">
            <table width="100%">
                <tr>
                    <td><strong>Dag</strong></td>
                    
                    <td><strong>Geopend vanaf</strong></td>
                    
                    <td><strong>Gesloten om</strong></td>
                </tr>
                    
                <?php
                for ($i = 1; $i <= 7; $i++) {
                    $sql_open = DB::Query("SELECT * FROM hoursofoperation WHERE supermarket_id = '".DB::Escape($row_supermarket->id)."' AND day = '".$i."' ORDER BY id DESC LIMIT 1");
                    $row_open = DB::FetchObject($sql_open);
                ?>
                    
                    <tr>
                        <td width="40%">
                        <?php
                        switch ($i) {
                            case 1:
                                echo "Maandag";
                                break;
                            case 2:
                                echo "Dinsdag";
                                break;
                            case 3:
                                echo "Woensdag";
                                break;
                            case 4:
                                echo "Donderdag";
                                break;
                            case 5:
                                echo "Vrijdag";
                                break;
                            case 6:
                                echo "Zaterdag";
                                break;
                            case 7:
                                echo "Zondag";
                                break;
                            default : 
                            echo "geen dag gekozen";
                        }
                        
                        ?>
                        </td>
                                
                        <td width="30%">
                        <select name = "open<?php echo $i; ?>">
                        <?php
                        for ($open = 8; $open <= 22; $open++) {
                        ?>
                            <option value="<?php echo $open; ?>" onclick="calc()"
                            <?php
                            if(DB::Numrows($sql_open) != 0){
                                if(DB::Filter($row_open->open) == $open){
                            ?>
                                    selected="selected";
                            <?php
                                }    
                            }
                            ?>
                            />
                            <?php echo $open; ?>:00</option>
                        <?php
                        }
                        ?>
                        </select> uur
                        </td>
                                
                        <td width="30%">
                        <select name = "closed<?php echo $i; ?>">
                        <?php
                        for ($closed = 14; $closed <= 22; $closed++) {
                        ?>
                            <option value="<?php echo $closed; ?>" onclick="calc()"
                            <?php
                            if(DB::Numrows($sql_open) != 0){
                                if(htmlentities($row_open->closed) == $closed){
                            ?>
                                    selected="selected";
                            <?php
                                }   
                            }
                            ?>
                            />
                            <?php echo $closed; ?>:00</option>
                        <?php
                        }
                        ?>
                        </select> uur
                        </td>
                    </tr>
                <?php
                }
                ?>
                <tr>
                    <td><input type="submit" value="Bevestig openingstijden" name="confirm"></td>
                </tr>
            </table>
        </form>
        </div>
    </div>
<?php
}
?>


Het script dat ik gevonden heb op internet
Link

Ik hoop dat ik hiermee voldoende informatie heb gegeven, indien dat niet het geval is hoor ik het wel.

Alvast bedankt
helaas nog niks mogen ontvangen.

Iemand een idee? Alvast bedankt
id
supermarket_id
day
open
closed
Als open en closed van het type TIME zijn kun je dus de openingsduur per record berekenen
Het verschil heb ik al berekend, maar dat gebeurd pas zodra er op de submit button is geklikt.

Wat ik wil is dat er een input veld komt die meteen berekend nadat er een nieuwe waarde is ingevuld.

SELECT
	SUM(t1.minuten) AS totaal
FROM (	SELECT
		supermarkt_id, day, ROUND((TIME_TO_SEC(closed) - TIME_TO_SEC(open)) / 60, 0) AS minuten
	FROM
		openeningstijden
	WHERE
		supermarkt_id=1
	) AS t1
GROUP BY
	supermarkt_id


Dit berekend voor supermarkt met id 1 de totale openingsduur in minuten.

Ik zou dat dan met AJAX doen.
Frank, waarom die subquery? Die is helemaal niet nodig.

Maar volgens mij wil Rick het totaal op de pagina laten zien wanneer er iets gewijzigd wordt, dus voordat er iets verstuurd wordt.
[code lang="js"]
function calc() {
total = 0;
for (i=1;i<8;i++) {
open = parseInt(document.getElementById('open' + i).value);
if(open != 0) {
closed = parseInt(document.getElementById('closed' + i).value);
total += closed - open;
}
}
alert(total.toString());
}
[/code]

<?php
$sql = "SELECT 
			d.day_id,
			CASE d.day_id
				WHEN 1 THEN 'Maandag'
				WHEN 2 THEN 'Dinsdag'
				WHEN 3 THEN 'Woensdag'
				WHEN 4 THEN 'Donderdag'
				WHEN 5 THEN 'Vrijdag'
				WHEN 6 THEN 'Zaterdag'
				ELSE 'Zondag'
			END day_name,
			IFNULL(h.open, 0) open,
			IFNULL(h.closed, 0) closed
		FROM
			(SELECT 1 day_id UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
			UNION SELECT 5 UNION SELECT 6 UNION SELECT 7) d
		LEFT JOIN
			hours_of_operation h
			ON d.day_id = h.day AND h.supermarket_id = 1
		ORDER BY d.day_id";

$sql_open = DB::Query($sql);
while ($row_open = DB::FetchObject($sql_open)) {
	?>
	<tr>
		<td width="40%">
			<?php echo $row_open->day_name ; ?>
		</td>
		<td width="30%">
			<select id="open<?php echo $row_open->day_id; ?>" name = "open<?php echo $row_open->day_id; ?>" onchange="calc()">
				<option value="0">Gesloten</option>
			<?php
			for ($open = 8; $open <= 22; $open++) {
			?>
				<option value="<?php echo $open; ?>" 
				<?php
				if($row_open->open != 0){
					if(DB::Filter($row_open->open) == $open){
				?>
						selected="selected"
				<?php
					}    
				}
				?>
				>
				<?php echo $open; ?>:00</option>
			<?php
			}
			?>
			</select> uur
			</td>

			<td width="30%">
			<select id="closed<?php echo $row_open->day_id; ?>" name="closed<?php echo $row_open->day_id; ?>" onchange="calc()">
				<option value="0">Gesloten</option
			<?php
			for ($closed = 14; $closed <= 22; $closed++) {
			?>
				<option value="<?php echo $closed; ?>" 
				<?php
				if($row_open->open != 0){
					if(htmlentities($row_open->closed) == $closed){
				?>
						selected="selected"
				<?php
					}   
				}
				?>
				>
				<?php echo $closed; ?>:00</option>
			<?php
			}
			?>
			</select> uur
			</td>
		</tr>
	<?php
	}
 ?>

[/code]
Dat is precies wat ik wil.

Bedankt hiervoor.

Edit: Nu wil ik ervoor zorgen dat het geen alert is, maar een input veld waar het in wordt weergegeven

<input type = "text" id = "total" name = "total" />
Waarom een input, dat kan door de gebruiker worden aangepast. Ik neem aam dat je dat niet wilt?

In je html:
<span id="total"></span>

In plaats van de alert:

document.getElementById('total').innerHTML = total.toString();

Wil je toch een input verander .innerHTML in .value
Bedankt, hij geeft alleen een minwaarde van 57.

Als ik tel: 8 - 14 zijn 6 uur x 7 = 42

en als ik de openingstijden dan telt hij bij/af (als ik de openingstijd verander. bij sluitingstijd doet hij dat niet)

Hij telt alleen de openingstijden bij elkaar op

Reageren