ugrás a tartalomhoz

Változó értékének behelyettesítése stringbe

teamtom · 2007. Ápr. 28. (Szo), 13.54
Kedves PHP Guruk,

azt tudom, hogy a duplaidézőjelbe írt sztringben megbújó változók értéke behelyettesítődik,
de mi van akkor, ha én a sztringemet egy függvényhívás eredményeképpen kapom?

Ez esetben a behelyettesítés nem megy végbe!
  1. require_once('lib/mysql.php');  
  2.   
  3. $mysql = new Mysql($server,$username,$password,$dbname);  
  4.   
  5. $fullname = "lacafaca";  
  6. $password = "*ize*";  
  7.   
  8. echo "Kedves $fullname! A regisztrációd sikerült! A jelszavad: $password."// megtortenik a behelyettesites  
  9.   
  10. echo "<br/>";  
  11.   
  12. $txt = $mysql->doQueryToRow("select text from ".MYSQL_TABLE_TEXT." where title='regokmail'");  
  13.   
  14. echo "$txt[0]"// NEM tortenik meg a behelyettesites  
hogyan lehet megoldani a (sztring)változóban kapott változók behelyettesítését?

Köszönettel: teamtom
 
1

{ }

Max Logan · 2007. Ápr. 28. (Szo), 14.31
Bár ebben a formában ennek nem sok értelme van:
  1. echo "$txt[0]";  
gondolom nem csak így pusztán lenne a dolog, hanem lenne még mellette string is.

Az echo-t lehet (és azt mondják, hogy jobb is) úgy használni, hogy nem összefűzöd a string-eket, hanem egy vesszővel választod el őket.

Tehát:
  1. echo "szöveg első fele",$txt[0],"szöveg második fele";  
Ha mindenképpen a string-be akarod tenni, akkor pedig így csináld:
  1. echo "ez itt a string {$txt[0]} ez meg a string további része";  
A lényeg, hogy a tömböt tedd { } jelek közé.
2

nem megy így sem

teamtom · 2007. Ápr. 28. (Szo), 17.17
a mysql táblából kinyert szöveg tartalma ugyanaz, mint az első sztring (amelyben megtörténik a változó behelyettesítése)

ha változón (tömbön) keresztül (hogy máshogy?) próbáltam kiíratni a sztringet, bennemaradtak a változók.
olyan mintha a behelyettesítés dupla idézőjelek között csak egy szint mélységben hajtódna végre, iteráció nélkül

igazából az lenne számomra a lényeg, hogy a táblából kinyert szövegben a beleírt változók behelyettesítődjenek a változók értékével valahogyan, nem a kiíratás (echo v. print)

a kapcsos zárójelet megpróbáltam, ugyanúgy benne maradnak a változók a sztringemben :(
3

Re

Max Logan · 2007. Ápr. 28. (Szo), 17.43
Tehát ha jól értem, akkor neked van egy MySQL táblád amiben úgy mented el a szöveget, hogy "vmi szöveg $tomb_neve[index] folytatódik a szöveg"?

Ha az a helyzet áll fenn, akkor sztem alapvető tervezési hiba van nálad (én ilyet biztosan nem csinálnék).

Megoldás lehet az eval() függvény használata.

Pontosan mit is akarsz a dologgal elérni? Mert sztem van jobb megoldás is, legalábbis ha valóban az van amire én gondolok ...
4

sémaszöveg van a táblámban

teamtom · 2007. Ápr. 28. (Szo), 17.53
nem, nincs a táblába tömb tervezve
$string = "blabla bla $fullname blabla blabal $password"

ettől függetlenül lehet tervezési hiba is :)

a táblából a $string sémaszöveget nyerem ki, amiben a 2 darab változót ($fullname: teljes név, $password: generált jelszó ) aktualizálnám
vagyis azt hiszem, ez templétezés, de emiatt nem akartam Smarty-t használni (nem is igazán értek hozzá)

felhasználói regisztráció a környezet, egyébként

a kimenet egy darab sztring, egy személyreszabott válaszlevél, amit mailben visszaküldök
5

Egy lehetséges megoldás

Max Logan · 2007. Ápr. 28. (Szo), 18.20
  1. <?php  
  2.   
  3.  $fullname = "_felhasználói_név_";  
  4.  $password = "_bonyolúlt_jelszó_";  
  5.   
  6.  $mit[] = "{fullname}";  
  7.  $mit[] = "{password}";  
  8.   
  9.  $mire[] = $fullname;  
  10.  $mire[] = $password;  
  11.   
  12.  $string_original = "bla bla bla {fullname} bla bla bla {password} bla bla bla";  
  13.  $string_replaced = str_replace($mit,$mire,$string_original);  
  14.   
  15.  echo "Csere előtt : ",$string_original;  
  16.  echo "<br>";  
  17.  echo "Csere után : ",$string_replaced;  
  18.   
  19. ?>  
Ps.: Biztonsági okokból ne tedd bele a levélbe a honlap URL-jét. Érdemes ezt a cikket elolvasni.
6

Köszönöm

teamtom · 2007. Ápr. 28. (Szo), 18.53
Köszönöm, azt hiszem kicsit túlbonyolítottam a problémát!

nem tudtam, hogy az str_replace tömbök között is működik

RTFM, hát persze :)
7

Sztingösszefűzás:

saxus · 2007. Ápr. 30. (H), 04.04
Miért nem lehet szimplán összefűzni a stringeket?
  1. $nevecske = 'pistabácsi';  
  2. $jelszocsak = 'nagyontitkosvalami';  
  3.   
  4. $keres = 'bablabla '.$nevecske.' blablabla '.$jelszocska.' blablabla';  
Persze ugyanúgy működik " -jel is, csak jobb szeretem az aposztrófot. Például HTML kódot jobb szeretem ' -ok közé tenni, mert nem kell a "-k escapelni, azt a néhány ' escapelését meg kibírom.
10

Összefűzés

Max Logan · 2007. Ápr. 30. (H), 12.50
Az összefűzés azért nem jó, mert neki egy minta van tárolva MySQL-ben, amiben ki kell cserélni a nevet és jelszót. Amit te írtál tökéletes, ha nem DB-ben van tárolva a $keres változó tartalma, hanem be van ágyazva fixen a kódba.
8

(töröljétek)

saxus · 2007. Ápr. 30. (H), 04.04
(Légyszives töröljétek, triplán ment véletlen, mert szakadozott a net este).
9

(töröljétek)

saxus · 2007. Ápr. 30. (H), 04.08
(Légyszives töröljétek, triplán ment véletlen, mert szakadozott a net este).