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']);
}
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:
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)
> 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.
> 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 +
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...?
}
}
}
?>
<?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.