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

Sign in to follow this  
ark15

Interagir php e JavaScript

Recommended Posts

ark15

Quero eliminar o registo com id = ao introduzido no form (Apagar). O form chama uma função de Javascript que confirma a eliminação do registo. Dentro do Script (js) tenho a instrução de PHP com mysql para eliminar a requerida linha da tabela. Não sei o que se passa porque a variável $id quando é necessária no código PHP não leva qualquer valor!   

Vai código a seguir:

<html>
<head>
</head>
<body>
<script type="text/javascript">

function confirma()
{
var resposta=confirm('Deseja eliminar este Livro?');


		if (resposta==true) 
			{

				 <?	
				 mysql_query("DELETE from livros WHERE id ='$id' ");
				?>

				alert("Dados apagados")
			} 
		else 
			{
			// se não confirmar faz
			//exit();
			}

}

</script>
<?php
include("ligacao.php");


if ($_POST['id'])
{	

$id = $_POST['id'];
$a = mysql_query("SELECT * from livros WHERE id ='$id' ");

$write = mysql_num_rows ($a);
    	
if (  $write == 1 )
	{
		echo mysql_result($a,0,nome);
		echo "<br>";
		echo mysql_result($a,0,ano);
		echo "<br>";	
		echo mysql_result($a,0,preco);
		echo "<br>";	
		echo mysql_result($a,0,editora);
		//botão para Eliminar

		?>
            <!--botão para Eliminar-->
		<input type="button"submit" value="Apagar Registo" onClick="javascript: confirma()" />
		<?
	}
elseif($write == 0)
	{
		echo "<script language=\"javascript\" type=\"text/javascript\"> alert(\"Livo não existente na base de dados. $variavel_1 \"); </script>";
		echo "";
	}
}
?>


<form id="insere" name="insere" method="post" action="?act=gravar" >
<table width="446" id="id">
  <tr>
    <th width="182" scope="row">ID</th>
    <td width="252"><input name="id" type="text" class="butao"    size="25" maxlength="20" />
    </td>
  </tr>

  <tr>
  

    <th scope="row"> </th>
    <td>
    <input type="submit" name="Submit" value="ok" />
   <input type="reset" name="limpar" value="Limpar">
    </td>
  </tr>
</table>
</form>


</body>
</html>

Alguem me pode ajudar?!

Obrigado desde já

Share this post


Link to post
Share on other sites
Battousai

O Javascript é uma linguagem que corre no cliente e o PHP corre no servidor. O que estás a fazer não tem sentido nenhum.

Para fazeres isso, ou fazes um refresh à página, com o id na querystring, ou usas "ajax".

Share this post


Link to post
Share on other sites
softklin

Tens alguns erros de aprendizagem graves no teu código! Vamos lá distinguir umas coisas.

O PHP é uma linguagem server-side, isto é corre no servidor. Depois de executar tudo o que é PHP, é devolvido ao cliente sob forma de HTML. Vou tentar dar um exemplo:

<?php $texto = "carro"; ?>
<h1>A minha linda pagina</h1>
<p>O meu lindo <?php echo $texto ?></p>

Ao requisitar a página, todo o PHP é interpretado antes de o HTML ser enviado para o cliente. Ou seja, após interpretação do PHP, o que vai para o cliente:

<h1>A minha linda pagina</h1>
<p>O meu lindo carro</p>

Como podes verificar no teu código fonte da página. O que quero dizer com isto? A tua função confirma está mal desenhada:

    if (resposta==true)
    {

        <?   
        mysql_query("DELETE from livros WHERE id ='$id' ");
       ?>
       
       alert("Dados apagados")
    }

Isto está errado, porque antes da página sair, a instrução mysql_query é interpretada pelo PHP, e como a variável ID só é definida lá para baixo, está vazia, e é essa a causa do teu problema.

Solução:

em vez de mysql_query("delete...."), que é PHP, tens de ter javascript. Podes pôr, por exemplo, window.location='nomeDaPagina.php?eliminar=id'.

Depois, já sendo código PHP, colocas um if a perguntar de existe algum id dentro da variável eliminar ($_GET['eliminar']). Se sim, o utilizador pretende eliminar o registo com esse id, senão, pretende efectuar outras acções.

NOTA: o teu código é vulnerável a ataques de hacking. Aconselho-te apenas no fim de resolveres todos os problemas, dedicares-te à segurança do script. Podes ler um artigo escrito na wiki do PAP com várias formas de protecção.

Vi que o Battousai respondeu primeiro, e de forma correcta, mas não queria deitar este texto que me deu um trabalhão a escrever para o lixo! :D


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
ark15

Desculpa a demora a responder, quis responder com calma a tudo que me dizes-te, quero-te agradecer pelas dicas e correcções, e quanto a minha aprendizagem, tenho de estudar sozinho pois tenho uma professora que não percebe nada de PHP e só sabe pedir trabalhos, mas quando chega a hora de os alunos pedirem ajuda a professora ela só sabe dizer GOOGLE ou pede a outro aluno para ir lá ajudar, isso deve-se as minhas falhas graves de aprendizagem, mas estou a fazer por melhorar :D e quanto ao site estar Vulnerável tens razão, mas isto é o um esboço , depois de funcionar , vou melhorar o código para não ser Vulnerável.

Desculpa todo este esclarecimento , mas só te queria agradecer pela tua chamada de atenção, muito obrigado colega :P      

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.