Hallo allemaal,

Ik hoop dat jullie mij kunnen helpen!
Ik ben een script aan het schrijven waarmee ik diensten voor klanten aan en uit kan zetten.
Ik kan deze diensten aan/uit zetten door middel van een checkbox welke de name dienst[] meekrijgt.
Het toevoegen van een enkele dienst gaat goed, en wanneer ik deze checkbox weer uit zet dan wordt deze ook uit het systeem gehaald.

Als ik nu 2 diensten toevoeg gaat dit ook goed, alleen als ik dan 1 van die 2 diensten OF allebei uitvink, dan gebeurt er helemaal niks.
Mijn code:

if(!empty($_POST['dienst'])){
	foreach($_POST['dienst'] AS $key=>$dienstupdate){
		$users->update_user_diensten($_GET['id'],$dienstupdate,$_SESSION['y_status']);
		$my_query = mysql_query("SELECT * FROM user_diensten WHERE user_id='".$_GET['id']."' AND dienst_id='".$dienstupdate."' ") or die(mysql_error());
		$my_rd = mysql_fetch_assoc($my_query);
		if(($my_rd['dienst_id'] != $dienstupdate) && ($my_rd['active'] == 1)){
			$setinactive = time();
			mysql_query("UPDATE user_diensten SET active=0, activeTill='".$setinactive."' WHERE user_id='".$_GET['id']."' AND dienst_id='".$dienstupdate."' ") or die(mysql_error());
		}
	}
} else {
	$users->set_diensten_inactive($_GET['id']);
}

Kunnen jullie zien wat hier fout gaat?

Alvast bedankt!!
Is toch met php en de database mogelijk?
Als er een nieuwe dienst bij komt sla je die naam in de database op met daarnaast bijvoorbeeld op de hoeveelste plaats deze getoond moet worden.
Daarnaast begrijp ik het niet meer helemaal. Je zei net dat het om een intern systeem gaat, maar nu komen er klanten bij kijken?

Wat voor informatie staat er trouwens over de checkboxen in de database?
TOEVOEGING:

JE kunt in het stukje van Micheal - toch zelf met een query per selectbox de value erin zetten? Iets als:

<input type="checkbox" name="dienst[1]" value="<?php echo $row['value']; ?>"/>
Davey Mat op 29/04/2014 16:13:17

Is toch met php en de database mogelijk?
Als er een nieuwe dienst bij komt sla je die naam in de database op met daarnaast bijvoorbeeld op de hoeveelste plaats deze getoond moet worden.
Daarnaast begrijp ik het niet meer helemaal. Je zei net dat het om een intern systeem gaat, maar nu komen er klanten bij kijken?

Wat voor informatie staat er trouwens over de checkboxen in de database?


Wij kunnen deze diensten koppelen aan klanten, aan de records zit ook een begin- en einddatum gekoppeld voor de facturatie, maar het is niet zo dat klanten kunnen inloggen op deze portal.

De opbouw van de checkboxen in de database is niet heel erg relevant voor dit probleem, maar ziet er als volgt uit:

id (auto incr., primary)
naam (van de dienst)
prijs (van de dienst)
deleted (dienst actief ja of nee)
deletedBy (door wie is de dienst inactief gezet)
Gebruik gewoon name="dienst[en_hier_het_id]" dan weet je precies over welke dienst het gaat.
> deze geeft namelijk de checkbox die WEL is aangevinkt active=0 mee
Foutje :) De eerste 0 (regel 6) moet dus 1 zijn, maar dan heb je in principe het zelfde als je nu hebt. Wat niet geset is zou je dan alsnog eerst op 0 moeten zetten.

Dus je zou voordat je controleert welke checkbox'en gecheckt zijn, alles op 0 kunnen zetten en dan die wél gecheckt zijn weer op 1 zetten. Een mooie oplossing is het niet.

Edit: Ah, dan kun je dus alsnog de naam of id uit de database meesturen en controle of deze dan is geset of niet.
Wat weerhoud je dan om het op de manier van Micheal - te doen +
<input type="checkbox" name="dienst[1]" value="<?php echo $row['value']; ?>"/>
Michael - op 29/04/2014 16:20:52

> deze geeft namelijk de checkbox die WEL is aangevinkt active=0 mee
Foutje :) De eerste 0 (regel 6) moet dus 1 zijn, maar dan heb je in principe het zelfde als je nu hebt. Wat niet geset is zou je dan alsnog eerst op 0 moeten zetten.

Dus je zou voordat je controleert welke checkbox'en gecheckt zijn, alles op 0 kunnen zetten en dan die wél gecheckt zijn weer op 1 zetten. Een mooie oplossing is het niet.

Edit: Ah, dan kun je dus alsnog de naam of id uit de database meesturen en controle of deze dan is geset of niet.


Ik heb er inderdaad ook al aan gedacht om alles op 0 te zetten en dan degene die geset zijn op 1 te zetten, maar dan komt het volgende probleem:
De diensten die eerst op 1 stonden en nu op 0 moeten, moeten een einddatum meekrijgen, deze einddatum mag absoluut niet met de diensten die gewoon op 1 moeten blijven staan meegegeven worden.

[size=xsmall]Toevoeging op 29/04/2014 16:27:31:[/size]

Davey Mat op 29/04/2014 16:23:13

Wat weerhoud je dan om het op de manier van Micheal - te doen +
<input type="checkbox" name="dienst[1]" value="<?php echo $row['value']; ?>"/>



Davey, hij krijgt sowieso al een waarde mee:

<input type="checkbox" value="'.$check_diensten['dienst'].'" id="check_'.$check_diensten['dienst'].'" name="dienst[]" />
Die waarde kun je dan beter als 'key' gebruiken zodat je weet welke je verwacht.

name="dienst[' . $check_diensten['dienst'] . ']"

Maak een array met alle diensten uit de database, en controleer in een foreach welke wel en niet geset zijn.
Michael - op 29/04/2014 16:31:18

Die waarde kun je dan beter als 'key' gebruiken zodat je weet welke je verwacht.

name="dienst[' . $check_diensten['dienst'] . ']"

Maak een array met alle diensten uit de database, en controleer in een foreach welke wel en niet geset zijn.


Als ik dit zou doen werkt foreach($_POST['dienst'] AS $key=>$dienstupdate){ toch niet meer?

[size=xsmall]Toevoeging op 29/04/2014 16:47:36:[/size]

Michael - op 29/04/2014 16:31:18

Die waarde kun je dan beter als 'key' gebruiken zodat je weet welke je verwacht.

name="dienst[' . $check_diensten['dienst'] . ']"

Maak een array met alle diensten uit de database, en controleer in een foreach welke wel en niet geset zijn.


En bedoel je dan zoiets?:


<?php
	class users{
		public function check_diensten(){
			$query = mysql_query("SELECT * FROM diensten WHERE deleted=0") or die(mysql_error());
			while($rd = mysql_fetch_assoc($query)){
				$result[] = $rd;
			}
			return $result;
		}
	}
	
	$check_diensten = $users->check_diensten();
	foreach($_POST['dienst'] AS $key=>$dienstupdate){
		foreach($check_diensten AS $key=>$diensten){
			if(isset($dienstupdate[''.$diensten['id'].''])){
				//Hier een update query...?
			}
		}
	}
?>
Dat kan gewoon in één update query:
<?php

$sql = "UPDATE diensten SET
	deleted = 1,
	deletedBy = 'Cris',
	end_date = CURRENT_DATE
WHERE
	customer_id = 678
	AND
	deleted = 0";
/* Als er iets is aangevinkt extra where clause */
if (isset($_POST['diensten']) {
	$sql .= "
	AND
	dienst_id NOT IN (" . implode(',', $_POST['diensten']) . ")";
?>

Je moet dan wel de id's van de diensten als value van de checkbox geven.

Reageren