Olá
O problema passa-se com o preg_replace e com uma função colocada no parâmetro de "replacement". O objectivo é que por cada string que o preg_replace encontrar, ele chamar uma função que faça uma chamada ao MySQL e substituir por outr valor. Uma coisa mais ou menos deste genero:
$teste = preg_replace('/thumbnails\.php\?album=([a-z0-9]+)/i',getalbumstring("$1"),"http://www.teste.org/thumbnails.php?album=34");
echo $teste;
function getalbumstring($matches){
$query = "SELECT campo FROM tabela WHERE id='$matches'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$campo = $row['campo'];
return $campo;
}
O resultado que está a aparecer no ecrã é «http://www.teste.org/» que claramente não é o pretendido.
Isto não funcionou, apesar de eu ter a certeza que havia valores na tabela para a query executada. Aliás, se substituísse hard-coded o «id='$matches'» directamente por «id='34'», ele funciona na perfeição.
Por isso, comecei a apagar linhas para ver o que se passava.
$teste = preg_replace('/thumbnails\.php\?album=([a-z0-9]+)/i',getalbumstring("$1"),"http://www.teste.org/thumbnails.php?album=34");
echo $teste;
function getalbumstring($matches){
return $matches;
}
Depois de fazer esta alteração passou a aparecer no ecrã o seguinte: «http://www.teste.org/34», o que me provou que realmente o valor está a ser bem extraído com o preg_replace. Então fiz mais um teste. Fui ao primeiro troço de código e troquei-o por isto:
$teste = preg_replace('/thumbnails\.php\?album=([a-z0-9]+)/i',getalbumstring("$1"),"http://www.teste.org/thumbnails.php?album=34");
echo $teste;
function getalbumstring($matches){
$query = "SELECT campo FROM tabela WHERE id='$matches'";
return $query;
}
O resultado foi como era esperado e apareceu o seguinte: «http://www.teste.org/SELECT campo FROM tabela WHERE id='34'»
Ou seja, a string é bem formada, mas quando voltava a colocá-la na query do mysql, o mysql não funcionava.
Fiz mais um teste:
$teste = preg_replace('/thumbnails\.php\?album=([a-z0-9]+)/i',getalbumstring("$1"),"http://www.teste.org/thumbnails.php?album=34");
echo $teste;
function getalbumstring($matches){
$query = "xyz".$matches;
return $query." - ".substr($query,1)." - ".substr($query,2)." - ".substr($query,3)." - ".substr($query,4)." - ".substr($query,3,1)." - ".substr($query,3,2);
}
O resultado é surpreendente e estranho:
http://www.teste.org/xyz34 - yz34 - z34 - 34 - 1 - $ - 34
Sinceramente já não sei o que fazer. Já fiz todas as experiências. Já tentei somar um e subtrair um, mas o php não o encara nem como número, nem como caracteres, nem faço ideia como o encara. Como se pode ver pelo exemplo acima, atribuí o seu valor a outra variável, mas pelos vistos a variável, mesmo que tenha lá outras coisas pelo meio, trabalha da mesma forma.
Se alguma alma caridosa e perspicaz me puder ajudar ficarei eternamente agradecido. :clap: