Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] Eerste relevante bbcode zoeken en inhoud weergeven

Pagina: 1
Acties:

  • floriske.nl
  • Registratie: Januari 2002
  • Laatst online: 11-11 18:43

floriske.nl

Wie ik? Echt niet!

Topicstarter
Om de eerste afbeelding uit forumtopic (phpbb) op een externe pagina weer te kunnen geven ben ik op zoek naar een mogelijkheid om een post te doorzoeken op de eerste uit diverse typen bbcode tags

De image tags die mogelijk zijn zijn:

code:
1
2
3
4
5
6
7
[attachment{RANDOM STRING}]naamafbeelding.jpg[/attachment{RANDOM STRING}]

[img{RANDOM STRING}]url/naamafbeelding.jpg[/img{RANDOM STRING}]

[img{RANDOM STRING}]/forum/gallery/image.php?album_id={GETAL}&image_id={GETAL}&view=no_count&display=popup[/img{RANDOM STRING}]

[album{RANDOM STRING}]261[/album{RANDOM STRING}]



De {RANDOM STRING} bestaat uit een unieke string per forum post.

Edit: Voorbeelden

[attachment=8:1tm6vg0m]SNC00054.jpg[/attachment:1tm6vg0m]

[img:k1e0fjhr]http://imageshack.us/a/img833/1518/sav4g.th.jpg[/img:k1e0fjhr]

[album:1hqmkjzw]261[/album:1hqmkjzw]

De inhoud van de eerste post wordt opgehaald met:

code:
1
2
$first_post_content_sql = 'SELECT post_text FROM ' . POSTS_TABLE . '
    WHERE post_id='.$topic_first_post_id.'';


Maar nu ........ schiet mijn kennis te kort om het resultaat van deze query

• te doorzoeken op de eerste van bovenstaande 4 image tags
• indien het gaat om een attachment kijken of het een afbeelding is
• op basis van het soort afbeelding (attachment, img of album) de bestandslocatie op te zetten
• te kijken of de afbeelding daadwerkelijk bestaat
• van die tag de inhoud weer te kunnen geven/te kunnen verwerken.

Is dit met een eenvoudig stukje code te doen? Zo niet dan ga ik even kijken of ik iemand kan vinden die dit voor me op will zetten.

[ Voor 15% gewijzigd door floriske.nl op 16-10-2012 13:14 ]


  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn nna 👌

Kijk even in de documentatie van MySQL: http://dev.mysql.com/doc/refman/5.1/en/regexp.html

Dan moet je voor die tags een reguliere expressie schrijven, dan knoop je het met wat OR statements aan elkaar en dan heb je al een begin.

Succes.

don't be afraid of machines, be afraid of the people who build and train them.


  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Je kan ook een bestaande parser gebruiken, want dit is natuurlijk niet de eerste keer dat iemand op de wereld een bb tag parser nodig heeft...

  • floriske.nl
  • Registratie: Januari 2002
  • Laatst online: 11-11 18:43

floriske.nl

Wie ik? Echt niet!

Topicstarter
Thx, maar dat gaat in beide gevallen m'n petje te boven en kost me teveel tijd om het eea goed uit te zoeken, dan ga ik even kijken of ik iemand kan vinden die me verder kan/wil helpen.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Dus je opent wel een topic maar zodra er daadwerkelijk geprogrammeerd moet worden gaat het je boven de pet en geef je het op? Misschien moet je dan gewoon niet proberen te programmeren? ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • floriske.nl
  • Registratie: Januari 2002
  • Laatst online: 11-11 18:43

floriske.nl

Wie ik? Echt niet!

Topicstarter
NMe schreef op dinsdag 16 oktober 2012 @ 13:37:
Dus je opent wel een topic maar zodra er daadwerkelijk geprogrammeerd moet worden gaat het je boven de pet en geef je het op? Misschien moet je dan gewoon niet proberen te programmeren? ;)
Eerlijk en NOFI: beetje flauwe reactie dit

Ik vroeg niet voor niets of het met een "eenvoudig" stukje code te doen was, het opzetten van een bbcode parser of mezelf verdiepen in regex (waar in dit geval niet eens tijd voor is) is geen eenvoudig stukje code als je er nog nooit mee gewerkt hebt. En ik gaf bovendien in mijn post al duidelijk aan dat ik dan op zoek ging naar iemand die me kan helpen.

Maar goed, het blijkt wel dat er meer bij komt kijken dan ik gedacht had en in dat geval ga ik geen kostbare tijd verspillen om iets aan te leren voor eenmalig gebruik terwijl anderen hier veel beter in- en dagelijks mee bezig zijn.

[ Voor 21% gewijzigd door floriske.nl op 16-10-2012 13:49 ]


  • lauwsa
  • Registratie: Juli 2010
  • Laatst online: 08:40
Nou, dit kan altijd nog van pas komen hoor. Ik geef toe dat ik zelf er ook niet veel in verdiept heb maar het is een handige manier voor bijvoorbeeld validatie. Je komt het zo nu en dan eens tegen en het is meestal een snelle, korte en makkelijke oplossing die anders best uitgebreid "geschreven" moeten worden.

Neem bijvoorbeeld email validatie, die ook nog van een bepaalde provider moet komen. Dit kun je hier bijvoorbeeld erg kort mee opschrijven.

Ik wil trouwens niet zeggen dat je het moet leren, maar ik wil je er alleen op wijzen dat het geen verspilde moeite is als je er ooit tijd voor hebt.

Edit:
Je kan altijd met like %% proberen als je het erg makkelijk wilt doen, en dan via php alles controleren. Maar dit is niet echt een hele goede manier. Dan kan kijken als het om een afbeelding gaat door te kijken welke extensie het heeft. Je kan dan met file_exists kijken als die bestaat.

[ Voor 34% gewijzigd door lauwsa op 16-10-2012 14:01 ]


  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
floriske.nl schreef op dinsdag 16 oktober 2012 @ 13:42:
Maar goed, het blijkt wel dat er meer bij komt kijken dan ik gedacht had en in dat geval ga ik geen kostbare tijd verspillen om iets aan te leren voor eenmalig gebruik terwijl anderen hier veel beter in- en dagelijks mee bezig zijn.
Regular expressions zijn wel gewoon iets wat iedere programmeur zou moeten beheersen dus het leren van RE's is absoluut geen tijdsverspilling.
lauwsa schreef op dinsdag 16 oktober 2012 @ 13:51:
Neem bijvoorbeeld email validatie, die ook nog van een bepaalde provider moet komen. Dit kun je hier bijvoorbeeld erg kort mee opschrijven.
Laat e-mail validatie nou net iets zijn waar RE's niet erg voor geschikt zijn.

https://niels.nu


  • lauwsa
  • Registratie: Juli 2010
  • Laatst online: 08:40
Jammer, dan was dat een slechte gok, haha. Ik zie wel vaak dan mensen het daar voor gebruiken. Maar goed, ik heb er tot nu toe nog niet veel aandacht aan besteed. Zal ik maar eens gaan doen.

Er zijn trouwens zat redenen om het te leren:
  • er zijn erg zijn veel talen die het ondersteunen;
  • er zitten weinig fouten in aangezien het veel gebruikt wordt;
  • Zo ver ik weet is de syntacs in elke taal het zelfde.
  • etc etc
Hier staat nog een hele lijst:
http://www.websiterepairguy.com/articles/re/12_re.html

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 23-11 20:56

Ventieldopje

I'm not your pal, mate!

floriske.nl schreef op dinsdag 16 oktober 2012 @ 13:42:
[...]

Eerlijk en NOFI: beetje flauwe reactie dit

Ik vroeg niet voor niets of het met een "eenvoudig" stukje code te doen was, het opzetten van een bbcode parser of mezelf verdiepen in regex (waar in dit geval niet eens tijd voor is) is geen eenvoudig stukje code als je er nog nooit mee gewerkt hebt. En ik gaf bovendien in mijn post al duidelijk aan dat ik dan op zoek ging naar iemand die me kan helpen.

Maar goed, het blijkt wel dat er meer bij komt kijken dan ik gedacht had en in dat geval ga ik geen kostbare tijd verspillen om iets aan te leren voor eenmalig gebruik terwijl anderen hier veel beter in- en dagelijks mee bezig zijn.
Als er een simpel stukje code voor was en dus mensen die het vaker nodig gehad hebben dan had je dit veel sneller kunnen vinden op Google. Aangezien dat dus niet het geval is behalve complete BB-code parser classes maar je dat kennelijk boven de pet gaat ... wat verwacht je dan van ons?

Dat wij zeggen nee er is geen makkelijk stukje code, zoek het maar uit? Dit is een forum waar mensen elkaar helpen en over het algemeen veel voor elkaar over hebben om dingen uit te leggen en voor te doen. Voor de rest ... google ;)

Wat mij betreft lijkt het gewoon inderdaad alsof je met dingen bezig bent waar je geen verstand van hebt. Regular expressions zijn een wel bekend begrip en ook zoiets als een (bb-code) parser is de normaalste zaak van de wereld.

Als je dus hulp wil met hoe dit op te lossen kan dat maar daar zal redelijke kennis en tijd voor nodig zijn.
lauwsa schreef op dinsdag 16 oktober 2012 @ 14:42:
Jammer, dan was dat een slechte gok, haha. Ik zie wel vaak dan mensen het hier voor gebruiken. Maar goed, ik heb er tot nu toe nog niet veel aandacht aan besteed. Zal ik maar eens gaan doen.

Er zijn trouwens zat redenen om het te leren:
  • er zijn erg zijn veel talen die het ondersteunen;
  • er zitten weinig fouten in aangezien het veel gebruikt wordt;
  • Zo ver ik weet is de syntacs in elke taal het zelfde.
  • etc etc
Hier staat nog een hele lijst:
http://www.websiterepairguy.com/articles/re/12_re.html
  • er zijn erg zijn veel talen die het ondersteunen;
  • er zitten weinig fouten in aangezien het veel gebruikt wordt; (onzin argument ;))
  • Zo ver ik weet is de syntacs in elke taal het zelfde. (Nope, er zijn verschillende dialecten)
  • etc etc

[ Voor 22% gewijzigd door Ventieldopje op 16-10-2012 14:44 ]

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
lauwsa schreef op dinsdag 16 oktober 2012 @ 14:42:
Jammer, dan was dat een slechte gok, haha. Ik zie wel vaak dan mensen het daar voor gebruiken. Maar goed, ik heb er tot nu toe nog niet veel aandacht aan besteed. Zal ik maar eens gaan doen.
Bekend gezegde: Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

Regular expressions hebben veel nuttige toepassingen maar worden nog meer misbruikt voor toepassingen waar ze eigenlijk niet geschikt voor zijn. Voor 'in het wild' mailadressen moet je eigenlijk alleen maar checken of er een apestaart in zit, en of er in de hostname een punt voorkomt. Valideren of het een correct mailadres is doe je gewoon door ze een mailtje met een activatielink te sturen.
Er zijn trouwens zat redenen om het te leren:
  • er zijn erg zijn veel talen die het ondersteunen;
  • er zitten weinig fouten in aangezien het veel gebruikt wordt;
  • Zo ver ik weet is de syntacs in elke taal het zelfde.
  • etc etc
Hier staat nog een hele lijst:
http://www.websiterepairguy.com/articles/re/12_re.html
Syntax ;)

Er zijn overigens verschillende dialecten van REs en niet elk platform understeunt elke optie, maar in de basis zijn ze aardig gelijk.

https://niels.nu


  • lauwsa
  • Registratie: Juli 2010
  • Laatst online: 08:40
"Trekt zich terug uit de reguliere expressie discussie aangezien ik niet weet waar ik over praat :P".

Van die mail validatie heb je inderdaad helemaal gelijk. Het was inderdaad een krom voorbeeld.

  • floriske.nl
  • Registratie: Januari 2002
  • Laatst online: 11-11 18:43

floriske.nl

Wie ik? Echt niet!

Topicstarter
Ventieldopje schreef op dinsdag 16 oktober 2012 @ 14:43:
[...]

Dit is een forum waar mensen elkaar helpen en over het algemeen veel voor elkaar over hebben om dingen uit te leggen en voor te doen. Voor de rest ... google ;)

Wat mij betreft lijkt het gewoon inderdaad alsof je met dingen bezig bent waar je geen verstand van hebt.

[...]
Offtopic: Ik reageerde niet op de overige reacties, maar op de opmerking van NMe. Ik noem een dergelijke opmerking geen "helpen" maar kleineren, vandaar dat ik zo reageer. Ik ben al ruim 10 jaar een actieve tweaker en het enige forum (waar ik ook nog eens zelden kom) waar ik dit al meerdere malen meegemaakt heb in 1 van mijn posts is hier in PGR.

Wat betreft je opmerking over zaken waar ik geen verstand van heb: als ik er wel verstand van zou hebben zou ik er ook niet naar hoeven vragen?

Maar goed, zoals Hydra al min of meer aangeeft: verkeerd programmeren kan tot veel grotere problemen leiden en in dit geval zou eea op korte termijn moeten functioneren waardoor er geheid fouten in gaan sluipen als ik in deze tijd mezelf regular expressions eigen moet maken én ze toe moet gaan passen.

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
floriske.nl schreef op dinsdag 16 oktober 2012 @ 14:57:
Offtopic: Ik reageerde niet op de overige reacties, maar op de opmerking van NMe. Ik noem een dergelijke opmerking geen "helpen" maar kleineren, vandaar dat ik zo reageer.
Er stond een ;) smiley achter, dan moet je zo'n opmerking niet zo serieus nemen. Hij maakt wel gewoon een goed punt namelijk, je dumpt een beetje een probleem zonder oplossing. Je zegt zelf dat je kennis te kort schiet; dan betekent dat dus gewoon dat je moet zorgen dat je die kennis krijgt. Ik ben het er gewoon helemaal mee eens dat het lijkt alsof je vraagt om een uitwerking van je probleem.

https://niels.nu


  • floriske.nl
  • Registratie: Januari 2002
  • Laatst online: 11-11 18:43

floriske.nl

Wie ik? Echt niet!

Topicstarter
Ik vraag of er een eenvoudige oplossing is (welke ik me maar al te graag eigen zou willen maken) en geef duidelijk aan dat indien dit niet het geval is ik op zoek ga naar iemand die me kan en wil helpen. Ik vraag alles behalve een kant- en klare oplossing.

Naar blijkt is er geen eenvoudige oplossing voor iemand met mijn beperkte kennis van mysql en php dus dan ga ik over op plan B, niet zo ingewikkeld volgens mij ;)

Maar goed, voor dat we helemaal offtopic gaan: ik weet genoeg :w

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Smileys zeggen bij mij niet altijd evenveel, ik gebruik die te pas en te onpas. :P

Ik probeerde verder niet kleinerend te zijn maar aan te stippen dat je erg makkelijk de handdoek in de ring gooit. Zo'n regular expression hoeft niet meer dan een regeltje te omvatten en een parsertje in PHP dat alleen maar deze check hoeft te doen omvat niet meer dan een regel of 10-20. Het opgeven voordat je eraan begint is voor een programmeur sowieso nooit een goeie instelling en ik geloof er niet in dat iemand die niet de tijd neemt om nieuwe dingen te leren met de goeie dingen bezig is als hij wel in code duikt. Nogmaals, dat is niet lullig bedoeld maar een constatering. Uiteindelijk verspil je daar vooral je eigen tijd mee en dat probeer je juist te voorkomen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • floriske.nl
  • Registratie: Januari 2002
  • Laatst online: 11-11 18:43

floriske.nl

Wie ik? Echt niet!

Topicstarter
Ok point taken! Het probleem is in dit geval inderdaad gewoon het gebrek aan tijd om me er in te verdiepen.

[ Voor 152% gewijzigd door floriske.nl op 19-10-2012 16:01 ]


  • floriske.nl
  • Registratie: Januari 2002
  • Laatst online: 11-11 18:43

floriske.nl

Wie ik? Echt niet!

Topicstarter
Om dit topic toch maar even compleet te maken: van iemand met wat meer MYSQL ervaring kreeg ik het advies om dit toch echt niet met MYSQL regular expressions te doen omdat deze niet "krachtig" genoeg waren.

Hierop heb ik toch zelf nog maar een poging gedaan met php re's en de volgende code werkt naar behoren:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    $first_post_content_result = $db->sql_query('SELECT post_text FROM ' . POSTS_TABLE . '
    WHERE post_id='.$topic_first_post_id.'');  
    
    $first_post_content_row = $db->sql_fetchrow($first_post_content_result);
    
    $first_post_content = $first_post_content_row['post_text'];
    
    if (preg_match_all('/\[[^\]]+]([^[]+)\[\/[^\]]+]/', $first_post_content, $arr))
    {       
        foreach ($arr[0] as $key => $val) 
        {               
            // image
            if (preg_match('/(\[img)/',$val))
            {
                $first_img = $arr[1][$key];;
                break;
            }
            // album
            else if (preg_match('/(\[album)/',$val))
            {
                $clean_val = $arr[1][$key]; 
                $first_img = $phpbb_root_path.'gallery/image.php?mode=thumbnail&image_id='.$clean_val;
                break;
            }
            else if (preg_match('/(\[attachment)/',$val))
            // attachment
            {
                $clean_val = $arr[1][$key];
                $clean_val = preg_replace('/<[^\>]+>/', '', $clean_val);
                        
                $included_attachment_result = $db->sql_query("SELECT * FROM $attachments_table
                WHERE real_filename='$clean_val'");  
                
                $included_attachment_row = $db->sql_fetchrow($included_attachment_result);
                
                $mimetype = $included_attachment_row['mimetype'];
                
                if (preg_match('/(image)/',$mimetype))
                {
                    $img_id = $included_attachment_row['attach_id'];
                    $first_img = $phpbb_root_path.'download/file.php?id='.$img_id.'&t=1';
                    break;
                }               
            }
        }       
    }


nu nog even eea vereenvoudigen

[ Voor 4% gewijzigd door floriske.nl op 19-10-2012 17:03 ]

Pagina: 1