Foros del Web » Programando para Internet » PHP »

Añadir registros a base de datos

Estas en el tema de Añadir registros a base de datos en el foro de PHP en Foros del Web. Hola a todos: Tengo el siguiente codigo pero no consigo añadir registros a mi base de datos... Podeis ayudarme?? Codigo: <? // PROCESAMOS EL FORMULARIO ...
  #1 (permalink)  
Antiguo 08/10/2003, 15:38
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Añadir registros a base de datos

Hola a todos:

Tengo el siguiente codigo pero no consigo añadir registros a mi base de datos... Podeis ayudarme??



Codigo:



<?
// PROCESAMOS EL FORMULARIO

if (@$enviar) {
//conectamos a la base de datos
$conexion = mysql_connect("localhost", "usuario", "pass")
or die("<b>Problema en MySQL:</b> Error al conectar con la base de datos");
//seleccionamos la base de datos
$basedatos = mysql_select_db('bdatos')
or die("<b>Problema en MySQL:</b> Error al conectar con la base de datos");
// codigo SQL
$sql = "INSERT INTO tabla_basedatos (Nombre, Apellidos, mail, Via, Grado, Sector, Escuela, Fecha) VALUES ('$Nombre', '$Apellidos', '$mail', '$Vía', '$Grado', '$Sector', '$Escuela', '$Fecha')";
$resultado = mysql_query($sql);
echo "¡Gracias por participar en nuestra web, hemos recibido tus datos correctamente!";
}
else {
?>
<form name="encadena" method="post" action="encadena.php">
<font face="arial narrow, arial" size="2" color="#993366">Nombre</font> &nbsp;&nbsp;
<input name="Nombre" type="text" size="15" maxlength="30">&nbsp;&nbsp;
<font face="arial narrow, arial" size="2" color="#993366">Apellidos</font> &nbsp;&nbsp;
<input name="Apellidos" type="text" size="30" maxlength="50">&nbsp;&nbsp;
<p>
<font face="arial narrow, arial" size="2" color="#993366">E-mail</font> &nbsp;&nbsp;
<input name="mail" type="text" size="30" maxlength="50">&nbsp;&nbsp;
<div align="center">
<p>
<font face="arial narrow, arial" size="2" color="#993366">Vía</font> &nbsp;&nbsp;
<input name="Grado" type="text" size="10" maxlength="40">&nbsp;&nbsp;
<font face="arial narrow, arial" size="2" color="#993366">Grado</font> &nbsp;
<input name="Sector" type="text" size="5" maxlength="8">&nbsp;&nbsp;
<font face="arial narrow, arial" size="2" color="#993366">Sector</font> &nbsp;
<input name="Escuela" type="text" size="15" maxlength="40">&nbsp;&nbsp;
<p>
<font face="arial narrow, arial" size="2" color="#993366">Escuela</font> &nbsp;
<input name="Fecha" type="text" size="15" maxlength="40">&nbsp;&nbsp;
<font face="arial narrow, arial" size="2" color="#993366">Fecha</font> &nbsp;
<input name="Fecha" type="text" size="8" maxlength="40">&nbsp;&nbsp;
<font face="arial narrow, arial" size="2" color="#993366">(Por
ejemplo: 01/01/03)</font> </div>
<p align="center">
<input type="image" Name="Enviar" SRC="../imagenes/Estructura/Envia.jpg" >
</p>
</form>

<? //FIN
}
?>
</td>
</tr>
<tr>

<td valign="top">
<font face='Arial, Helvetica, sans-serif' size='4' color='#003399'><i>&nbsp;Últimos encadenamientos:</i></font><p>
<?
/********* MOSTRAMOS LOS ÚLTIMOS 20 RESULTADOS DE LA BASE DE DATOS *********/
$conexion = mysql_connect("localhost", "usuario", "pass")
or die("<b>Problema en MySQL:</b> Error al conectar con la base de datos");
//seleccionamos la base de datos
$basedatos = mysql_select_db(bdatos,$conexion);
// codigo SQL
$SQLConsulta = "SELECT * FROM tabla_basedatos ORDER BY Fecha DESC LIMIT 0,20";
$consulta = mysql_query($SQLConsulta);

