Foros del Web » Programando para Internet » PHP »

insertar en base de datos

Estas en el tema de insertar en base de datos en el foro de PHP en Foros del Web. hola a todos de nuevo. creía que había solucionado el problema con la última propuesta de nuestro amigo, pero me he dado cuenta que no ...
  #1 (permalink)  
Antiguo 14/09/2006, 04:50
 
Fecha de Ingreso: agosto-2006
Mensajes: 91
Antigüedad: 17 años, 8 meses
Puntos: 0
insertar en base de datos

hola a todos de nuevo. creía que había solucionado el problema con la última propuesta de nuestro amigo, pero me he dado cuenta que no y he estado varias semanas así hasta ahora que me he dado cuenta. el tema está en lo siguiente (os lo pongo de nuevo aunque me llaméis pesada). como os dije más arriba, tenía un formulario:
////////////////////////////////////////////////////////////////////////////////////
<FORM ENCTYPE="multipart/form-data" METHOD="POST" ACTION="add.php" name="NuevoPaciente" >
<table>
<tr>
<td>Nombre y Apellidos: </td>
<td><input type="text" name="nombre"></td>
</tr>
<tr>
<td>Datos: </td>
<td><input type="text" name="datos"></td>
</tr>
<tr>
<td>Imagen: (Sólo *.jpg)</td>
<td><input type="file" name="archivo" >
</tr>
</table>
/////////////////////////////////////////////////////////////////////////////////////
estos datos iban al archivo add.php, que era este:

////////////////////////////////////////////////////////////////////////////////////
<?php
$cnx = mysql_connect("servidor", "user", "pass");
mysql_select_db("pacientes", $cnx);
if($_FILES['archivo']['name'])
{
$local = $_FILES['archivo']['name'];
$remoto = $_FILES['archivo']['tmp_name'];
$extension = explode(".", $local);
$n = count($extension)-1;
$miext="jpg";
if(!strcasecmp($extension[$n], $miext))
{
// La variable para la BD
$ruta = "imagenes/" . $local;
if(is_uploaded_file($remoto))
{
if(move_uploaded_file($remoto, $ruta))
header("Location: exito.php");
else
header("Location: error.php");
}
else
header("Location: error.php");
mysql_query("INSERT INTO pacientes(nombre,datos,imagen) VALUES('$nombre,'$datos,'$ruta')");
}
else
header("Location: error.php");
}
else
header("Location: exito.php");
?>
/////////////////////////////////////////////////////////////////////////////////////

en la base de datos, el campo 'imagen' es un campo con las siguientes características:
VARCHAR(255) null .

bien. el amigo eits (gracias por tu ayuda, de verdad) propuso esta solución: hacer una consulta de tal forma que si el campo estaba vacío, metiera en dicho campo, el texto 'no imagen' en la base de datos. de tal forma que quedaría algo así:
/////////////////////////////////////////////////////////////////////////////////////

$cnx = mysql_connect("servidor", "user", "pass");
mysql_select_db("pacientes", $cnx);
if(empty($_post['imagen']))
{
$ruta="no imagen" ;
}
else
{
$error=false;
if($_FILES['archivo']['name'])
{
$local = $_FILES['archivo']['name'];
$remoto = $_FILES['archivo']['tmp_name'];
$extension = explode(".", $local);
$n = count($extension)-1;
$miext="jpg";
if(!strcasecmp($extension[$n], $miext))
{
// La variable para la BD
$ruta = "imagenes/" . $local;
if(is_uploaded_file($remoto))
{
if(!move_uploaded_file($remoto, $ruta))
{
$error=true;
}
}
else
{
$error=true;
}
}
else
{
$error=true;
}
}
}
if(!$error)//si no ocurrio error
{
//se inserta en la base de datos
//ruta tendra "no imagen" si la casilla esta vacia de lo contrario tendra la ruta de la imagen


mysql_query("INSERT INTO pacientes(nombre,datos,imagen) VALUES('$nombre,'$datos,'$ruta')");
header("Location: exito.php");
}
else
{
header("Location: error.php");
}
/////////////////////////////////////////////////////////////////////////////////////
hasta ahora creía que funcionaba, pues yo, al no meter imagen alguna en el campo correspondiente del formulario, en la base de datos se grababa el texto 'no imagen', que era lo que yo quería. pero he comprobado que si intento subir una imagen, la aplicación me dice que la sección se ha actualizado correctamente. sin embargo, en el campo 'imagen' me sigue metiendo el texto 'no imagen' y por lo tanto, la imagen no me la sube al directorio del servidor 'imagenes'.
es decir, antes mi aplicación lo que hacía era:
* si metía en el formulario una imagen, ésta se subía al directorio 'imagenes' que estaba en mi servidor. a su vez, en la base de datos, en el campo 'imagen' aparecía la ruta de la imagen, es decir, 'imagenes/nombre.jpg'.
* además, la aplicación estaba configurada para que las imágenes a subir sólo pudieran subirse en formato 'jpg', de tal forma que si intentaba subir una imagen en formato 'gif' por ejemplo (o en cualquier otro) me mandaba a error.php.
* por último, el problema que me encontraba entonces era que si en el formulario el campo imagen lo dejaba vacío, no me grababa los datos en la base de datos (ninguno: ni nombre, ni...) por eso pedía una solución para cuando no metiera ninguna imagen, internamente en la base de datos, en el campo 'imagen', se almacenara el dato 'no imagen'.

bien. la solución que me dio eits parecía funcionar pues cuando no insertaba en el campo imagen nada, en la base de datos aparecía el texto 'no imagen'. pero si trataba de insertar una imagen, seguía apareciendo el texto 'no imagen', es decir, no me la subía al servidor. además, si trataba de subir una imagen en formato 'gif' por ejemplo, seguía permitiéndolo, es decir, no me enviaba a la página error.php. y además no me subía la imagen.
por último, otra solución era que en el campo 'imagen' de la base de datos, pusiera por defecto 'no imagen'. el problema que tengo aquí es que si lo hago así, y en el formulario no pongo nada en el apartado imagen, el resto de datos no se me graban en la base de datos. por favor, ayúdenme. ahora sí que estoy desesperada. un saludo a todos. sé que no me defraudarán.
  #2 (permalink)  
Antiguo 14/09/2006, 04:56
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 17 años, 9 meses
Puntos: 0
$_POST['imagen']...

opino q en lugar de eso habria q coger y ver si llega el archivo

isset ($_FILES['archivo'])) y luego si el nombre esta vacio o el tamaño es 0 kbs pues que entonces use el "no imagen".

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
  #3 (permalink)  
Antiguo 14/09/2006, 05:08
Avatar de chiviwalker  
Fecha de Ingreso: marzo-2004
Ubicación: Alicante
Mensajes: 55
Antigüedad: 20 años, 1 mes
Puntos: 0
¿Y si lo haces en dos pasos?, es decir, primero un formulario solo para insertar la imagen con la posibilidad de saltarselo en caso de que no disponga de una (un link por el q mandas por get $ruta=no imagen ) y despues la inserccion de los datos.
Es una idea un poco cutre pero puede resultar aqui la dejo.
Un saludo
__________________
------------------------------------------
www.inetmarket.es
  #4 (permalink)  
Antiguo 14/09/2006, 05:33
 
Fecha de Ingreso: agosto-2006
Mensajes: 91
Antigüedad: 17 años, 8 meses
Puntos: 0
no, me temo que ninguna de esas dos opciones son válidas. por favor, alguna ayudita...????
  #5 (permalink)  
Antiguo 16/09/2006, 21:50
 
Fecha de Ingreso: septiembre-2006
Mensajes: 11
Antigüedad: 17 años, 7 meses
Puntos: 0
ahi va

mmm eso te va a costar que me presentes a unas morras.. Se me ocurre lo siguiente:

1 Que valides desde el formulario, con java script que la imagen no este vacia... de este modo quitas el "no imagen"

2 No veo cuando postas la imagen, debes postear 3 cosas:

$nombre=$_POST[nombre]
$datos=$_POST[datos]
$archivo=$_POST[archivo]

if($archivo=="")
{
$archivo="no existe la imagen"
}

insert into MEDEBESPRESENTARUNASAMIGAS values ('$nombre','$datos','$archivo')

si quierwes más ayuda: [email protected]
  #6 (permalink)  
Antiguo 19/09/2006, 10:24
 
Fecha de Ingreso: agosto-2006
Mensajes: 91
Antigüedad: 17 años, 8 meses
Puntos: 0
por favor, una respuesta... no funciona nada...

por favor, que alguien me responda... no me funciona nada de nada....
  #7 (permalink)  
Antiguo 20/09/2006, 03:15
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 17 años, 9 meses
Puntos: 0
Esto es un ejemplo de lo que tengo en un script de edición cuando se espera q pueda modificar la imagen asignada:

Código PHP:
$newimagen=0;
if (isset (
$_FILES['imagen']) && $_FILES['imagen']['size']>0) {
    
$imagen=$_FILES['imagen'];
    
$newimagen=1;
} else {
    
$imagen="";
}
if (
$imagen_size>&& (substr ($imagen_type,0,5)=="image" || $imagen_type=="application/x-shockwave-flash") || $newimagen==0) {
    
//La imagen ha llegado así que ahora se hace el proceso que sea sobre sus requisitos. Ya eso sería cosa tuya LadyArwen
} else {
    
//En este caso se asignaría el "no imagen"

A mí me funciona... no sé xq a tí no te vale tal como la planteé anteriormente o quizás no me expliqué en condiciones.

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
  #8 (permalink)  
Antiguo 20/09/2006, 07:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No se trata de que te den una respuesta "que te funcione" .. Ya he han expuesto código que -a otros les funciona-

Así que tendrás que plantearte -por qué- a tí no te funciona. Eso pasa por dos cosas:

1) Te decidas por el código que quieras usar.
2) Evaluar el problema a base de pruebas: Aquí es necesario TU colaboración.

No insistas en mensajes de "que no te funciona" así no sacamos nada. Tampoco abras temas nuevos haciendo referencia a otros mensajes tuyos donde obtivistes cierta ayuda . .piensa que aquí en el foro vemos muchoooos mensajes tú sólo piensas en tu caso y así lo tratas como "familiar" haciendo referencia a otros mensajes que el resto de usuarios no debe de estar al tanto de ellos.

Las pruebas a realizar ya te las indicaremos nosotros los que intentamos responderte o que cosas revisar (configuración de PHP .. etc).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 21/09/2006, 06:36
 
Fecha de Ingreso: agosto-2006
Mensajes: 91
Antigüedad: 17 años, 8 meses
Puntos: 0
Pregunta

querido cluster: gracias por tu respuesta. me ha aclarado mucho las cosas y lo que se puede hacer y no. de todos modos, disculpa mi ignorancia. en ningun momento está en mi afán tratar de ofender o molestar a alguien con mis preguntas. sí que te quiero garantizar, porque por tus comentarios parece que lo pones en duda, que me he vuelto loca haciendo pruebas con las diferentes soluciones que me han facilitado los compañer@s del foro, que al fin y al cabo, son lo que hacen que este foro sea cada vez más grande y mejor. pero nada, no daba con el error. desgraciadamente no tengo los conocimientos que, según se desprende de tu mensaje, tú tienes sobre el tema. ya me gustaría tenerlos. pero voy poco a poco y equivocándome mucho, que creo que es la mejor forma de hacerlo. de cualquier manera, disculpa nuevamente si te he ofendido en algo.
gracias.
  #10 (permalink)  
Antiguo 21/09/2006, 07:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por LadyArwen Ver Mensaje
querido cluster: gracias por tu respuesta. me ha aclarado mucho las cosas y lo que se puede hacer y no. de todos modos, disculpa mi ignorancia. en ningun momento está en mi afán tratar de ofender o molestar a alguien con mis preguntas. sí que te quiero garantizar, porque por tus comentarios parece que lo pones en duda, que me he vuelto loca haciendo pruebas con las diferentes soluciones que me han facilitado los compañer@s del foro, que al fin y al cabo, son lo que hacen que este foro sea cada vez más grande y mejor. pero nada, no daba con el error. desgraciadamente no tengo los conocimientos que, según se desprende de tu mensaje, tú tienes sobre el tema. ya me gustaría tenerlos. pero voy poco a poco y equivocándome mucho, que creo que es la mejor forma de hacerlo. de cualquier manera, disculpa nuevamente si te he ofendido en algo.
gracias.
En absoluto me "ofendes" .. Sólo intento hacer comentarios "constructivos".


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 12:56.