[perl] regel met variabelen uit database vullen

Pagina: 1
Acties:

  • Daniel304
  • Registratie: December 2000
  • Laatst online: 23-05 23:17
Ik heb een script dat intesief gebruik maakt van mysql queries nu wil ik het wat simpeler maken. ik loop tegen eht probleem op dat ik een regel tekst wilt opslaan waar een variabele in zit bijvoorbeeld.
code:
1
Hello world, the time is $hours : $minutes

$hours en $minutes hebben al een waarde en de boenstaande regel staat in de variabele $content.
nu heb ik ooit stukje gelezen waarin een push/pull methode wordt gebruikt... regular expressions wil ik hiervoor eigenlijk niet gebruiken...

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
maar wat is je vraag nu precies?

  • Daniel304
  • Registratie: December 2000
  • Laatst online: 23-05 23:17
sorry geen vraag geformuleerd... Ik wil dus de variabelen $minutes en $hour die in de string uit de database komen op vullen... op deze manier lukt het niet
code:
1
2
3
4
5
6
7
8
9
# in de functie Read_MySQL wordt maar 1 regel uit de database
# gehaald en in $content gezet deze regel bevat zelf ook variabelen
# "Hello world, the time is $hour : $minutes"
$content = &Read_MySQL("");
# makkelijke declaratie van uren en minuten
$hour = 2;
$minutes = 30;
#ff afdrukken
print $content;

helaas krijg je op de plekken van de variablen $hour en $minutes nu niets te zien ook al draai je ze om zoals hieronder zie je ze niet.
Perl:
1
2
3
4
5
6
7
8
9
# makkelijke declaratie van uren en minuten
$hour = 2;
$minutes = 30;
# in de functie Read_MySQL wordt maar 1 regel uit de database
# gehaald en in $content gezet deze regel bevat zelf ook variabelen
# "Hello world, the time is $hour : $minutes"
$content = &Read_MySQL("");
#ff afdrukken
print $content;

Ik wil dus dat er wel iets komt te staan

[ Voor 10% gewijzigd door Daniel304 op 28-04-2004 10:00 ]


  • Juup
  • Registratie: Februari 2000
  • Niet online
Dit is wel heel smerig. In de database staan dus strings zoals "Hello world, the time is $hours : $minutes"? Gadverdamme. Heb je dit zelf in mekaar genaaid of iemand anders?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Daniel304
  • Registratie: December 2000
  • Laatst online: 23-05 23:17
Het gaat om een tabel waar een aantal mysql Queries in staan. Dit zodat een admin deze queries handmatig kan wijzigen... Echter om die queries te laten werken in een dynamische omgeving moeten er een aantal WHERE 's in komen om ervoor te zorgen dat de juiste taal naar boven komt zoals hieronder...
MySQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
  COUNT(category_id) AS count,
  support_faq.*,
  support_category.id AS cat_id,
  support_category.category,
  support_category.language_id
     FROM
     support_faq,
     support_category
  WHERE
     support_faq.category_id = support_category.id
     support_faq.language = $language
  GROUP BY category_id


Als je een beter manier weet hoor ik het graag maar ik weet niet hoe ik hier omheen kan.

[ Voor 10% gewijzigd door Daniel304 op 05-05-2004 17:05 ]


  • phYzar
  • Registratie: November 2001
  • Laatst online: 14:37
je zoekt dus zoiets als eval(php)

Heeft perl niet zoiets?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Ik heb niet zo gek veel verstand van perl, maar kun je geen variabelen concatenaten (aan mekaar plakken dus)?
Juup schreef op 28 april 2004 @ 12:06:
Dit is wel heel smerig. In de database staan dus strings zoals "Hello world, the time is $hours : $minutes"? Gadverdamme. Heb je dit zelf in mekaar genaaid of iemand anders?
Lekker vriendelijk zijn we weer. :/

'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.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 25-05 20:56
Perl kent ook gewoon een eval construct waar je dat mee kunt doen (al moet je dan nog extra quotes toevoegen om je string te evalueren naar een string). Je bent dan wel gevoelig voor allerlei onverwachte fouten als er 'gekke' dingen in de database komen te staan.

Ik zou in dit geval eerder het gebruik van sprintf aanraden, als je van te voren weet welke argumenten een query heeft. In jouw voorbeeld zou je de query kunnen schrijven als "SELECT ... WHERE language=%1$s" en die $1 kun je dan invullen met iets als: sprintf($query, $language), waarmee de waarde van language ingevuld wordt. Je beperkt dan de substitutie tot vooraf bedachte waarden en je voorkomt daarmee dat vreemde gegevens in de database je hele programma verprutsen. De effecten van eval zijn in principe namelijk onbeperkt.

Ook dit vind ik niet echt een ideale oplossing persoonlijk. Queries zijn programmacode en programmacode hoort niet in een database thuis; een database is dus bedoeld voor de opslag van gegevens. Je queries zou je dus in een simpele situatie in je Perl code kunnen plaatsen. Iets 'beter' is misschien het gebruik van stored procedures, maar die roep je dan nog steeds vanuit Perl code aan.

Verwijderd

phYzar schreef op 05 mei 2004 @ 18:49:
je zoekt dus zoiets als eval(php)

Heeft perl niet zoiets?
Yep, Perl heeft ook een eval()

code:
1
2
3
4
5
my $uren=7;
my $minuten=4;
my $s='Het is nu $uren:$minuten\n';
eval("\$s=\"$s\"");
print $s;

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 25-05 20:56
Xenna: je bent er dan nog niet, want je moet de slashes en quotes in je string $s ook nog escapen.

  • Daniel304
  • Registratie: December 2000
  • Laatst online: 23-05 23:17
Kijk dat werkt beter.. ik gebruik meestal toch zoiets als
code:
1
my $s = qq|hallo wereld......$minutes....|;

scheelt een hoop escapen
Pagina: 1