Woorden met komma scheiden
Graag wens ik een script tag script te maken.
Het systeem is zoals dat van Wordpress en zovele andere websites.
Je schrijft een artikel.. En in een invoerveld vul je de bijhorende tags, gescheiden door een komma, in.
bvb:
phphulp, php boeken, php scripts, php tutorials
Nu, wat zoek ik.
- Een php functie zodat ik de tags apart heb (dus om ze te onderscheiden a.d.h.v. de komma)
- Om vervolgens iedere tag apart in een mysql tabel op te slaan
Dus met als resultaat:
id:1 tag:phphulp
id:2 tag:php boeken
id:3 tag:php scripts
id:4 tag:php tutorials
Kan iemand mij de stap in de goeie richting geven?
Of als er ergens een kant-en-klaar script als voorbeeld te bekijken is, mij hier dan op te wijzen?
Alvast bedank
Mvg
Olivier
Je kunt bijvoorbeeld voor kiezen om bij artikel (artikelnummer) een (tag_id) en (omschrijving) te maken.
Zorg dat je dan bijv bij het invoeren van die tags zelf al komma's gebruikt. Deze kun je dan exploden op komma's en ieder woord in db proppen:)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$ColorsInsert = '*'.implode('*',$_POST['colors']).'*';
$Query = "INSERT INTO colors VALUES ($ColorsInsert)";
?>
then if you want to search for any colors just SELECT with the LIKE operator:
<?php
$Query = "SELECT * FROM colors WHERE colors LIKE '%*red*%'";
?>
or if your want several colors;
<?php
$LookingForColors = array('red','green','yellow');
$WhereClause = "colors LIKE '%*".implode("*%' OR LIKE '%*",$LookingForColors).'*%'";
$Query = "SELECT * FROM colors WHERE $WhereClause";
?>
[/CODE]
$ColorsInsert = '*'.implode('*',$_POST['colors']).'*';
$Query = "INSERT INTO colors VALUES ($ColorsInsert)";
?>
then if you want to search for any colors just SELECT with the LIKE operator:
<?php
$Query = "SELECT * FROM colors WHERE colors LIKE '%*red*%'";
?>
or if your want several colors;
<?php
$LookingForColors = array('red','green','yellow');
$WhereClause = "colors LIKE '%*".implode("*%' OR LIKE '%*",$LookingForColors).'*%'";
$Query = "SELECT * FROM colors WHERE $WhereClause";
?>
[/CODE]
Gewijzigd op 01/01/1970 01:00:00 door Kevin de Jong
Eerst en vooral, om ze op te slaan in de database lijkt de beste manier mij om ze eerst afzonderlijk op te slaan in een array. Daarvoor kwam ik terecht op preg_split.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$str = 'php hulp, php tutorials, php boeken';
$chars = preg_split('/,/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($chars);
?>
$str = 'php hulp, php tutorials, php boeken';
$chars = preg_split('/,/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($chars);
?>
Dan kom ik met het volgende resultaat:
Array ( [0] => Array ( [0] => php hulp [1] => 0 ) [1] => Array ( [0] => php tutorials [1] => 9 ) [2] => Array ( [0] => php boeken [1] => 24 ) )
En nu met een foreach, ... (zoek ik nog uit) zal ik de verschillende arrays uitlezen, en afzonderlijk toevoegen aan de database.
Wim
Wat ik van plan is is het volgende:
tabel tags:
tags_id, tags_tag
(zorgen dat iedere tag maar éénmaal voorkomt in de database)
tabel artikeltag
artikeltag_id, artikel_id, tags_id
M.a.w.: Het id van het artikel, met het id van de tag die er bijhoort.
Dus als een artikel 5 tags heeft, dan zijn dat vijf records in de tabel artikeltag.
Alvast bedankt.
Mvg
Olivier
Gewijzigd op 01/01/1970 01:00:00 door Olivier
En heb zo de fucntie explode gebruikt ipv implode.
Volgens mij heb ik het.
Code (php)
Hetgeen resulteert in:
Array ( [0] => php boeken [1] => php hulp [2] => php tutorials )
En om elke array apart te krijgen.
I.p.v. de tag te echo'en slaan we hem hier dus op in een database.
Alvast bedankt voor jullie hulp, ik kan verder nu.
Gelieve er mij op te wijzen mocht er een betere manier bestaan.
Mvg
Olivier
Anders kun je niet meerdere tags aan 1 artikel koppelen...
Dat is wat ik bedoel met normaliseren ;-)
Ik denk dat ik het antwoord daarop hier wel in zal vinden?
http://www.phphulp.nl/php/print/3/426/0/tutorial/
Mvg
Olivier
Indien je daarover vragen hebt, stel ze gerust :-)