Input controleren van keuzes uit een lijst.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark Hogeveen

Mark Hogeveen

07/11/2014 22:29:25
Quote Anchor link
Ik heb een zoekoptie gemaakt waarbij je producten kunt zoeken. De zoekresultaten komen in een lijst, je kunt met een checkbox de resultaten kiezen. Als je op een button klikt worden de aangevinkte resultaten toegevoegd aan een selectie. De selectie wordt opgeslagen in een session. Als je klaar bent met zoeken kun je de producten die in de sessie staan bewerken, zoals in een productgroep zetten, korting instellen etc. De bewerkingen gelden voor alle producten van de huidige selectie.
Eerst deed ik alleen de product ID's opslaan in de sessie, dus met checkboxes alleen een ID naar de server sturen. Als je nu op de pagina's bezig bent met bewerken, dan is er geen lijst te zien met de producten die je had geselecteerd.
Ik wil dus graag aan de zijkant een lijst zetten met (de namen van) de producten die in de sessie staan.
Wat is de beste manier om dit te doen? Ik deed dus alleen de ID's gebruiken als input. Zal ik de ID's + productnaam nu als input nemen? Dan deze naam nog controleren met een query of het een geldig ID en naam is (en die bij elkaar horen)?
Nu doe ik ook niet de ID's controleren, dus een verzonnen ongeldig ID als input zal gewoon in de sessie worden gezet. Ik controleer wel of de input numeriek is. Ik heb hier wel vaker over nagedacht, maar ik dacht: bij de query's om een bewerking te doen op de ID's in de sessie kan ik gewoon de niet-bestaande ID's overslaan.

Stel dat meerdere checkboxes worden aangevinkt en ik zou controleren of de ID's in de database voorkomen, dan zou het dus kunnen dat dit 30 queries kost, alleen voor controle. Ik dacht er ook al aan om de lijst waaruit je kunt kiezen in een sessie op te slaan met de mogelijke ID's en namen die op dat moment in de zoekresultaten staan. Maar dan krijg je weer heel grote sessies.
 
PHP hulp

PHP hulp

21/11/2024 16:03:05
 
Frank Nietbelangrijk

Frank Nietbelangrijk

07/11/2014 23:32:10
Quote Anchor link
30 queries? Wat dacht je hiervan?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$ids
= implode(',',$selection);  
$sql = "SELECT id FROM galleries WHERE id IN ($ids)";
?>

vervolgens doe je if(count($selection) == mysql_num_rows($result)) om te checken of ze allemaal gevonden zijn.

Maar het belangrijkste:
Als je data in de session bewaart dan gaat dat verouderen. Zeker in een bewerktool waar jij over spreekt.

1) artikel x wordt opgeslagen in de sessie
2) artikel x wordt bewerkt en krijgt een andere omschrijving
3) artikel x wordt met een UPDATE gewijzigd in de database

De data in de sessie is nu verouderd. Hou het makkelijk voor jezelf en haal het gewoon iedere keer uit de database. Je merkt daar niets van.


Oh ja .. grote sessies.. Laat me niet lachen. We hebben gigabytes aan geheugen anno 2014. Totaal geen probleem.
 
Eddy E

Eddy E

08/11/2014 08:04:00
Quote Anchor link
Ik heb weinig toe te voegen aan Franks bericht: wel zou ik de ID's in je sessie bewaren (en meer niet, dus geen prijzen/namen etc).
En na je update houd je de sessie (van ID's) dus nog vast.
Pas als je een nieuwe selectie gaat maken, gooi je dat stukje sessie weg.
 
Willem vp

Willem vp

08/11/2014 11:08:10
Quote Anchor link
Ik zou de geselecteerde ID's bijhouden in een aparte tabel in de database en koppelen aan het sessie-id (indien de gebruiker niet is ingelogd) of het userid (indien de gebruiker wel is ingelogd). Je kan dan met een join alle informatie over de geselecteerde producten ophalen.
 
Mark Hogeveen

Mark Hogeveen

11/11/2014 21:36:29
Quote Anchor link
Ik heb de volgende opbouw:
Database tabel die 2 kolommen heeft, user_id en product_id
De tabel bewaart de geselecteerde producten. Elke rij met het user_id en een bijbehorend product_id is een geselecteerd product.
bijvoorbeeld:
user_id | product_id
123 | 9281
123 | 9249
123 | 9245
etc...

Dan heb ik de database tabel, waar alle producten in staan (product_id, naam, beschrijving).
Ik heb al vaker met JOIN geprobeerd, maar het blijft me verwarrend.
Ik wil nu met een query alle producten ophalen die in de tabel staan van geselecteerde producten (user_id | product_id) en waarvan het user_id 123 is, dan moet weer met het product_id elk product op worden gehaald van de producten tabel, om zo de naam en beschrijving te krijgen.
Ik weet dat dit kan met JOIN, maar ik doe iets verkeerd.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.