Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di grin
    Registrato dal
    Aug 2004
    Messaggi
    1,629

    Sostituire campi con i valori presi dal database (specie di template)

    Ciao,

    sto cercando di dare maggiore flessibilità al cliente nel invio delle email dal sito. (Semplice Newsletter).
    Usando istruzione str_replace() posso sostituire ad esempio il campo {nome} con il Nome del utente a cui in questo momento si sta inviando il messaggio.

    Codice PHP:
    $message str_replace('{nome}'$db->f("first_name"), $message); 
    dove db->f è una richiesta al database per "pescare" campo first_name nella db Users.

    Qui tutto funziona bene, il problema sorge quando ho voluto dare la possibilità di inserire i prodotti dalla tabella Products con il seguente sistema-template: {prodotto_#} dove # qualsiasi numero, ad esempio {prodotto_34}

    Codice PHP:
    ereg("{prodotto_([0-9]+)}"$message$matches);
    if (
    $matches[1]) { $productid $matches[1]; } 
    Dopo di che pesco tutto quello che riguarda il prodotto (SELECT * FROM Products WHERE product_id='$productid')

    Poi ho questo:

    Codice PHP:
    $full_prodotto "" $dbp->f("product_name") . " " $dbp->f("product_desc") . " " $dbp->f("product_price") . "\n\n";
    $message eregi_replace("{prodotto_([0-9]+)}"$full_prodotto$message); 
    Se {prodotto_#} è unico nel messaggio tutto funziona bene, il problema sorge se l'utente inserisce più prodotti, {prodotto_12}, {prodotto_56}, in questo caso dal database viene pescato sempre lo stesso prodotto 2 volte.

    Cosa mi conviene fare per controllare la variabile $message per la presenza di {prodotto_#} multipli?

    Grazie in anticipo, spero che qualcuno mi illumini..

  2. #2
    Kaworu.it
    Bookmarks on line i tuoi preferiti ovunque
    il tempo è il miglior dottore.....solo che è parecchio lento ...troppo lento
    wxKonTEXT Editor di testi(linux, win e mac), new version

  3. #3
    Utente di HTML.it L'avatar di grin
    Registrato dal
    Aug 2004
    Messaggi
    1,629
    Credo che userò preg_match_all in quanto appunto i casi di matching possono essere multipli.
    Il problema è che non riesco a costruire tutto il blocco correttamente.
    C'è bisogno di qualche piccolo ciclo.

    Ricapitolando, ho la variabile $message che può contenere {prodotto_#} anche multipli.

    Esempio:

    Abbiamo nel nostro negozio nuovi prodotti scontati elencati di seguito:
    {prodotto_14}, {prodotto_35} & {prodotto_79}

    Cosa deve fare script? Deve sostituire ogni "istruzione" {prodotto_#} diciamo con il titolo del prodotto con lo stesso id nel database.

    Codice PHP:
    preg_match_all("/{prodotto_([0-9]{1,3})/i",$message,$out); 
    Ma dopo? Come estrago ogni possibile id per fare query al database?
    Ho provato i vari cicli ma sarà stata una notte sfigata.. %=)

    Qualche suggerimento?

  4. #4
    Utente di HTML.it L'avatar di grin
    Registrato dal
    Aug 2004
    Messaggi
    1,629
    Ho risolto con un 'for'.
    Grazie a tutti, comunque.



Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.