String in alle records vervangen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Ariën  -
Beheerder

- Ariën -

03/12/2018 15:31:18
Quote Anchor link
Graag was ik op zoek naar de 'best-practice' om een deel van een string aan te passen in de records van een tabel.

Dit wil ik doen omdat de afbeeldingen een andere bestandsnaam krijgen. Ik dacht zelf (nog ongetest) aan zo een soort query.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
UPDATE nieuws
SET
    content = REPLACE(content,
        oude_image.jpg,
        nieuwe_image_0656.jpg)


Echter loop ik tegen het probleem aan dat in de <img src=""> tag bijvoorbeeld a.jpg staat. En dat er ook bijv. banana.jpg in kan staan. Dit moet dus genegeerd worden.

Wat is de beste manier om dit aan te pakken? De REPLACE moet namelijk alleen plaatsvinden in de hele src-attribuut.
Gewijzigd op 03/12/2018 15:32:17 door - Ariën -
 
PHP hulp

PHP hulp

08/11/2024 23:14:11
 
Thomas van den Heuvel

Thomas van den Heuvel

03/12/2018 15:50:34
Quote Anchor link
Ik weet niet wat de beste manier is, maar wellicht is een betere manier een indirecte koppeling naar je media. Je maakt bijvoorbeeld een soort van UBB-code die vervolgens linkt naar een afbeelding, bijvoorbeeld [image=4]omschrijving[/image]. Die 4 wijst dan naar de daadwerkelijke afbeelding. Je hebt dan zowel een kolom voor deze UBB-variant, en je zou in een andere kolom een HTML-variant kunnen cachen. Wat je dan doet is gewoon de cache flushen zodat de eerste persoon die dat bericht bekijkt dan een cache-update triggert. Je hoeft dan dus nooit meer specifieke instanties te gaan zoeken maar als dit soort wijzigingen optreden gooi je gewoon de cache leeg en klaar.

Het probleem ontstaat dus in eerste instantie door hard coding. Als je deze hard coding wegneemt, is het vervolgprobleem, wat hier in feite een symptoom van is, ook verdwenen.
Gewijzigd op 03/12/2018 15:52:07 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

03/12/2018 15:59:00
Quote Anchor link
Dat is een mooie oplossing maar momenteel niet echt triviaal. Wel leuk voor een vervolgproject. (of ik moet mijn roadmap weer uitbreiden en planning omgooien waar ik echt geen zin in heb :p )

Voor nu wil ik de bestandsnamen aanpassen. Ik dacht aan DOMdocument, en het replacewerk dan niet door SQL te doen, maar met een toffe functie binnen deze standaard class.

Of is er nog wat simpelers?
Gewijzigd op 03/12/2018 16:00:20 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

03/12/2018 19:03:14
Quote Anchor link
- Ariën - op 03/12/2018 15:31:18:
De REPLACE moet namelijk alleen plaatsvinden in de hele src-attribuut.

Dan heb je daar al min of meer het antwoord - neem de quotes ook mee :).
 
- Ariën  -
Beheerder

- Ariën -

03/12/2018 19:09:16
Quote Anchor link
Inderdaad, maar kan dit ook simpel met een ander truukje in SQL of is DOMdocument effectiever en handiger?
Gewijzigd op 03/12/2018 19:11:51 door - Ariën -
 
Rob Doemaarwat

Rob Doemaarwat

03/12/2018 19:53:49
Quote Anchor link
Ik weet niet welke MySQL versie je zit, maar vanaf v8 kun je lekker met regex-en aan de gang: https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-replace
 
- Ariën  -
Beheerder

- Ariën -

03/12/2018 20:06:19
Quote Anchor link
Hm, dat moet wel goed komen dan. Zo te zien zit het ook in MariaDB
 
Thomas van den Heuvel

Thomas van den Heuvel

03/12/2018 22:30:40
Quote Anchor link
Wat is er eenvoudiger dan de quotes meenemen in de vervanging? Een regex doet even veel/weinig als een REPLACE in jouw case?
 
- Ariën  -
Beheerder

- Ariën -

03/12/2018 22:48:21
Quote Anchor link
Ik ga er mee aan de slag.
 
Rob Doemaarwat

Rob Doemaarwat

04/12/2018 19:12:39
Quote Anchor link
@Thomas: als de quotes altijd consistent zijn is een REPLACE inderdaad beter/sneller/eenvoudiger. Maar als er bijvoorbeeld enkele en dubbele quotes zijn gebruikt, of bepaalde afbeeldingen met een bepaalde prefix wel/niet moeten worden vervangen, dan kun je met een regex net even dat beetje meer doen.
 
Thomas van den Heuvel

Thomas van den Heuvel

04/12/2018 19:27:06
Quote Anchor link
Quote:
Maar als er bijvoorbeeld enkele en dubbele quotes zijn gebruikt

Als er geen lijn in de HTML zit is er geen enkele garantie dat een regexp je gaat redden, het probleem ligt dan toch echt tussen de spreekwoordelijke Stoel en het Toetsenbord.

Quote:
of bepaalde afbeeldingen met een bepaalde prefix wel/niet moeten worden vervangen

Maar dan ben je dus naar patronen op zoek, en vervang je waarschijnlijk ook meerdere bestanden met verschillende namen in welk geval een regexp natuurlijk geschikter is voor deze klus.
Gewijzigd op 04/12/2018 19:28:30 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

04/12/2018 19:37:32
Quote Anchor link
Thanks. Ik ga eerst even analyseren hoe de quotes er gebruikt worden.
Gezien ik al tijden een editor gebruik, zal het naar mijn idee wel meevallen. :-)
 



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.