Foros del Web » Programando para Internet » PHP »

Alguien sabe cual es el error que estoy teniendo

Estas en el tema de Alguien sabe cual es el error que estoy teniendo en el foro de PHP en Foros del Web. Alguien sabe cual es el error que estoy teniendo form.php <html> <?php $link = mysql_connect("localhost", "root", "vertrigo"); mysql_select_db("mydb", $link); $result = mysql_query("SELECT nombre, direccion, telefono, ...
  #1 (permalink)  
Antiguo 06/01/2007, 05:39
 
Fecha de Ingreso: junio-2006
Mensajes: 66
Antigüedad: 17 años, 10 meses
Puntos: 2
Alguien sabe cual es el error que estoy teniendo

Alguien sabe cual es el error que estoy teniendo

form.php
<html>
<?php
$link = mysql_connect("localhost", "root", "vertrigo");
mysql_select_db("mydb", $link);
$result = mysql_query("SELECT nombre, direccion, telefono, email FROM agenda", $link);
?>
<h1>Este es el formulario para modificar un registro</h1>
<form method="post" action="anadir_registro.php">
</form>
<table border="1">
<tr>
<td><b>Nombre&nbsp;</b></td>
<td><b>Dirección&nbsp;</b></td>
<td><b>Teléfono&nbsp;</b></td>
<td><b>Email&nbsp;</b></td>
<td><b>Guardar cambios&nbsp;</b></td>
<td><b>Borrar&nbsp;</b></td>
</tr>
<?php
while ($row = mysql_fetch_row($result)){
echo "<tr> \n";
/*El problema que tengo en los próximos 4 <td> es que a mi entender la función
mysql_fetch_row crea un array y tendría que mostrar la info de la db
Cuando uso solo td funciona (muestra la consulta), pero cuando lo pongo dentro de un <input> deja de funcionar*/

echo '<td><input type="Text" name="nombre" value=" $row[0] "></td>';
echo '<td><input type="Text" name="direccion" value=" $row[1] "></td>';
echo '<td><input type="Text" name="telefono" value=" $row[2] "></td>';
echo '<td><input type="Text" name="email" value=" $row[3] "></td>';

/*Lo que busco es que este botón guarde los datos de la columna en que esta segun el $id*/
echo '<td><input type="submit" name"guardar" value=" guardar "></td>';
/*Lo que busco es que este boton borre los datos de la columna en que esta según el $id*/echo '<td><input type="submit" name="borrar" value=" borrar "></td>';
/*En estos dos últimos <td> también me falta el código para borrar y editar, que no se como ubicarlos*/
echo "</tr> \n";
}
?>
<table>
</form>
</html>


Código de la db

Create database mydb;
Use mydb;

CREATE TABLE `agenda` (
`id` int(11) NOT NULL auto_increment,
`nombre` char(50) default NULL,
`direccion` char(100) default NULL,
`telefono` char(15) default NULL,
`email` char(50) default NULL,
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Aca el código para añadir registros (Este si funciona bien)

anadir_registro.php

<?php
// process form
$link = mysql_connect("localhost", "root", "vertrigo");
mysql_select_db("mydb", $link);
$sql = "INSERT INTO agenda (nombre, direccion, telefono, email)";
$sql .= "VALUES ('$_POST[nombre]', '$_POST[direccion]', '$_POST[telefono]', '$_POST[email]')";
$result = mysql_query($sql);
echo "¡Gracias! Hemos recibido sus datos.\n";
?>


form.htm

<html>
<body>
<form method="post" action="anadir_registro.php">
Nombre :<input type="Text" name="nombre">
<br>
Dirección:<input type="Text" name="direccion">
<br>
Teléfono :<input type="Text" name="telefono">
<br>
E-mail :<input type="Text" name="email">
<br>
<input type="Submit" name="enviar" value="Aceptar información">
</form>
</body>
</html>


Aunque no lo crean estuve toda la noche para hacer este desastre
  #2 (permalink)  
Antiguo 06/01/2007, 05:53
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Alguien sabe cual es el error que estoy teniendo

Cada uno de los input tienes que ponerlos así:

Código PHP:
echo '<td><input type="Text" name="nombre" value="'.$row[0].'"></td>'
o mejor así, ya que es más claro:

Código PHP:
echo '<td><input type="Text" name="nombre" value="'.$row[nombre].'"></td>'

Última edición por holahola; 06/01/2007 a las 06:29 Razón: con $row[nombre]
  #3 (permalink)  
Antiguo 06/01/2007, 06:08
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Alguien sabe cual es el error que estoy teniendo

En cuanto a la modificación y borrado, yo lo haría de otra forma, pero intentando hacerlo como lo tienes pensado, podrías hacer lo siguiente:

Primero, modificar el action del formulario: action="modificar_borrar.php"

Segundo: en el formulario debes de enviar el $id como campo oculto. Por lo tanto, la select que tienes deberá de recuperar tambien el campo id.

Código PHP:
$result mysql_query("SELECT id, nombre, direccion, telefono, email FROM agenda"$link); 
o
Código PHP:
$result mysql_query("SELECT * FROM agenda"$link); 
Tercero: en el nuevo script modifcar_borrar.php lo primero deberás distinguir si el botón que se cliqueó fue $_POST['guardar'] ó $_POST['borrar'] y dependiendo de ello montarás la query para update ó delete (y les añadirás el WHERE id=$id)

Ahora me marcho a comer. Luego, si aún sigues con dudas, trataré de ayudarte.

Un saludo.

Última edición por holahola; 06/01/2007 a las 06:42 Razón: aclaración de la select con el id
  #4 (permalink)  
Antiguo 07/01/2007, 02:31
 
Fecha de Ingreso: junio-2006
Mensajes: 66
Antigüedad: 17 años, 10 meses
Puntos: 2
Re: Alguien sabe cual es el error que estoy teniendo

De nuevo errores
Que puede ser lo que esta andando mal el form.php funciona. Pero cuando los datos son enviados a modificar_borrar.php. Este ultimo devuelve los dos mensajes de error que puse en else. Es como que no recibe el id del mensaje.

Form.php
<html>
<?php
$link = mysql_connect("localhost", "root", "vertrigo");
mysql_select_db("mydb", $link);
$result = mysql_query("SELECT id, nombre, direccion, telefono, email FROM agenda", $link);
?>
<h1>Este es el formulario para modificar un registro</h1>
<form method="post" action="modificar_borrar.php">
<table border="1">
<tr>
<td><b>Nombre&nbsp;</b></td>
<td><b>Dirección&nbsp;</b></td>
<td><b>Telefono&nbsp;</b></td>
<td><b>Email&nbsp;</b></td>
<td><b>Guardar cambios&nbsp;</b></td>
<td><b>Borrar&nbsp;</b></td>
</tr>
<?php
while ($row = mysql_fetch_row($result)){
echo "<tr> \n";
/*El problema que tengo en los proximos 4 >td> es que a mi entender la funcion
mysql_fetch_row crea un array y tendria que mostrar la info de la db
Cuando uso solo td funciona (muestra la consulta), pero cuando lo pongo
dentro de un <input> deja de funcionar*/

//En este <hidden" creo que es donde tengo el error pero no se solucionarlo
echo '<input type="hidden" name="id" value="'.$row[0].'">';
echo '<td><input type="Text" name="nombre" value="'.$row[1].'"></td>';
echo '<td><input type="Text" name="direccion" value="'.$row[2].'"></td>';
echo '<td><input type="Text" name="telefono" value="'.$row[3].'"></td>';
echo '<td><input type="Text" name="email" value="'.$row[4].'"></td>';

/*Lo que busco es que este boton guarde los datos de la columna en que esta segun el $id*/
echo '<td><input type="submit" name"guardar" value="guardar"></td>';
/*Lo que busco es que este boton borre los datos de la columna en que esta segun el $id*/
echo '<td><input type="submit" name="borrar" value="borrar"></td>';
/*En estos dos ultimos <td> tambien me falta el codigo para borrar y editar*/
echo "</tr> \n";
}
?>
<table>
</form>
</html>

modificar_borrar.php
<?php
$link = mysql_connect("localhost", "root", "vertrigo");
mysql_select_db("mydb",$link);
//Comprobamos si hemos recibido datos del boton (guardar)
if ($guardar) {
//Actualizamos
$sql = "UPDATE agenda SET nombre='$nombre', direccion='$direccion', ";
$sql .= "telefono='$telefono', email='$email' WHERE id=$id";
$result = mysql_query($sql);
} else {
echo "No fue posible actualizar el registro";
}
//Comprobamos si hemos recibido datos del boton (borrar)
if ($borrar) {
// Borramos
$sql = "DELETE FROM agenda WHERE id=$id";
$result = mysql_query($sql);
}else{
echo "Debe especificar un 'id'.\n";
}
?>


Otra cosa cual es la diferencia entre
If ($_POST['guardar']) {
Instrucciones
}

y
If ($guardar){
Instrucciones
}


Por ultimo
Holahola cuando dijiste yo lo aria de otra forma a que te referías.
Pregunto porque de seguro debe haber una forma más eficaz ya que mi programación es un desastre.
  #5 (permalink)  
Antiguo 07/01/2007, 03:15
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Alguien sabe cual es el error que estoy teniendo

Vayamos por partes:
El hidden parece que está bien. El error está en el script modificar_borrar.php. Debes de tener en cuenta que, para recibir una variable que te ha enviado un formulario (con el metodo post), tienes que recibirla con $_POST. En el caso de tu id, sería $_POST[id]. Éste lo puedes descarga sobre una variable (por ejemplo $id) y luego usar esta variable, o siempre que necesites utilizar el id utilizar el $_POST[id], a tu gusto.
Para comprobar lo que se recibe normalmente se hacen unos echo de las variables. En tu caso yo haría un echo 'el id es: '.$_POST[id]; y comprobaría si el formulario te lo envió
-------------------------
En el caso de los botones sucede lo mismo. Tienes que recibirlos con el $_POST
-------------------------

Espero que te vaya funcionando. Luego, más adelante, te podría explicar como lo hago yo.

Un saludo

PD: Te recomiendo que, por claridad en tu código, utilices el $row[nombre] etc... en lugar de $row[1] etc.... Funcionan los dos, pero es más claro el primero.

Última edición por holahola; 07/01/2007 a las 03:22 Razón: postdata
  #6 (permalink)  
Antiguo 07/01/2007, 03:32
 
Fecha de Ingreso: junio-2006
Mensajes: 66
Antigüedad: 17 años, 10 meses
Puntos: 2
Re: Alguien sabe cual es el error que estoy teniendo

o sea que tendría que descargarlo en una variable así:

$id = $_POST[id];

Entonces donde dice $id ahora si va a funcionar
WHERE id=$id

Ahora lo pruebo
  #7 (permalink)  
Antiguo 07/01/2007, 03:34
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Alguien sabe cual es el error que estoy teniendo

Efectivamente. Suerte.

Y, como habrás adivinado, en la cláusula SET del update puedes hacer lo mismo con los campos $nombre, etc.

Última edición por holahola; 07/01/2007 a las 03:43 Razón: set del update
  #8 (permalink)  
Antiguo 07/01/2007, 03:47
 
Fecha de Ingreso: junio-2006
Mensajes: 66
Antigüedad: 17 años, 10 meses
Puntos: 2
Re: Alguien sabe cual es el error que estoy teniendo

Lo hice y me sigue tirando los mensajes de error como si nada.
Probé cargándolo en una variable, y después probé poniendo WHERE id=$_POST[id] en los dos where pero no funciono.


Estas seguro que con el while el hidden se ejecuta mientras esita un nuevo registro al igual que los otros campos. Porque no entiendo en que me puedo estar equivocando.
  #9 (permalink)  
Antiguo 07/01/2007, 03:49
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Alguien sabe cual es el error que estoy teniendo

Puedes poner aquí el código de modificar_borrar.php, según te ha quedado?

Has hecho el echo que te he recomendado, al principio, para ver lo que recibes en el id?.
  #10 (permalink)  
Antiguo 07/01/2007, 03:56
 
Fecha de Ingreso: junio-2006
Mensajes: 66
Antigüedad: 17 años, 10 meses
Puntos: 2
Re: Alguien sabe cual es el error que estoy teniendo

Asi me quedo

<?php
$link = mysql_connect("localhost", "root", "vertrigo");
mysql_select_db("mydb",$link);
//Comprobamos si hemos recibido datos del boton (guardar)
if ($guardar) {
//Actualizamos
$sql = "UPDATE agenda SET nombre='$nombre', direccion='$direccion', ";
$sql .= "telefono='$telefono', email='$email' WHERE id=$_POST[id]";
$result = mysql_query($sql);
} else {
echo "No fue posible actualizar el registro";
}
//Comprobamos si hemos recibido datos del boton (borrar)
if ($borrar) {
// Borramos
$sql = "DELETE FROM agenda WHERE id=$_POST[id]";
$result = mysql_query($sql);
}else{
echo "Debe especificar un 'id'.\n";
}
?>


A lo del echo no lo hice porque no entendí bien como

Última edición por hernan22115; 07/01/2007 a las 03:56 Razón: ortografia
  #11 (permalink)  
Antiguo 07/01/2007, 03:57
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Alguien sabe cual es el error que estoy teniendo

Efectivamente tienes razón. Existe un problema con la selección que estás haciendo en el primer Form.php.

Resulta que estás haciendo una select esperando recibir todos los contactos que tienes en tu agenda. Esto no puedes hacerlo así. Se supone que cuando quieres borrar o modificar un registro PRIMERO TIENES QUE SELECCIONAR ESE REGISTRO Y SOLO ESE.
  #12 (permalink)  
Antiguo 07/01/2007, 04:01
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Alguien sabe cual es el error que estoy teniendo

Respecto al modificar_borrar.php que pones:
El $guardar no tiene nada: tienes que poner $_POST[guardar]. Y lo mismo le pasa al $borrar. Es por esto por lo que se te va por el else.
  #13 (permalink)  
Antiguo 07/01/2007, 04:01
 
Fecha de Ingreso: junio-2006
Mensajes: 66
Antigüedad: 17 años, 10 meses
Puntos: 2
Re: Alguien sabe cual es el error que estoy teniendo

o sea que no hay forma de mostrar todos los registros a la vez y ponerle un enlace para mostrar o editar
  #14 (permalink)  
Antiguo 07/01/2007, 04:03
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Alguien sabe cual es el error que estoy teniendo

Claro que existe forma, pero no como la has planteado.

Para que esto te funcione, previamente tienes que seleccionar el registro que quieres modificar o borrar. Y entonces si te funcionaría. Pero tienes que seleccionar uno y sólo uno.
  #15 (permalink)  
Antiguo 07/01/2007, 04:07
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Alguien sabe cual es el error que estoy teniendo

Si quieres, paso a explicarte la forma como yo suelo hacerlo.
  #16 (permalink)  
Antiguo 07/01/2007, 04:13
 
Fecha de Ingreso: junio-2006
Mensajes: 66
Antigüedad: 17 años, 10 meses
Puntos: 2
Re: Alguien sabe cual es el error que estoy teniendo

o sea que la forma de solucionar esto seria poniendo un botón que diga seleccionar, y la action del form seria sobre seleccionar.php. Donde este script se encargaría de mostrar en <input type=”text”> solo el campo del id=$_POST[id] que recibió. Y ahi si dar las opciones Guardar – Editar.
  #17 (permalink)  
Antiguo 07/01/2007, 04:15
 
Fecha de Ingreso: junio-2006
Mensajes: 66
Antigüedad: 17 años, 10 meses
Puntos: 2
Re: Alguien sabe cual es el error que estoy teniendo

Si me viene joya si me explicas como lo haces vos
  #18 (permalink)  
Antiguo 07/01/2007, 04:26
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Alguien sabe cual es el error que estoy teniendo

SI.

Mira. Como un compañero mío dice, a las tablas sólo se puede hacer altas, bajas, modificaciones y consultas.

Para mantener una tabla, yo lo hago así:
Lo primero, muestro fila a fila todo el contenido de la tabla.

A cada una de las filas, a su izquierda, le pongo 2 botones o 2 enlaces: uno para borrar y otro para modificar.

Si se hace clic sobre el botón borrar, arranco un borrar.php que recibe el id del que he hecho clic, y se encarga de hacer el delete.

Si se hace clic sobre el botón modificar, arranco un modificar.php que tiene dos procesos: el primero muestro el registro sobre un formulario para permitir que el usuario modifique lo que quiera y tras dar a su botón, se arranca el segundo proceso que es el que hace la modificación.

Quedaría el alta. Al principio, donde te he dicho que muestro fila a fila todo el contenido de la tabla, también pongo en la cabecera un enlace que indique "Insertar". De tal forma que si alguien hace clic sobre este enlace, se arranca otro script de insertar.php también con dos procesos similares a la modificación: el primero muestra un formulario VACIO y que tras pulsar su botón arrancaría su segundo proceso que haría el insert en la tabla.
Creo que no se me olvida nada.
  #19 (permalink)  
Antiguo 07/01/2007, 04:45
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Alguien sabe cual es el error que estoy teniendo

Te he enviado un privado.
  #20 (permalink)  
Antiguo 10/01/2007, 05:55
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Alguien sabe cual es el error que estoy teniendo

Basado en lo comentado en mi mensaje #18 de este hilo, te pongo aquí un ejemplo muy simple que te permitirá mantener una tabla, con las clásicas funciones de: alta, baja, modificación y consulta. Más abajo también te paso la estructura de la tabla.

El fichero se tiene que llamar mant_tabla.php ya que, como puedes comprobar, se llama así mismo en distintos puntos:


mant_tabla.php
Código PHP:
<?
$link 
mysql_connect('localhost','******','******');
mysql_select_db('tubasededatos',$link) or die('No pudo seleccionarse la BD.');

if (
$_POST)
{
    
$accion=$_POST["accion"];
    
$descripcion=$_POST["descripcion"];
    
$id=$_POST["id"];

    if (
$accion == 'e')
    {
        
//-modificar
        
$ssql="UPDATE mitabla SET descripcion = '".$descripcion."'  
        WHERE id="
.$id." ";
        
//echo '<br>El update es: '.$ssql;
        
mysql_query($ssql,$link) or die('Error en UPDATE mitabla'.mysql_error());
    } 
       elseif (
$accion == 'i')
    {
        
//-insertar una fila
        
$ssql "INSERT INTO mitabla (descripcion) 
            VALUES ('"
.$descripcion."') ";
        
//echo '<br>El update es: '.$ssql;
        
mysql_query($ssql,$link) or die('Error en INSERT mitabla'.mysql_error());
    } 
       else 
    {
        echo 
'Error accion en el POST: '.$accion;
        exit;
    }
}

echo 
'<h3>Listado de la Tabla</h3>';
echo 
"<a href=mant_tabla.php?accion=i>Insertar</a><br><br>";
$result mysql_query("SELECT * FROM mitabla ORDER BY id ",$link);
while(
$row mysql_fetch_array($result)) {

    
// Código para cada fila
    
echo "<a href=mant_tabla.php?id=$row[id]&accion=e>Editar</a> 
        <a href=mant_tabla.php?id=$row[id]&accion=b>Borrar</a> 
        $row[id] $row[descripcion]
        <br>"
;
}
mysql_free_result($result);

if (
$_GET)
{
    
$accion=$_GET['accion'];
    
//-accion 'e' es editar; 'b' es borrar; 'i' es insertar

    
if ($accion=='b')
    {
        
//-voy a borrar uno
        
$id=$_GET[id];
        
$result mysql_query("DELETE FROM mitabla WHERE id=$id ",$link);
        
mysql_close($link);
        
header("Location: mant_tabla.php");
        exit;
    } 
       elseif (
$accion=='e')
    {    
        
//-voy a editar y presentarlo en el formulario
        
$id=$_GET[id];
        
$result mysql_query("SELECT * FROM mitabla WHERE id=$id ",$link);
        
$row mysql_fetch_array($result);
        
$descripcion=$row["descripcion"];
        
mysql_close($link);
        
$formulario="Formulario para Modificar";
    }
       elseif (
$accion=='i')
    {
        
$descripcion="";
        
$formulario="Formulario para Insertar";
    }
       else 
    {
        echo 
'Error accion en el GET: '.$accion;
        exit;
    }

    
//-a continuación va el formulario que sirve tanto para insertar como para modificar
?>
    <hr>
    <h4><?echo $formulario;?></h4>
    <form name=f1 action="mant_tabla.php" method="post" />
        <br>Descripcion: <input type="text" name="descripcion" size="50" value="<?echo $descripcion?>" />
        <input type="hidden" name="id" value="<?echo $id?>" />
        <input type="hidden" name="accion" value="<?echo $accion?>" />
        <br><input type="submit" value=" Enviar " style="margin-top: 5ex;" />
    </form>
<?
}
?>
Y aquí tienes el diseño de la tabla. Sólo tiene 2 campos, pero el funcionamiento sería similar para los campos que quieras.

Cita:
CREATE TABLE `mitabla` (
`id` tinyint(11) unsigned NOT NULL auto_increment,
`descripcion` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM ;

--
-- Volcar la base de datos para la tabla `mitabla`
--

INSERT INTO `mitabla` VALUES (1, 'el primer registro');
Espero que te sirva, a tí, o a cualquier otro que lo necesite. Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:09.