Probleem met Check Boxes

  • Onderwerp starter Onderwerp starter SvU
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

SvU

Terugkerende gebruiker
Lid geworden
26 jan 2007
Berichten
1.534
Ik heb een beetje een listig probleem, waar ik zelf helemaal niet meer uit weet te komen.

Ik heb een projectapplicatie, waarin mensen hun lopende projecten kunnen bekijken. Aan die projecten kunnen voortgangsrapporten worden toegevoegd, ik ben nu bezig met een notificatiescriptje. Oftewel: de klant kiest bij welk project hij een mail wilt ontvangen ingeval van een nieuw voortgangsrapport.

Er is een tabel waarin alle projecten van de betreffende klant worden weergegeven, een van de kolommen in deze tabel heet 'Notificatie', waaronder check boxes staan. Oftewel:

PHP:
<form method="post" action="">
<input type="checkbox" name="notif[]" value="<?php echo $rij['ID_PROJECT']; ?>" <?php echo $checked; ?>>

Vervolgens wordt het formulier gesubmit en doorlop ik de array opgesteld naar de gecheckte boxes in het formulier. Als het vakje is aangekruist, krijg ik de nummer van het project terug.
Vervolgens zet ik het in de database:

PHP:
$insertnotif = "INSERT INTO notification (ID_PROJECT, ID_USER, notif) VALUES ($notif, $userid, 1)";

Uiteindelijk is het dus simpel: bij een nieuw voortgangsrapport kijk ik welke users die bij Project X horen een mail willen krijgen. Oftewel: waar 'ID_PROJECT' X is en 'notif' 1.

So far so good, dat werkt als een trein, maar nu komt het probleem:

Ik moet nu een stuk code hebben waarmee ik kan kijken of het project níet is aangevinkt, waarna ik de volgende query wil uitvoeren:

PHP:
$updatenotif = "DELETE FROM notification WHERE ID_PROJECT = $project AND ID_USER = $userid";

Daar gaat het mis. Op volgende manier doorloop ik de array:

PHP:
$notif = $_POST['notif'];
	foreach ($notif as $notif){

           }

En op volgende wijze kijk ik of er al een notificatie van in het systeem staat:

PHP:
$selectnotif = "SELECT notif FROM notification WHERE ID_PROJECT = $notif AND ID_USER = $userid";

Oftewel, als het formulier met check boxes wordt gesubmit, maar de waarde was al 1, wordt het niet nog eens aan de database toegevoegd.


Maar, de krux van de zaak: hoe controleer ik welk vakje níet is aangekruist? Als het vakje niet - meer - is aangekruist, betekent dat namelijk dat de user géén notificatiemail meer wilt ontvangen.

Voorbeeld:

Veronderstel dat User 100 aangemeld is bij 3 projecten. Eerder heeft hij zich aangemeld voor notificatiemails bij Project 1 en Project 3.

In de database staat dus:

user 100 / project 1 / 1
user 100 / project 3 / 1

Nu wil hij dat wijzigen, voor 3 wil hij geen notificatiemails meer ontvangen, maar voor 1 én 2 wel. Oftewel; het eindresultaat moet als volgt worden:

user 100 / project 1 / 1
user 100 / project 2 / 1

Dus ZONDER user 100 / project 3 / 1.


Op dit moment werkt alles, behalve het verwijderde van de uitgevinkte projecten. Het is een heel verhaal geworden, waarvoor mijn excuses, maar ik was bang dat het anders niet begrepen zou worden.

Alvast bedankt!
 
Laatst bewerkt:
Is het niet makkelijker om voor elke project waar die user aan mee werkt een record te hebben.

Wil diegene dan een notification dan heb je dat veld op 1, wil hij dat niet dan zet je die op 0.

Dus om jouw voorbeeld aan te houden.
--------------------------------------------------
Veronderstel dat User 100 aangemeld is bij 3 projecten. Eerder heeft hij zich aangemeld voor notificatiemails bij Project 1 en Project 3.
Code:
[Database]
user 100 / project 1 / 1
user 100 / project 2 / 0
user 100 / project 3 / 1
Nu wil hij dat wijzigen, voor 3 wil hij geen notificatiemails meer ontvangen, maar voor 1 én 2 wel.
Code:
[Database]
user 100 / project 1 / 1
user 100 / project 2 / 1
user 100 / project 3 / 0
 
Nee, BalusC kwam met een geniale oplossing.

PHP:
$notifArray = $_POST["notif"];
$notifString = implode(",", $notifArray);
		
$deleteq = "DELETE FROM notification WHERE ID_USER=$userid AND ID_PROJECT NOT IN ($notifString)";
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan