Jump to content
davidconcha

Gravar ID's na href

Recommended Posts

davidconcha

Boas malta,  :cheesygrin:

deparei me com um problema que nao consigo resolver... :P

é assim: eu tenho uma pagina onde sao mostrados dados da BD

e tenho duas opçoes de Alterar dados e Eliminar dados...

bem... esses dados sao inseridos num formulario

pelo utilizador, e as opçoes de alterar e eliminar é a parte de

admin quando me sao mostrados os dados.

O problema é que se um utilizador escrever no formulario alguma coisa do

genero "OláMundo" eu consigo alterar e eliminar

mas se o utilizador escrever com um espaço "Ola Mundo" ja nao consigo apanhar

os ID's na href como esotu a fazer, nem comentar nem eliminar... e noto que o href apanha o "Ola", apartir do espaço nao apanha mais nada  :)

Alguma ideia? :S

       
        echo "<td><a href=gerecoments1.php?nome=".$linha['nome'].
        "&coment=".$linha['coment'].
        "&id_coments=".$linha['id_coments'].
        "&id_posts=".$linha['id_posts'].

       ">Alterar</a></td>";
       
       echo "<td><a href=eliminarcoments1.php?nome=".$linha['nome'].
        "&coment=".$linha['coment']."&id_coments=".$linha['id_coments'].
	"&id_posts=".$linha['id_posts'].
       ">Eliminar</a></td>";

Share this post


Link to post
Share on other sites
brunoais

Mais importante:Tu precisas de enviar isso tudo pelo url? Se sim, mostra o código no servidor, sff. Deve haver melhores soluções.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
davidconcha

Eu iniciei php a pouco tempo, nao sei melhor maneira  :P

Este mostra me os coments numa tabela seguindo cada um deles pela opçao alterar e eliminar

<?php
ob_start();
session_start();
if ($_SESSION['validacao'] == 1)
{


echo 'Bem vindo '.$_SESSION['user'];   

echo ' Nivel: '.$_SESSION['nivel']; 

}
include ('menu.php');

?>

<head>
<style type="text/css">
.tabela {
border: 1px solid #000000;
background-color: #ECEEF3;
}
.auto-style2 {
font-family: Verdana, Geneva, Tahoma, sans-serif;
font-size: small;
text-align: center;
}
.auto-style3 {
font-family: Verdana, Geneva, Tahoma, sans-serif;
font-size: x-small;
text-align: center;
}
.auto-style4 {
color: #000000;
}
.auto-style5 {
text-decoration: none;
}
</style>
</head>

<body style="background-color: #FAF7CB; background-image: url('../images/fundo.png');">

<h2 class="auto-style2">
<img alt="" height="24" longdesc="file:///C:/Program Files/EasyPHP-5.3.6.0/www/Projecto/images/comment-icon.png" src="../images/comment-icon.png" width="24">Gerir 
comentarios </h2>
<p class="auto-style3">
<a class="auto-style5" href="delallcoments.php"><strong>
<img alt="" class="auto-style4" height="24" longdesc="file:///C:/Program Files/EasyPHP-5.3.6.0/www/Projecto/menu/images/Alarm-Error-icon.png" src="images/Alarm-Error-icon.png" width="24"></strong><span class="auto-style4"><strong>Apagar 
todos os comentarios</strong></span></a></p>
  <?php
  require_once('connect_bd.php');
  echo "</p>";

  	$sql = "select * from comentarios";
  	$resultado = mysql_query($sql) //executa querie
or die ("Nao foi possivel realizar o pedido.");
echo "<table style='width: 31%' class='tabela' align='center'>
 <tr>

    <td class='auto-style2'>ID_COMENT</td>
    <td class='auto-style2'>POST</td>
    <td class='auto-style2'>Nome</td>
    <td class='auto-style2'>Comentario</td>
<td class='auto-style2'>Alterar</td>
<td class='auto-style2'>Eliminar</td>	 

  </tr>";

 while ($linha=mysql_fetch_array($resultado)) { 
 	echo "<tr>";
 	echo "<td>".$linha['id_coments']."</td>";
 	echo "<td>".$linha['id_posts']."</td>";
 	echo "<td>".$linha['nome']."</td>";
	echo "<td>".$linha['coment']."</td>";

        echo "<td><a href=gerecoments1.php?nome=".$linha['nome'].
        "&coment=".$linha['coment'].
        "&id_coments=".$linha['id_coments'].
        "&id_posts=".$linha['id_posts'].

       ">Alterar</a></td>";
       
       echo "<td><a href=eliminarcoments1.php?nome=".$linha['nome'].
        "&coment=".$linha['coment']."&id_coments=".$linha['id_coments'].
	"&id_posts=".$linha['id_posts'].
       ">Eliminar</a></td>";



 	echo "</tr>";
	} 

?>

Este sao as opçoes do alterar em que apanha as variaveis em text fields

<?php
ob_start();
session_start();
if ($_SESSION['validacao'] == 1)
{


echo 'Bem vindo '.$_SESSION['user'];   

echo ' Nivel: '.$_SESSION['nivel']; 

}
include ('menu.php');
?>

<html>

<head>
<link href="../style.css" rel="stylesheet" type="text/css">
<style type="text/css">
.auto-style1 {
 text-align: center;
}
.auto-style4 {
 font-family: Verdana, Geneva, Tahoma, sans-serif;
 font-size: x-small;
}
.auto-style12 {
 text-align: center;
 font-family: Verdana, Geneva, Tahoma, sans-serif;
 font-size: medium;
}
.auto-style13 {
text-align: center;
font-family: Verdana, Geneva, Tahoma, sans-serif;
font-size: x-small;
color: #000000;
}
</style>
</head>

<body style="background-color: #FAF7CB; background-image: url('../images/fundo.png');">
<strong><h2 class="auto-style12"><span class="auto-style12">
<img alt="" height="24" longdesc="file:///C:/Program Files/EasyPHP-5.3.6.0/www/Projecto/images/comment-icon.png" src="../images/comment-icon.png" width="24"></span></strong><span class="auto-style12">Alterar comentario</span></h2>

<form id="form1" name="form1" method="post" action="gerecoments2.php">

<table style="width: 23%; height: 89" align="center">
	<tr>
		<td style="width: 79px" class="auto-style13">ID:</td>
		<td style="width: 728px" class="auto-style1">
  		    <?php echo $_REQUEST['id_coments'];?> </td>
	</tr>
	<tr>
		<td style="width: 79px" class="auto-style13">Nome:</span></td>
		<td style="width: 728px" class="auto-style1">
  		  <label>
		<input name="nome" type="text" id="nome" value="<?php echo $_REQUEST['nome']; ?>" class="auto-style4"   ></label></td>
	</tr>
	<tr>
		<td style="width: 79px" class="auto-style13">Comentario:</td>
		<td style="width: 728px" class="auto-style1">
  <label>
  <input name="coment" type="text" id="coment" value="<?php echo $_REQUEST['coment']; ?>" class="auto-style4"   ></label></td>
	     <input type="hidden" name="id_coments"  value="<?php echo $_REQUEST['id_coments']; ?>"   ></label></p>

	</tr>
	</table>
    <div class="auto-style1">
    <label>
    <input type="submit" name="Submit" value="Alterar" class="auto-style4"  ></label><br> <label>
  </label>
    </div>
  <p> 
  </p>

</form>
</body>
</html>

Este é a acçao do form a cima

<?php
  require_once('connect_bd.php');
  echo ("<p>");

$nome = $_REQUEST['nome'];
$coment = $_REQUEST['coment'];
$id_coments = $_REQUEST['id_coments'];



$update ="update comentarios set 

nome='$nome', coment='$coment' where id_coments='$id_coments'";
$resultado = mysql_query($update);

$n_rows = mysql_affected_rows();  //devolve numero de linhas "afectadas"

if ($resultado) 
echo ("<p>");
echo ("Alteracao de $n_rows  registo efectuada com sucesso!!! <p>");
echo ("<p>");
echo ("Ira ser redirecionado...<p>");
?>

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Ola davidconcha...

Visto que a tabela de comentários tem um campo ID Comment, que deve ser único para cada registo (certo?) então porque não passar o id pelo endereço e apagá-lo?

Existe uma correcção possível para o teu código funcionar da maneira que pretendes (através das funções urlencode() e urldecode() ) no entanto, não é uma solução viável!

O ideal seria usares um número que identifique a linha e apagues a linha da base de dados de acordo com esse numero :P .

Ficando assim:

echo "<td><a href=gerecoments1.php?id_coments=".$linha['id_coments'].
       ">Alterar</a></td>";
       
       echo "<td><a href=eliminarcoments1.php?id_coments=".$linha['id_coments'].
       ">Eliminar</a></td>";

No caso do alterar (quando carregas os valores para o formulário) não deves ir buscar os valores ao URL :) Deves sim, adquirir o ID do endereço e ir buscar os valores à base de dados que tem esse id....

Depois é só carregares os valores nas 'textfields'.

Na parte da action, deves receber os posts (se possível mantendo o id no url) e efectuar o update de acordo com o $_POST dos valores e id no $_GET :cheesygrin:.

Fui claro?

Abraço,

Share this post


Link to post
Share on other sites
davidconcha

Queria mesmo fechar este topico -.- mas nunca mais!

A parte do eliminar percebi a logica e ja corrigi  :)

Agora a parte do alterar, nao estou a perceber como vou postar nas textfields os valores que estao guardados na base de dados referentes ao seu id  :(

Acçao Alterar

echo "<td><a href=gerecoments1.php?nome=".$linha['nome'].
        "&coment=".$linha['coment'].
        "&id_coments=".$linha['id_coments'].
        "&id_posts=".$linha['id_posts'].

       ">Alterar</a></td>";

Formulario onde apanho os valores


<form id="form1" name="form1" method="post" action="gerecoments2.php">

<table style="width: 23%; height: 89" align="center">
	<tr>
		<td style="width: 79px" class="auto-style13">ID:</td>
		<td style="width: 728px" class="auto-style1">
  		    <?php echo $_REQUEST['id_coments'];?> </td>
	</tr>
	<tr>
		<td style="width: 79px" class="auto-style13">Nome:</span></td>
		<td style="width: 728px" class="auto-style1">
  		  <label>
		<input name="nome" type="text" id="nome" value="<?php echo $_REQUEST['nome']; ?>" class="auto-style4"   ></label></td>
	</tr>
	<tr>
		<td style="width: 79px" class="auto-style13">Comentario:</td>
		<td style="width: 728px" class="auto-style1">
  <label>
  <input name="coment" type="text" id="coment" value="<?php echo $_REQUEST['coment']; ?>" class="auto-style4"   ></label></td>
	     <input type="hidden" name="id_coments"  value="<?php echo $_REQUEST['id_coments']; ?>"   ></label></p>

gerecoments2.php Acçao do form

<?php
  require_once('connect_bd.php');
  echo ("<p>");

$nome = $_POST['nome'];
$coment = $_POST['coment'];
$id_coments = $_GET['id_coments'];



$update ="update comentarios set 

nome='$nome', coment='$coment' where id_coments='$id_coments'";
$resultado = mysql_query($update);

$n_rows = mysql_affected_rows();  //devolve numero de linhas "afectadas"

if ($resultado) 
echo ("<p>");
echo ("Alteracao de $n_rows  registo efectuada com sucesso!!! <p>");
echo ("<p>");
echo ("Ira ser redirecionado...<p>");
?>




<meta HTTP-EQUIV="REFRESH"content="3;gerecoments.php">

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Olá David...

Com certeza deverás ter percebido que o para eliminar o idcoments passado no URL serve para identificar o registo a eliminar:

<?php
$sql = "DELETE FROM comments WHERE id_comment = {$_GET['id_coment']}"; # Como vês, o id_coment do URL identifica o registo a eliminar, no WHERE.
mysql_query( $sql );
?>

... ora o mesmo se passa no Alterar.... tu não precisas de passar os dados pelo endereço ;-) basta-te passar o id_coment e depois (no script de alterar) obter o registo para preencher os campos do formulário.

Exemplo do alterar:

<?php
$sql = "SELECT * FROM comments WHERE id_comment = {$_POST['id_coment']}"; #Como podes ver, aqui o id_coment do URL define qual o registo a alterar.
$result = mysql_query( $sql ); # Obténs o resultado (ou dataset) da query
$dados = mysql_fetch_assoc( $result ); # Obténs o objecto do resultado

/*
  Aqui vem o formulário.... eis um exemplo de seguida com um dos campos:

  Onde tinhas:
  <input name="nome" type="text" id="nome" value="<?php echo $_REQUEST['nome']; ?>" class="auto-style4"   >

  Passa a:
*/
?>
<input name="nome" type="text" id="nome" value="<?php echo $dados['nome']; ?>" class="auto-style4"   >

Espero ter sido ainda mais claro :(

Share this post


Link to post
Share on other sites
davidconcha

:cheesygrin: sim foste ainda mais claro  :( eu desconhecia isto

...{$_POST['id_coment']}";

Agora sim, TOPIC SOLVED!

Obrigado  :cheesygrin:

Share this post


Link to post
Share on other sites
brunoais

Só mais um promenor por motivo de segurança:

Aonde está:

<?php
$sql = "DELETE FROM comments WHERE id_comment = {$_GET['id_coment']}"; # Como vês, o id_coment do URL identifica o registo a eliminar, no WHERE.
mysql_query( $sql );
?>

Passa a:

<?php
$sql = 'DELETE FROM comments WHERE id_comment ="'. mysql_real_escape_string($_GET['id_coment'] .'"'; # Como vês, o id_coment do URL identifica o registo a eliminar, no WHERE.
mysql_query( $sql );
?>


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

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

×
×
  • Create New...

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.