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

Glazz

PHP + XSLT - ir buscar qual o botao clicado

8 mensagens neste tópico

olá a todos,

precisava de uma ajuda urgente  :) É o seguinte, tenho um ficheiro XSL que tem um dois botões submit:

<form action="agencia_listar.php" method="post">

           <input type="submit" name="bt_sim" id="bt_sim" value="Sim" class="btnel1"/>

          <input type="submit" name="bt_nao" id="bt_nao" value="Não" class="btnel2"/>

</form>

isto na página "agencia.xsl"

Numa página PHP "agencia.php" tenho o seguinte código:

<?php
header('Content-type:text/xml');

if (getenv("REQUEST_METHOD") == "POST") {
	$procuratermo = $_POST['procuratermo'];
	$procuratipo = $_POST['procuratipo'];
	$orienta = $_POST['orienta'];
	$filtro = "WHERE " . $procuratipo . " LIKE '%" . $procuratermo . "%' ORDER BY " . $procuratipo . " " . $orienta . " ";
} else {
	$procuratipo = "nome_agencia";
	$orienta = "ASC";
	$filtro = "ORDER BY " . $procuratipo . " " . $orienta . "";}

/////////////////////////////////////////////////////////////////////////

// AREA PARA SQL - ELIMINAR

/////////////////////////////////////////////////////////////////////////

echo '<?xml version="1.0" encoding="ISO-8859-1"?>'."\n";
// XSL
echo '<?xml-stylesheet type="text/xsl" href="agencia.xsl"?>'."\n";
// XSD
echo "<agencias xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"agencia.xsd\">"."\n";

// ligacao a BD
$ligacao = mysql_connect("localhost","root","");								
if (!$ligacao){ die('A ligação ao servidor MySQL não foi estabelecida.<br>aconteceu o erro: ' . mysql_error());};
mysql_select_db("tw_agencia", $ligacao);
// pesquisa BD	
$resultado = mysql_query("SELECT * FROM agencias $filtro");
// resultados
while($row_a = mysql_fetch_array($resultado)){	
	echo "\t<agencia id=\"" . $row_a["id_agencia"] . "\">\n";
	echo "\t\t<nome>" . $row_a["nome_agencia"] . "</nome>\n";	
	echo "\t\t<morada>" . $row_a["morada"] . "</morada>\n";	
	echo "\t\t<telefone>" . $row_a["telefone"] . "</telefone>\n";
	echo "\t\t<fax>" . $row_a["fax"] . "</fax>\n";	
	echo "\t\t<email>" . $row_a["email"] . "</email>\n";
	echo "\t\t<imagem>" . $row_a["imagem"] . "</imagem>\n";
	echo "\t</agencia>\n";	
}
// fecha ligacao a BD
mysql_close($ligacao);
?>
</agencias>

Onde tenho //AREA PARA SQL eliminar queria fazer um codigo que verificasse que se ele carregou no bt_sim eliminava o registo, se clicou no bt_nao não fazia nada.

O meu problema está em ir buscar nesta página PHP o  ID do botão clicado, uma vez q no XSL não posso colocar nenhum PHP  :P

Alguém sabe?

Cump

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porquê que tens 2 IDs iguais (até colocaste a bold)? Que eu saiba, isso não é permitido...

Faz um echo à variável $_POST após teres clicado num dos botões, acho que és capaz de ver lá qualquer coisa que te ajude a identificar o problema.

Para visualizares melhor podes fazer:

echo "<pre>";
print_r($_POST);
echo "</pre>";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não conheço os documentos XLS, por isso posso estar a atirar para o ar.

Caso esse tipo de documentos permita Javascript, podes pura e simplesmente retirar o type "submit" do botão 'não', e ao clicar nele (onClick), fazer um redirecionamento de javascript. Ficaria algo como:

<input type="button" name="bt_nao" id="bt_nao" value="Não" class="btnel2" onclick="window.location='PaginaAoClicarOBotaoNao.php'"/>

Assim, poupas o trabalho de verificar se ele carregou no sim ou no não, uma vez que só vai carregar no sim, por predefinição.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nazgulled,

os botoes tem ID's diferentes, eu é que me enganei mas já está corrigido :)

vou tentar com o Javascript softclean a ver se dá, uma vez que os documentos XSL tem algumas particularidades como por exemplo PHP lá pelo meio não dar nada.

Obrigado, vou tentar :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu também nunca usei documentos XSLT para fazer páginas mas algo me diz que o que eu disse funciona (não vejo ra<ão para não funcionar, but agian, nunca usei docs XSLT).

Podes dar ai um exemplo muito básico de um ficheiro XSLT com um simples form com uma caixa de texto e um botão submit mas com o código todo desse ficheiro, de forma que ao abrir no browser seja apresentada uma página?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem já consegui ;)

Usei o GET e uma verificação e deu (já tinha uma verificação do post)

posso deixar a solução cá. Nazgulled o" XML" é o ficheiro XLST podes ver com o form, neste caso só os botões lá e no PHP a parte que me interessava esta no //Elimina registo

agencia_eliminar.xsl

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="base.xsl"/>
    
<xsl:template match="/agencias" ><head><title>Agências - Eliminar</title>
    <link rel="stylesheet" type="text/css" href="formulario.css" /></head>
    	
        <font size="1" face="Verdana, sans-serif">
        <h2><font color="#888888">Agências - Eliminar</font></h2><br/>
               
        <table width="800px" border="0">
         <tr align="center" bgcolor="#006699">
            <th bgcolor="#F0F0F0"></th>
            <th><b>Agência</b></th>
            <th><b>Morada</b></th>
            <th><b>Telefone</b></th>
            <th><b>Fax</b></th>
            <th><b>E-mail</b></th>
          </tr>
        <xsl:apply-templates select="agencia"/>
       		<!-- <xsl:sort select="nome" />
        </xsl:apply-templates> -->
        </table><br/><br /><br />
        <table width="800px" border="0" align="center">
        	<tr><td><b>Tem a certeza que pretende eliminar este registo?</b></td></tr>
        </table><br />
  		<form action="agencia_listar.php" method="get"> 
            <input type="submit" name="bts" value="Sim" class="btnel1"/>
          	<input type="submit" name="btn" value="Não" class="btnel2"/>
            <input type="hidden" name="id" value="{//@id}"/>
        </form>
        <br /><br /><br />
        <a href="agencia_listar.php"><b>- Voltar -</b></a><br /><br />
        <a href="index.php"><b>- Menu -</b></a></font>

</xsl:template>

    <xsl:template match="agencia" >
      <tr>
        <td><img src="{imagem}"/></td>
        <td bgcolor="#F6F6F6"><xsl:value-of select="nome"  /></td>
        <td bgcolor="#F6F6F6"><xsl:value-of select="morada"  /></td>
        <td bgcolor="#F6F6F6"><xsl:value-of select="telefone"  /></td>
        <td bgcolor="#F6F6F6"><xsl:value-of select="fax" /></td>
        <td bgcolor="#F6F6F6"><xsl:value-of select="email" /></td>
      </tr>
    </xsl:template>

</xsl:stylesheet>

agencia_eliminar.php

<?php
header('Content-type:text/xml');

if (getenv("REQUEST_METHOD") == "POST") {
	$procuratermo = $_POST['procuratermo'];
	$procuratipo = $_POST['procuratipo'];
	$orienta = $_POST['orienta'];
	$filtro = "WHERE " . $procuratipo . " LIKE '%" . $procuratermo . "%' ORDER BY " . $procuratipo . " " . $orienta . " ";
} else {
	$procuratipo = "nome_agencia";
	$orienta = "ASC";
	$filtro = "ORDER BY " . $procuratipo . " " . $orienta . "";}

echo '<?xml version="1.0" encoding="ISO-8859-1"?>'."\n";
// XSL
echo '<?xml-stylesheet type="text/xsl" href="agencia.xsl"?>'."\n";
// XSD
echo "<agencias xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"agencia.xsd\">"."\n";

// ligacao a BD
$ligacao = mysql_connect("localhost","root","");								
if (!$ligacao){ die('A ligação ao servidor MySQL não foi estabelecida.<br>aconteceu o erro: ' . mysql_error());};
mysql_select_db("tw_agencia", $ligacao);

// Elimina registo
if (getenv("REQUEST_METHOD") == "GET") {
	if ($_GET['bts']) {
		$reg = $_GET['id'];
		$elimina = mysql_query("DELETE FROM agencias WHERE id_agencia = $reg");
	} else if ($_GET['btn']) {
		$procuratipo = "nome_agencia";
		$orienta = "ASC";
		$filtro = "ORDER BY " . $procuratipo . " " . $orienta . "";
	}
}

// pesquisa BD	
$resultado = mysql_query("SELECT * FROM agencias $filtro");
// resultados
while($row_a = mysql_fetch_array($resultado)){	
	echo "\t<agencia id=\"" . $row_a["id_agencia"] . "\">\n";
	echo "\t\t<nome>" . $row_a["nome_agencia"] . "</nome>\n";	
	echo "\t\t<morada>" . $row_a["morada"] . "</morada>\n";	
	echo "\t\t<telefone>" . $row_a["telefone"] . "</telefone>\n";
	echo "\t\t<fax>" . $row_a["fax"] . "</fax>\n";	
	echo "\t\t<email>" . $row_a["email"] . "</email>\n";
	echo "\t\t<imagem>" . $row_a["imagem"] . "</imagem>\n";
	echo "\t</agencia>\n";	
}
// fecha ligacao a BD
mysql_close($ligacao);
?>
</agencias>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se já está a funcionar óptimo. Mas o GET é tipo o o que eu disse. A diferença entre o GET e o POST será por onde os dados são passados ao PHP. Tu no teu form inicial tens lá method="post" portanto, usares o POST como te disse, provavelmente resolvias o problema pois é assim que se faz para HTML e não me parece que seja diferente com XML/XSL. Mas depois neste último código que escreveste, já mudaste para method="get", por isso é que usas o GET e não o POST.

Eu recomendava-te a usares o POST...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim eu sei que o POST é mais seguro mas como já tinha uma verificação com o POST usei o GET para ser mais "directo".

Obrigado pelas dicas ;)

Se já está a funcionar óptimo. Mas o GET é tipo o o que eu disse. A diferença entre o GET e o POST será por onde os dados são passados ao PHP. Tu no teu form inicial tens lá method="post" portanto, usares o POST como te disse, provavelmente resolvias o problema pois é assim que se faz para HTML e não me parece que seja diferente com XML/XSL. Mas depois neste último código que escreveste, já mudaste para method="get", por isso é que usas o GET e não o POST.

Eu recomendava-te a usares o POST...

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