Meerdere columns bij '1' in de array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP er

PHP er

22/01/2016 00:43:25
Quote Anchor link
Hoi,

Ik heb in mijn user-tabel de kolommen cat1, cat2, cat3, cat4, cat5 en cat6.

Bij mijn zoekformulier maak ik gebruik van het selecteren op deze velden. Het zoekformulier is nog op basis van checkboxen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<form action="search.php" method="post">
 Man zoekt vrouw:   <input name="category[]" type="checkbox" value="straightmen"  /><br>
 Vrouw zoekt man:   <input name="category[]" type="checkbox" value="straightwomen"  /><br>
 Vriendschap:   <input name="category[]" type="checkbox" value="friendship" /><br>
 Man zoekt man :  <input name="category[]" type="checkbox" value="gaymen"  /><br>
 Vrouw zoekt vrouw :  <input name="category[]" type="checkbox" value="gaywomen"  /><br>
 Escort;   <input name="category[]" type="checkbox" value="escort"  /><br>
<input type="submit" name="submit" value="Filter opslaan">
</form>


En hoe die de sql dan aanmaakt voor in de while:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$clause = " WHERE ";//Initial clause
$adsql="SELECT * FROM `ads`  ";//Query stub
if(isset($_POST['submit'])){
    if(isset($_POST['category'])){
        foreach($_POST['category'] as $c){
            if(!empty($c)){
                $adsql .= $clause."`category` = '{$c}'";
                $clause = " OR ";//Change  to OR after 1st WHERE
            }  
        }
    }
}


$adsql2 = mysql_query($adsql);


maar, hoe kan ik ook zoiets maken dat hij zoekt op cat1, cat2, cat3, cat4, cat5 en cat6 wanneer deze columns op waarde '1' staan?
 
PHP hulp

PHP hulp

24/11/2024 16:01:42
 
- Ariën  -
Beheerder

- Ariën -

22/01/2016 00:56:05
Quote Anchor link
Velden, tabellen en databases horen niet genummerd te zijn. Wat doe je nou als je straks ook cat7 t/m cat15 krijgt?
Ga jij dan je hele applicatie dan aanpassen?

Ik weet zeker dat het zinvoller is om nu te beginnen aan een genormaliseerde database met een koppeltabel, waarin de id's van je bron en doelen staan.

Let er tevens op dat de mysql_*()-functies verouderd zijn en dat MySQLi of PDO aan wordt geraden.

Ook zegt $adsql2 niet veel wat het doet: Zorg voor duidelijke naamgeving. Ook foutafhandeling is zeker een must bij queries.
Gewijzigd op 22/01/2016 00:57:13 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

22/01/2016 00:58:01
Quote Anchor link
Want hoe wijkt dat af van wat je nu selecteert met je query?

Ik zou trouwens overwegen om een soort van koppeltabel te maken om die zut op te slaan, in plaats van cat1, cat2, cat3 etc... En die categorieën ook voorzien van een uniek (auto increment) nummer waar je aan kunt refereren.
 
Ben van Velzen

Ben van Velzen

22/01/2016 01:06:27
Quote Anchor link
En vergeet uiteraard ook de escaping etc niet. Als ik dit zo zie is dit een nachtmerrie die alleen npg even op zich laat wachten. En nee, "Ik ben aan het ontwikkelen, de escaping komt later" is geen goed argument. Hoe vaak ik dat heb horen zeggen en het niet gebeurd is is te veel om te tellen.
 
PHP er

PHP er

22/01/2016 13:28:41
Quote Anchor link
Hmm dank voor alle input! Heb nog geen ervaring met het scripten van zoekformulieren vandaar, haha.

Wat zou het stukje script worden voor de query, op basis van de cat1 t/m cat6 waar de waarde 0 of 1 is in de tabel 'users', zodat ik die query kan gebruiken in een while?

Ik hoop dat iemand mij kan helpen.
 
- Ariën  -
Beheerder

- Ariën -

22/01/2016 13:39:05
Quote Anchor link
Elke user kan dus diverse categorieern krijgen?
Als je daar nou een tabel categories_users aanmaakt, waarbij je per record het IDnummer van de categorie in gebruikt en de IDnummer van de user, dan kan je met een simpele SELECT-query eenvoudig selecteren welke categorieen iemand heeft.

In dit voorbeeld kan je zien welke catID's user 42 heeft.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT catID
    FROM categories_users
WHERE userID=42;
Gewijzigd op 22/01/2016 13:39:58 door - Ariën -
 
PHP er

PHP er

22/01/2016 13:56:04
Quote Anchor link
- Ariën - op 22/01/2016 13:39:05:
Elke user kan dus diverse categorieern krijgen?
Als je daar nou een tabel categories_users aanmaakt, waarbij je per record het IDnummer van de categorie in gebruikt en de IDnummer van de user, dan kan je met een simpele SELECT-query eenvoudig selecteren welke categorieen iemand heeft.

In dit voorbeeld kan je zien welke catID's user 42 heeft.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT catID
    FROM categories_users
WHERE userID=42;


Nee, er zijn in totaal 6 categorieën waarvan de gebruiker kan aangeven wat de waarde is van die categorie (0 is nee, 1 is ja).

De 6 categorieën zijn dus bij iedereen hetzelfde, maar of die aan/uit staan kunnen ze aangeven in hun accountinstellingen.

Het stukje code voor het zoekformulier wordt dan uit de database gehaald om de categorieën te selecteren van de advertenties (tabel 'ads' kolom 'category').

Dus stel cat2 is bij gebruiker 1 op '0', moet hij niet de ads pakken waarbij category, 'cat2' is.

Snap je?
 
- Ariën  -
Beheerder

- Ariën -

22/01/2016 14:05:39
Quote Anchor link
Maar mijn manier is een verbeterde opbouw. Je moet geen velden gaan nummeren, je structuur zo veel mogelijk moet statisch zijn, niet dynamisch.

Dus gooi de huidige manier overboord, en stap over op een genormaliseerde opbouw. Nu kan het nog, voordat je je straks in je voet schiet.
Gewijzigd op 22/01/2016 14:06:12 door - Ariën -
 
Ward van der Put
Moderator

Ward van der Put

22/01/2016 14:21:08
Quote Anchor link
Ariën heeft gelijk: ook al zijn er 'maar' zes categorieën en zullen die 'voorlopig' of 'waarschijnlijk' niet veranderen, dan nog is dit nu eenmaal een één-op-veel-relatie tussen gebruikers en categorieën. Die hoor je uit te splitsen over meerdere tabellen.
 
PHP er

PHP er

22/01/2016 14:23:37
Quote Anchor link
Hmm, wat ik ook wel eens zie is zo'n tabel bijvoorbeeld tabel 'users' kolom 'category' en dat er bijvoorbeeld in die kolom dan 'category1, category2, category3' met komma's etc staat.

Is dat een optie? En hoe kan ik dan de query daarvoor maken, en een submit-formuliertje met checkboxen om die keuzes in tabel 'users' kolom 'category' te zetten?
 
- Ariën  -
Beheerder

- Ariën -

22/01/2016 14:27:20
Quote Anchor link
Dat is ook geen goede optie, daarmee bereik je niet veel meer mee, eigenlijk meer extra code voor bij het aanpassen.

De beste oplossing is: Normaliseren. Je zal dan zien dat je ook makkelijkere queries kan schrijven.
Gewijzigd op 22/01/2016 14:33:01 door - Ariën -
 



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.