• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

cereal_killa

SimpleXML Dinamico

10 mensagens neste tópico

Boa Tarde,

Estou com uma duvida ao usar simpleXML, o problema é o seguinte.

Tenho este codigo

<?php
$edita = $_POST["edita"];
$xml = simplexml_load_file("../xml/news.xml");
$x = count($xml->item);
?>
<input type="text" name="tt" id="tt" /> Titulo<br />
<input type="text" name="stt" id="stt" /> Sub Titulo<br />
<input type="text" name="dat" id="dat" /> Data<br />
<input type="text" name="img" id="img" /> Imagem<br />
<input type="text" name="tex" id="tex" /> Texto<br />
<script type="text/javascript">
tt.value  = '<?php echo $xml->item['$edita']->titulo ?>';
</script>

O problema é que aqui :"tt.value  = '<?php echo $xml->item['$edita']->titulo ?>';" ele não me reconhece as variaveis que eu colocar neste caso tenho a variavel $edita que contem um numero, mas sempre que coloco la um numero no local da variavel ele funciona bem, apenas com variaveis nao funciona.

Como se pode resolver isto?

Obrigado,

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta sem as plicas

<?php $edita = (int)$edita; ?>

// tt.value  = '<?php echo $xml->item['$edita']->titulo ?>';

tt.value  = '<?php echo $xml->item[$edita]->titulo ?>';

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois....

Funcionou mas se não colocar <?php $edita = 0; ?>

Ele não da na mesma.

Parece que o problema afinal bem da parte em que passo o numero do formulario para o php.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah! Eu alterei essa parte do $edita = 0.

Tu metias o $edita = $_POST["edita"]. Se tem que ser um número inteiro, com

$edita = (int)$_POST['edita']

eu garanto que é mesmo um número inteiro independetemente do que o utilizador escreveu.

Se o número faz sentido ou não, tens que escrever o código na tua aplicação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Convém explicar porquê ou no futuro comete o mesmo erro noutra situação. Só um complemento à resposta do pmg...

Ao usares plicas estás a "formatar" uma string e se colocares uma variável lá dentro, o PHP vai ler aquilo de forma literal, como uma string e não como uma variável. Logo, ao usares '$edita' não estás a dizer para ele usar o valor da variável. No entanto, se usares aspas em vez de plicas, o PHP já interpreta as variável que lá colocares, a não ser que coloques uma \ antes do $ para que o $ seja lido como literal, ignorando assim o facto de ser uma variável.

Não é a melhor explicação, mas penso que dá para entender :).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja funciona não sabia que precisava de colocar a string como integer aqui "$edita = (int)$_POST['edita']",

quanto a questão das plicas e aspas ja sabia que era assim mas como estava a dar erro tentei por diferente.

Obrigado, problema resolvido :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema do <?php echo $xml->item['$edita']->titulo ?> é o teres usado ' à volta do $edita em vez de " ou mesmo nada. Isto é, se o teu objectivo é pores lá o valor da variável.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acho estranho ser necessário um cast, mas...

Só é "necessário" para evitar erros.

Supoe que o array $xml->item[] só tem os índices de 0 a 5.

Supoe ainda que o valor de $_POST['edita'] era 'sete'.

Ao fazer $xml->item[$edita] estava a pedir ao PHP para ir buscar $sml->item['sete'], que não existe!

Com o cast, o 'sete' é convertido a 0, e o valor já existe.

É claro que se $_POST['edita'] for '42000', o cast praticamente não tem efeito, e o $xml->item[42000] não existe.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu entendo isso, mas normalmente nos meus scripts eu verifico os dados todos que passam sem usar casts. Mas neste caso, o valor de $_POST['edita'] penso que era "4" (exemplo) e o cereal_killa disse que não funcionava mas com o cast já dava. Isto é que eu acho estranho porque eu nunca fiz casts neste tipo de situações e o código sempre funcionou.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora