saber en que fila seleccione

Iniciado por MaLkAvIaN_NeT, 6 Octubre 2008, 07:23 AM

0 Miembros y 2 Visitantes están viendo este tema.

MaLkAvIaN_NeT

hola amigos del foro necesito su gran ayuda.

cargo en una tabla los datos de un registro de mi base de datos:


quiero que al hacer click en el boton se elimine el registro seleccionado, en otras palabras quiero saber como puedo hacer para ver que fila se selecciono para poder actualizarlo desde mi eliminar.php

espero me ayuden

a por las buenas ideas

дٳŦ٭

Pon el id en el link del boton y en tu php de eliminación haz un query delete where id=numero.


Con sangre andaluza :)


MaLkAvIaN_NeT

ok muchas gracias voy a intentarlo cualquier problema lo pondré en el foro.


gracias por su tiempo
a por las buenas ideas

Hadess_inf

#3
Código (php) [Seleccionar]
<?
while($row = mysql_fetch_array($que))
{
?>
<input type='button' value='eliminar' onclick="javascript:document.location.href='elimina.php?id=<? echo $row['codigo]']; ?>';">
<?
}
?>

MaLkAvIaN_NeT

que de cierto hay con lo q no es recomendable usar java script como en la validaciones porque hay manera q desde el lado del cliente se pueda saltar el o pasar por alta la ejecución del java script
a por las buenas ideas

cassiani

Todas las validaciones de tu sistema debes hacerlas con PHP y ayudarte para otras cosas con JS, por ejemplo, si quieres que en un campo como nombre de usuario no se introduzcan números juegas con keycode JS, si falla, PHP, otro ejemplo al contrario, seria si en un campo como DNI quieres que se introduzcan solo números y si falla PHP y bla, bla, puedes deshabilitar el botón de envió si los campos están vacíos y activarlos cuando no sea así, hay varias formas de no hacer tanto uso de él y aun así conseguir hacer lo que quieres.

Para lo que tú planteas, yo prefiero hacerlo así:

Código (php) [Seleccionar]
echo "<td class='link' align=\'center\'><a href='$sVinculo?Id=$Id'>$sTexto</a></td>";

Eso es parte una función que tengo para listar el contenido de ciertas tablas en un sistema que desarrollo, ese echo va justamente al final de cada columna, a medida que listo, el link se arma con el vinculo que le pase, el id del registro y el texto que llevará dicho link. Unas veces necesito que diga eliminar otras modificar... y luego para saber cual eliminará, capturas el id y lo demás supongo lo sabes.

Es solo una idea, saludos

MaLkAvIaN_NeT

#6
pero esto no sería inseguro ya que mandaría un ID por el navegador, dime hay alguna forma de cifrar estos datos como se hace en asp.net.


pero que no sea con MD5 o SHA1 porque no podría recuperar el valor originario.

gracias por su tiempo.

saludos
a por las buenas ideas

MaLkAvIaN_NeT

#7
tengo otra forma:


$id=array_keys($_POST['borrar']);


$sql="DELETE FROM ... WHERE id=$id[0]";


pero como podría saber en cual item del arreglo se hizo click, alguna forma??


gracias por su tiempo.
a por las buenas ideas

MaLkAvIaN_NeT

Gracias a mi amigo foráneo francisco para que sugirió hacerlo con unos check. aquí pongo el código para aquellos que alguna ves lo necesiten usar como en esta oportunidad lo necesité yo.

aquí mi store procedure para modificar.
CREATE DEFINER=`root`@`localhost` PROCEDURE `t_persona_cambiar_estado`(int_persona int,int_estado tinyint)
update persona set estado=int_estado where id_persona=int_persona$$


codigo del form

<td><input type='checkbox' name='id[]' value='<? echo"$row['tuVariableId']"?>'

código para modificar.php
Código (php) [Seleccionar]

$arreglo=$_POST["id"];

for($i=0;$i<count($arreglo);$i++)
{   
    $obj_persona->id_persona=$arreglo[$i];
    $obj_persona->modificar($objBd);   
}
$objBd->desconectar();
$obj_servicios->ir_a("persona.php");


mi metodo modificar en la clase persona:

Código (php) [Seleccionar]
function modificar($cnn)
{
$consulta="call t_persona_cambiar_estado (".$this->id_persona.",".$this->estado.");";
$cnn->ejecutar_consulta($consulta);



saludos y gracias por su tiempo.
a por las buenas ideas

WHK

#9
Creo que ya estubo mas que claro en las primeras dos respuestas,

CitarPon el id en el link del boton y en tu php de eliminación haz un query delete where id=numero.
Citar<?
while($row = mysql_fetch_array($que))
{
?>
<input type='button' value='eliminar' onclick="javascript:document.location.href='elimina.php?id=<? echo $row['codigo]']; ?>';">
<?
}
?>

Utilizar javascript no tiene nada de inseguro, la seguridad depende del programador para validar esa entrada, por ejemplo se supone que solo tu tendrás acceso a modificar aquellas filas o a quien tu designes con algún tipo de sesión, etc. Si quieres evitar alguna inyección de tipo SQL podrías establecer que la variable sea solo numérico (int)$id, el javascript que expuso haddes lo único que hace es una pequeña redirección para validar la entrada en metodo GET elimina.php?id=[id] y si alguien decide modificar ese ID podrá hacerlo desde el formulario de todas formas, la idea no es restringir desde el explorador sino desde el servidor si es que quieres evitar problemas de seguridad, todo esta en la buena programación php accediendo a eliminar la fila solamente si el usuario es permitido y/o el id realmente existe para evitar devolver valores nulos.

Piendo que lo que buscas está mas ayá de lo que expones.


Código (php) [Seleccionar]
<?php
// .. ..

if($_GET['borrar']){
 
$referer = @explode("?",$_SERVER[HTTP_REFERER]);
 if(
$_POST and !eregi($referer[0], "http://".$_SERVER[HTTP_HOST].$_SERVER[PHP_SELF])){
  
header("Ataque-detenido: XSRF");
  
header("location: http://".$_SERVER[HTTP_HOST].$_SERVER[PHP_SELF]);
  exit(
1);
 }
 if(
verifica_eliminar()){
  
header('Estado: Columna eliminada');
  
header('location: http://'.$_SERVER[HTTP_HOST].$_SERVER[PHP_SELF]);
  exit(
0);
 }else{
  
header('Estado: Sin acciones');
  
header('location: http://'.$_SERVER[HTTP_HOST].$_SERVER[PHP_SELF]);
 exit(
1);
 }
}else{
 include(
'formulario.php');
 exit(
0);
}

function 
verifica_eliminar(){
 if(
$_SESSION['es_admin']){
  
$sql 'DELETE FROM `database` WHERE `tabla`.`id` = \''.(int)$_GET['borrar'].'\';';
  if(
mysql_query($sql,$conectar_sql)){
   return 
true;
  }else{
   return 
false;
  }
 }else{
   return 
false;
 }
}

// .. ..
?>