Ciao a tutti, sono nuovo nel forum e mi affido alla vostra skill per venirne fuori da un problema che mi ha creato i crampi ala pancia.
Allora:
la funzione semplice di eregi_replace la scrivo così:
Codice PHP:
function testo($testo){
$testo = eregi_replace("\\[Purl]([-_./a-z 0-9!&%#?+,'=:;@~]+)\\[PurlE]","\\\1"),$testo);
return $testo;}
Quindi, dato un testo del tipo:
Codice PHP:
$stringa = testo("Creo una stringa che [Purl]contiene[PurlE] il testo per la funzione");
Il risultato sarà effettivamente:
Creo una stringa che contiene il testo per la funzione
E fino a qui, tutto ok.
Il mio problema nasce dal fatto che, all'interno dei campi di delimitazione (quindi [Purl] e [PurlE]), vorrei metterci dei numeri, i quali vanno a pescare tale numero all'interno di un database.
Quindi scrivendo la stringa:
Codice PHP:
$string = "Mi piace molto [Purl]5[PurlE] e [Purl]13[PurlE];
ritornandomi come risultato:
Mi piace molto pane e vino
Ho provato in vari modi, ve ne espongo uno, quello che pensavo andar bene:
Codice PHP:
// funzione per andare a cercare gli ID nel database
function searchDB($stringa,$database_DB,$DB){
// seleziono il db
mysql_select_db($database_DB, $DB);
// la query
$query_search_pietanza = "SELECT * FROM pietanze WHERE id = '".$stringa."'";
$search_pietanza = mysql_query($query_search_pietanza, $DB) or die(mysql_error());
$row_search_pietanza = mysql_fetch_assoc($search_pietanza);
$totalRows_search_pietanza = mysql_num_rows($search_pietanza);
//la stringa che mi ritorna
return $row_search_pietanza['nome_pietanza'];
}
// ora riscrivo la funzione testo con la modifica per la richiesta al database
function testo($testo,$database_DB,$DB){
$testo = eregi_replace("\\[Purl]([0-9!&%#?+,'=:;@~]+)\\[PurlE]",searchDB("\\1",$database_DB,$DB),$testo);
return $testo;}
Con questa funzione, in realtà funziona... ma male. Mooooolto male!!!
Ovvero, sì, va a pescarmi dal database i dati, me li reistituisce, MA...
mi prende sempre l'ID 1.
L'ID, ossia l'1, viene preso dalla funzione searchDB(\\1,....)...all'interno dell'eregi_replace
Il mio risultato della precedente stringa sarà quindi:
Mi piace molto pasta e pasta
Quindi, quando il risultato dell'eregi_replace non è richiamato all'interno di una funzione, da il risultato sperato, nel momento che è all'interno di una funzione (in questo caso searchDB) diventa una stringa a tutti gli effetti.
Spero di essermi spiegato bene.
Come posso ovviare a questo problema? Il fatto di fare due funzioni è dato dal fatto che all'interno di reregi_replace non posso creare un costrutto, però mettere una funzione all'interno dello stessoè consentito.
Grazie a tutti quanti