while ($num = mysql_fetch_array($consulta)){
echo "<div class='encadena'>";
echo "<a href='object2.php?n=".$num["Nombre"]."&s=".$num["Apellidos"]."' class='encadena'>".$num["Nombre"]."&nbsp;".$num["Apellidos"]."</a>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;".$num["Via"]."&nbsp; &nbsp;&nbsp;".$num["Grado"]."&nbsp; &nbsp;&nbsp;".$num["Sector"]."&nbsp; &nbsp;&nbsp;".$num["Escuela"]."&nbsp; &nbsp;&nbsp;".$num["Fecha"]."<br>";
echo "</div>";
}
?>



Gracias
  #2 (permalink)  
Antiguo 08/10/2003, 16:09
 
Fecha de Ingreso: abril-2003
Ubicación: Monterrey, Nuevo Leon Mex
Mensajes: 300
Antigüedad: 21 años
Puntos: 3
En tu codigo te falto conectarlo a la base de datos para que te inserte el registro

Codigo:



<?
// PROCESAMOS EL FORMULARIO

if (@$enviar) {
//conectamos a la base de datos
$conexion = mysql_connect("localhost", "usuario", "pass")
or die("<b>Problema en MySQL:</b> Error al conectar con la base de datos");
//seleccionamos la base de datos
$basedatos = mysql_select_db('bdatos')
or die("<b>Problema en MySQL:</b> Error al conectar con la base de datos");
// codigo SQL
$sql = "INSERT INTO tabla_basedatos (Nombre, Apellidos, mail, Via, Grado, Sector, Escuela, Fecha) VALUES ('$Nombre', '$Apellidos', '$mail', '$Vía', '$Grado', '$Sector', '$Escuela', '$Fecha')";
$resultado = mysql_query($sql,$conexion);

Pruebalo ya te va a funcionar.

Saludos...
  #3 (permalink)  
Antiguo 09/10/2003, 00:55
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
No entiendo:

Creo que si he conectado a la base de datos.

Puedes decirme donde me falta codigo??

Un saludo gracias
  #4 (permalink)  
Antiguo 09/10/2003, 02:06
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Operadormail:

El cambio que te propone pahs5809 es al momento de calcular tu variable $resultado...

al utilizar mysql_query debes pasarle como parámetros el código SQL que almacenas en la variable $sql y también la variable donde almacenaste la conexión, en tu caso $conexion.

En fin, quedaría así:
$resultado = mysql_query($sql,$conexion);

En realidad, se suele utilizar esta forma también para la selección de la base de datos:
mysql_select_db($bdatos, $conexión);

Esto es lo que te puso pash5809, yo sólo te amplío un poco su respuesta...

Saludos
  #5 (permalink)  
Antiguo 09/10/2003, 07:12
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Hola de nuevo:

Sigo sin poder añadir registros a la BBDD.

Cuando pulso enviar, solo me muestra otra vez la pagina del formulario, con los campos vacios, pero sin ningun registro añadido.
  #6 (permalink)  
Antiguo 09/10/2003, 07:26
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

¿Quieres decir que no te sale el mensaje "¡Gracias por ... !"? Eso puede ser porque el boton image del formulario se llama Enviar y tu haces el if con $enviar. Y en PHP no es lo mismo mayusculas que minusculas. Mira de ponerlos iguales.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 09/10/2003, 07:32
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Hola:

Pues la verdad es que no me habia dado cuenta de ese detalle, pero sigo igual.
  #8 (permalink)  
Antiguo 09/10/2003, 07:43
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bueno, pero todavia no has dicho si te sale el mensaje o no. Porque si no te sale es que no entra en el if. Ademas, yo le quitaria el @.

Por cierto, ¿que valor tiene el register_globals en el php.ini o en phpinfo()?

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 09/10/2003, 07:52
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Hola Josemi:

Lo tengo a ON

si le quito la "@" me sale una notificación de que la variable $enviar no existe.

El mensaje si que esta dentro del if

Un saludo

Última edición por Operadormail; 09/10/2003 a las 07:56
  #10 (permalink)  
Antiguo 09/10/2003, 08:02
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Vale, pero el error solo te lo da cuando se carga la primera vez el formulario, no despues de dar al boton. Y lo del mensaje, lo decia porqueen una respuesta anterior ponias que te volvia a salir el formulario.

Si te sale el mensaje, es que si se ejecuta el if (puedes volver a poner el @).

Siguiente paso, mirar si MySQL da algun mensaje de error. Para eso usamos la funcion mysql_error(). Haz:
Código PHP:
$resultado mysql_query($sql) or die("Error en $sql <br>MySQL dice: ".mysql_error()); 
Esto te dara el mensaje de error de MySQL, si es que hay alguno.

Lo pones y nos cuentas.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #11 (permalink)  
Antiguo 09/10/2003, 08:08
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Hola de nuevo:

No me sale ningun error.

:(((
  #12 (permalink)  
Antiguo 09/10/2003, 08:23
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Pero te sale el mensaje de gracias, o no. Porque si te sale el mensaje de gracias, y el mysql_error() no da ningun mensaje, es que la consulta se ha ejecuta correctamente.

Haz la prueba de ponerle el or die() al query de la parte de mostrar, no vaya a ser que si inserte, pero el fallo sea al visualizar.

Y si es posible, intenta ver el contenido de la base de datos por otro medio, con phpmyadmin por ejemplo.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #13 (permalink)  
Antiguo 09/10/2003, 08:34
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Hola de nuevo

He mirado lo ue me dicespero en phpmyadmin, tampoco me figura ningun registro

Por cierto, el mensaje de Gracias por ... no me aparece cuando envio el formulario.

Un saludo

Última edición por Operadormail; 09/10/2003 a las 08:59
  #14 (permalink)  
Antiguo 09/10/2003, 09:54
 
Fecha de Ingreso: enero-2002
Mensajes: 4.159
Antigüedad: 22 años, 3 meses
Puntos: 22
No veo lo $ al inicio de las varables, ni siquiera en basedatos.


Saludos.
  #15 (permalink)  
Antiguo 09/10/2003, 14:25
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Ufff

Pues dime donde por que yo ya veo $ por todas partes.

Creo que si que lo tienen...
  #16 (permalink)  
Antiguo 09/10/2003, 14:59
Avatar de Sagat  
Fecha de Ingreso: febrero-2002
Ubicación: Viña del Mar
Mensajes: 164
Antigüedad: 22 años, 2 meses
Puntos: 0
Quizas voy a hacer una observación un poco obvia, pero... te has fijado bien en que las variables de tu Base de Datos sean iguales a las que ocupas en el INSERT.


Y lo otro...en vez de utilizar la Variable $sql :

$sql = "INSERT INTO tabla (Nombre, Apellidos, mail, Via, Grado, Sector, Escuela, Fecha) VALUES ('$Nombre', '$Apellidos', '$mail', '$Vía', '$Grado', '$Sector', '$Escuela', '$Fecha')";
$resultado = mysql_query($sql);


Intenta hacerlo directamente :

mysql_query("INSERT into tabla (nombre,apellidos,mail,via,grado,sector) values ('$nombre','$apellidos','$mail','$via','$grado','$ sector')");

Finalmente quería preguntar si esta inserción de datos la ejecutas en la misma pagina del formulario o la envias hacia otra página PHP con el metodo POST ??
__________________
-:::[ Saludos ]:::- :adios:
  #17 (permalink)  
Antiguo 09/10/2003, 15:05
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Hola :

He comprobado las variables son iguales que las que figuran en el insert. Lo he mirado 100000000000... veces.

La insercion es ejecutada en la misma pagina del formulario, como pone en el codigo que postee al principio.

Probando directamente con mysql_query sin la variable $sql tampoco consigo nada.


... |(((
  #18 (permalink)  
Antiguo 09/10/2003, 15:23
 
Fecha de Ingreso: febrero-2003
Mensajes: 12
Antigüedad: 21 años, 2 meses
Puntos: 0
Ya verificaste que si entra el if, pon un mensaje al inicio del if para verificar que si entras.
  #19 (permalink)  
Antiguo 09/10/2003, 15:28
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Hola de nuevo:

Pues efectivamente el if no entra.

Puse:

if (@$enviar) {

echo " hola tronco";

...
...

}


Y no sale nada.


:(((
  #20 (permalink)  
Antiguo 09/10/2003, 15:56
 
Fecha de Ingreso: febrero-2003
Mensajes: 12
Antigüedad: 21 años, 2 meses
Puntos: 0
Prueba así

Añade esto a tu formulario

<input type="image" Name="Enviar" value="recoge" SRC="../imagenes/Estructura/Envia.jpg" >

y al inicio de tu página

$enviar=$_GET["Enviar"];
if ($enviar=="recoge)
{
tu codigo de insersión de registros
}

Se me ocurre que así te pueda funcionar
  #21 (permalink)  
Antiguo 09/10/2003, 16:01
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Nada.

Tampoco funciona.

El script no entra en el if

Que puedo hacer?
  #22 (permalink)  
Antiguo 09/10/2003, 16:26
 
Fecha de Ingreso: febrero-2003
Mensajes: 12
Antigüedad: 21 años, 2 meses
Puntos: 0
por que no haces otra página para la inserción de registros
me imagino que el problema es que el script no está recibiendo las variables correctamente
echo $enviar=$_GET["Enviar"];
te deberá imprimir en pantalla el valor de la variable si es que lo hay
  #23 (permalink)  
Antiguo 09/10/2003, 16:36
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Si mal no recuerdo, el formulario era POST. Asi que en lugar de $_GET usa $_POST. Aunque si decias que register_globals estaba a ON, no deberia ser esa la causa.

Por cierto, el fichero ese es el que llamas en el action, ¿verdad?

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #24 (permalink)  
Antiguo 09/10/2003, 18:16
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Haz lo siguiente:

Código PHP:
//Cambia la línea
if (@$enviar)... //la del comienzo
//Por ésta otra:
if (isset($_POST['enviar'])=="si"){
//El resto del código va igual en esta parte que has llamado PROCESAMOS EL FORMULARIO

////////////////////////////////////////////////////////////

//Ahora en el formulario incluye un hidden de esta forma:

<input type="hidden" name="enviar" value="si">
//antes de
<input type="image" Name="Enviar" SRC="../imagenes/Estructura/Envia.jpg" 
Yo nunca he utilizado ese type="image", pero lo probé y funciona como un "submit" o sea que la variable "enviar" se la tienes que pasar por un "hidden".
Espero haber escrito todo bien porque lo probé en la mañana y funcionó. Donde estoy ahora no hay servidor instalado y te he escrito lo que recuerdo.

Saludos
  #25 (permalink)  
Antiguo 09/10/2003, 21:47
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Ya lo revisé.. está bien.

Algunas observaciones extra:

De esta forma el atributo name de la imagen ya no es necesario. Puede quedar así:

<input type="image" SRC="../imagenes/Estructura/Envia.jpg">

Tampoco es necesario que se verifique que enviar vale "si"... Puedes utilizar simplemente:

if (isset($_POST['enviar'])) {

Na da más.. el código que puse antes funciona, pero lo arreglo acá porque habían cosas innecesarias.

Saludos
  #26 (permalink)  
Antiguo 10/10/2003, 01:33
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Gracias jpinedo, y a todos, claro.


Ya funciona con el hidden

Ufff....


Muchas gracias otra vez
  #27 (permalink)  
Antiguo 11/10/2003, 01:07
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Información Ya lo tengo...

Bueno, tengo algo más que agregar:

Estuve revisando el manual de php y encontré ese bendito type="image". Funciona, como lo dije antes, como un submit. Sólo que envía dos variables a la página de destino. Esas dos variables describen las coordenadas donde se hizo clic dentro de la imagen y están asociadas al atributo name así:

<input type="image" name="nombre" src="figurita.gif">

Entonces al hacer clic se generan dos variables:
nombre_x
nombre_y
Que contienen las coordenada "x" e "y" (horizontal y vertical) que ya expliqué antes.

Entonces...
No era necesario el "hidden". Si tu atributo name era name="enviar", bastará con averiguar si está inicializada la variable $_POST['enviar_x'].

La primera línea podría quedar así:
Código PHP:
if (isset($_POST['enviar_x'])){ 
...asumiendo que al final tu type="image" tiene name="enviar".
Así, como digo ya no era necesario el "hidden".

Saludos
  #28 (permalink)  
Antiguo 11/10/2003, 02:14
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Muchas gracias por todas las molestias que te tomaste.

Un fuerte saludo.
  #29 (permalink)  
Antiguo 23/10/2003, 23:26
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
No hombre! si no es ninguna molestia. Estamos unas veces para ayudar... otras para que nos ayuden.

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 21:34.