PHP - Programador Jr

 
Vista:

Programador Jr

Publicado por Alexander (2 intervenciones) el 12/09/2007 17:14:20
Creo que me quemé el cerebro por qu en ose me ocurre como hacerlo. Les paso un pedazo del código a ver si tienen alguna sugerencia. Lo que van a ver a continuacion es la parte del codigo donde mando un reporte desde una base de datos a cada linea quiero agregarle un botón de eliminar, osea, que elimine la información de esa línea de la base de datos pero com opodrán ver uso un while y los botones se copian no se como identificar cada renglón. Cuento con un campo para cada renglón cual no aparece) llamado ID y es uúnico para cada elemento. de alguna forma quiero asociar el botton al momento de imprimirse con el ID para que onclick pueda llamar a una funcion y borre el elemento con esa ID de la base de datos.

Gracias

CODE
if(mysql_num_rows(mysql_query("SELECT * FROM consultor WHERE nombre = '$_REQUEST[nombre]' OR
modulo='$_REQUEST[modulo]'")))
{
$result=mysql_query("SELECT * FROM consultor WHERE nombre='$_REQUEST[nombre]' OR modulo='$_REQUEST[modulo]'");

//creo el header de la tabla

echo "<table border='1' width='100%'>
<tr>
<th>Nombre</th>
<th>Dirección</th>
<th>Teléfono</th>
<th>Celular</th>
<th>E-mail</th>

<th>Currículum</th>
<th>Módulo</th>
<th>Fecha de Ingreso</th>
<th>Visa</th>
<th>Status</th>
<th>Eliminar</th>
</tr>";

//intoduzco la informacion en la tabla
while ($row = mysql_fetch_array($result))

{
$x[]=$y++;
echo "<tr>";
echo "<td>" . $row["nombre"] . "</td>";
echo "<td>" . $row["direccion"] . "</td>";
echo "<td>" . $row["telefono"] . "</td>";
echo "<td>" . $row["celular"] . "</td>";
echo "<td>" . $row["email"]. "</td>";
echo "<td>" . $row["curriculum"] . "</td>";
echo "<td>" . $row["modulo"] . "</td>";
echo "<td>" . $row["fechadeingreso"] . "</td>";
echo "<td>" . $row["visa"]. "</td>";
echo "<td>" . $row["status"] . "</td>";
echo "<td><button onclick=\"borrar()\">Eliminar</button></td>";

//he aqui el problema, cada boton es una copia no se me ocurre como asignar un vaolr para saber que elemento borrar después
echo "</tr>";
}
echo "</table>";


}else{echo "No se encontraron resultados";}


//esta será la funcion para borrar el elemento de la base de datos
function borrar(){


msql_query("DELETE FROM consultor WHERE ID='$x'");
echo "borrado";
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Programador Jr

Publicado por Nicolás (154 intervenciones) el 12/09/2007 18:28:42
Al parecer desde el boton estas llamando a una funcion PHP... eso no es posible. Yo te recomiendo que utilices form para guardar los datos (id) del registro que quieres borrar y que desde el boton llames a una funcion javascript que modifique el id del form y haga el submit. Mira esto...

// en la parte donde muestras el boton (cambia id por lo que corresponda):
echo "<td><button onclick=\"borrar(".$row['id'].")\">Eliminar</button></td>";

// el formulario
<form action="" method="post" name="formulario">
<input type="hidden" name="nombre" value="<?php echo $_REQUEST['nombre']; ?>">
<input type="hidden" name="modulo" value="<?php echo $_REQUEST['modulo']; ?>">
<input type="id" name="nombre" value="">
</form>

// funcion javascript:
function borrar ( id ) {
document.formulario.id.value = id;
document.formulario.submit();
}

// Al principio de la pagina:

if (isset($_POST['id'])) {
mysql_query("DELETE FROM consultor WHERE id = ".$_POST['id']);
}

Entonces la cosa sería asi: muestras cada registro de la consulta y le pones un boton con la funcion borrar y el id de cada registro. La funcion lo que hace es cambiar un campo oculto dentro de un form y enviarlo. El form además, envia los datos que habias recibido (para no perderlos cuando mandes a eliminar un registro). Al enviar el formulario, el PHP recoge el ID que has enviado y lo elimina de la tabla. Luego se muestran nuevamente los registros, esta vez sin el que eliminaste. Este codigo no lo he probado, asi que es probable que tenga errores de sintaxis... velo...

Despues hay unas custiones que no me convencen, asi que te las enumero:
1- por qué utilizas $_REQUEST?? podrías utilizar $_POST o $_GET (el que estes utilizando). Esto es para una mejor comprencion del codigo.
2- utilizas $_REQUEST[nombre] en lugar de $_REQUEST['nombre'] o $_REQUEST["nombre"] (el indice del array son strings...) eso no te marca error???
3- haces dos consultas cuando en realidad con una te tiene que alcanzar...

$result=mysql_query("SELECT * FROM consultor WHERE nombre='$_REQUEST[nombre]' OR modulo='$_REQUEST[modulo]'");
if (mysql_num_rows($result)) {
.....
.....
.....
}

De esta forma realizas una sola vez la consulta...

Bueno... ya escribí bastante... me avisas si te fué de ayuda o si hay algo que no entiendes.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Programador Jr

Publicado por Alexander (6 intervenciones) el 12/09/2007 21:03:55
Ok. Lo pondré en páctica. Te dire después si me funciona o no. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me da

Publicado por Alexander (6 intervenciones) el 13/09/2007 17:13:58
Bueno, he estado intentando pero por algo que seguramente estoy haciendo mal o desconosco, no me sale. haber si me puedes ayudar en esta parte. Todavía no logro borrar los registros. No entiendo bien como identificar cada uno con el botón o la función borrar. Hasta ahora es así como tengo el código;

<html>
<head>
<?php include("mysql_fun.php");?>

<script type="text/javascript">
function borrar ( id ) {
document.formulario.id.value = id;
document.formulario.submit();
}
</script>
<?php

$con=connect("localhost","root","");

selectDB("consultores", $con);

if (isset($_POST['id'])) {
mysql_query("DELETE FROM consultor WHERE id = ".$_POST['id']);
}

if(mysql_num_rows(mysql_query("SELECT * FROM consultor WHERE nombre = '$_POST[nombre]' OR
modulo='$_POST[modulo]'")))
{
$result=mysql_query("SELECT * FROM consultor WHERE nombre='$_POST[nombre]' OR modulo='$_POST[modulo]'");

echo "<table border='1' width='100%'>
<tr>
<th>Nombre</th>
<th>Dirección</th>
<th>Teléfono</th>
<th>Celular</th>
<th>E-mail</th>

<th>Currículum</th>
<th>Módulo</th>
<th>Fecha de Ingreso</th>
<th>Visa</th>
<th>Status</th>
<th>Eliminar</th>
</tr>";

while ($row = mysql_fetch_array($result))

{

echo "<tr>";
echo "<td>" . $row["nombre"] . "</td>";
echo "<td>" . $row["direccion"] . "</td>";
echo "<td>" . $row["telefono"] . "</td>";
echo "<td>" . $row["celular"] . "</td>";
echo "<td>" . $row["email"]. "</td>";
echo "<td>" . $row["curriculum"] . "</td>";
echo "<td>" . $row["modulo"] . "</td>";
echo "<td>" . $row["fechadeingreso"] . "</td>";
echo "<td>" . $row["visa"]. "</td>";
echo "<td>" . $row["status"] . "</td>";
echo "<td><button onclick=\"borrar(".$row['id'].")\">Eliminar</button></td>";
echo "</tr>";
}
echo "</table>";


}else{echo "No se encontraron resultados";}


close_con($con)
?>

</head>

<body>

<form action="" method="post" name="formulario">
<input type="id" name="id" value="">
</form>

</body>

</html>

Voy a explicarte. es una consulta donde anteriormente envié todos los datos por post. Como dije antes, quiero añadir un botón al final de cada renglón para borrar ese registro los cuales tienen un campo ID que se genera automáticamente en la base de datos (SQL). Y sobre $_POST[nombre], no me causa error alguno, debería? cual sería la sintaxis correcta?

Alex
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No me da

Publicado por Nicolás (154 intervenciones) el 13/09/2007 17:35:24
Has lo siguiente. Donde imprimes el id (en el boton) ponlo con comillas... de esta manera:

echo "<td><button onclick=\"borrar('".$row['id']."')\">Eliminar</button></td>";

de esta manera envias el id a la funcion javascript como un string.

Todo esto suponiendo que posees una columna que se llama "id" no es cierto???...
si el campo que utilizas como clave de la tabla tiene otro nombre, debes cambiarlo...

Tambien debes agregar en el formulario dos campos para no perder el nombre y el modulo:
EPAAAAA!!! aqui encontré un pequeño error (que puede afectar). Los campos del form deben ser de tipo "hidden"... chequea eso...

<form action="" method="post" name="formulario">
<input type="hidden" name="id" value="">
<input type="hidden" name="nombre" value="<?php echo $_POST['nombre']; ?>">
<input type="hidden" name="modulo" value="<?php echo $_POST['modulo']; ?>">
</form>

Tambien puedes ahorrarte una consulta... ya lo habia puesto antes y ahora lo repito:

$result=mysql_query("SELECT * FROM consultor WHERE nombre='".$_POST['nombre']."' OR modulo='".$_POST['modulo']."'");

if(mysql_num_rows($result))
{
...............
}

Fijate que los indices del array $_POST los trabajo como strings... acostumbrate a trabajarlos asi porque es lo correcto. Si no te ha dado ningun error, es porque asi esta configurado el PHP, pero si cambias los archivos a otro servidor con otra configuracion, es muy probable que no ande bien.

Si tienes los archivos subidos a algun servidor en internet, pasanos la direccion para poder brindarte una ayuda mas completa. Tambien podrías postear la estructura de la DB o de la tabla que estamos utilizando.

Cualquier duda nos vuelves a preguntar... Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No me da

Publicado por Alexander (6 intervenciones) el 13/09/2007 18:08:25
aqui subi los archivos:

http://www.alexmila.com/prueba/modulo/modulo.zip

main.php es el menú principal. vete a busqueda consultores es ahi donde estoy trabajando ahorita.

DB: consultores
tablas: consultor, clientes

La tabla consultor contiene :

ID (int) auto incremento
nombre varchar
direccion varchar
telefono varchar
celular varchar
email varchar
curriculum varchar
modulo varchar
fechadeingreso varchar
visa int
status int


Y esa es la tabla que estoy usando con que pueda hacer esta la de clientes sera pan comido.

Los archivos que utilizaras son :

busqueda_consul.php
reporte_consul.php

Gracias

Espero que me puedas decir que me falta :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No me da

Publicado por Nicolás (154 intervenciones) el 13/09/2007 19:19:43
Ahora ando con poco tiempo... pero fijate cambiando "id" por "ID"... quizá ese sea el problema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No me da

Publicado por Nicolás (154 intervenciones) el 14/09/2007 13:41:43
Te he enviado un mail con las correcciones que creo necesarias...
Despues nos cuentas como te ha ido.
Serte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar