lingo5
Usuario habitual
Usuario habitual

Hola, acabo de empezar en esto de PHP y MySQL. Necesito hacer un formulario que suba a la BD varios campos de texto y una imagen. La ruta de la imagen quiero guardarla en la BD y la imagen en el directorio /uploads del servidor.

Necesito ayuda y una explicación para tontos por favor!!!!.

Resumo lo que quiero hacer:

1. el formulrio recoge los datos y una imagen

2. guarda los daos y la ruta de la imagen en la BD

3. asignamos nombre aleatorio a la imagen, le asignamos un tamaño y la guardamos en /uploads

4. Si no seleccionmos una imagen, se asigna una por defecto que he llamado 'none.jpg'

Después necesito un formulario que actualice los registros:

1.muestra los datos y la imagen del registro seleccionado

2. permite cambiar el contenido de los campos

3. permite dejar la imagen asignada, borrarla (en este caso se sustituye automáticamente por 'none.jpg) o cambiarla por otra.

4. guardalos cambios en la BD y modifica la ruta a la imagen si se ha modificado

Lo siento, no se si me he explicado bien. Por favor, vuestra ayuda será muy apreciada.

Muchas gracias

Avatar Image
@man / @woman
@man / @woman
Escrito originalmente por lingo5

1. el formulrio recoge los datos y una imagen

¿Sabes hacer esto?

lingo5
Usuario habitual
Usuario habitual

Hola....bueno en teoría si, supongo que un formulario html con todos los campos.

Avatar Image
@man / @woman
@man / @woman
Escrito originalmente por lingo5

Hola, acabo de empezar en esto de PHP y MySQL. Necesito hacer un formulario que suba a la BD varios campos de texto y una imagen. La ruta de la imagen quiero guardarla en la BD y la imagen en el directorio /uploads del servidor.

Necesito ayuda y una explicación para tontos por favor!!!!.

Resumo lo que quiero hacer:

1. el formulrio recoge los datos y una imagen

2. guarda los daos y la ruta de la imagen en la BD

3. asignamos nombre aleatorio a la imagen, le asignamos un tamaño y la guardamos en /uploads

4. Si no seleccionmos una imagen, se asigna una por defecto que he llamado 'none.jpg'

Después necesito un formulario que actualice los registros:

1.muestra los datos y la imagen del registro seleccionado

2. permite cambiar el contenido de los campos

3. permite dejar la imagen asignada, borrarla (en este caso se sustituye automáticamente por 'none.jpg) o cambiarla por otra.

4. guardalos cambios en la BD y modifica la ruta a la imagen si se ha modificado

Lo siento, no se si me he explicado bien. Por favor, vuestra ayuda será muy apreciada.

Muchas gracias

Te has expresado claramente (y todo tiene lógica), sigue con ese plan y posteas sobre los problemas que vas encontrando.

lingo5
Usuario habitual
Usuario habitual

Hola GestionXls,

pues la verdad es que me gustaría hacerlo....pero ese es mi problema, que no se como.

Avatar Image
@man / @woman
@man / @woman

Toma cada paso que has descripto como un problema, busca información, códigos, ejemplos, etc. (aprendes) y luego diseñas la solución a cada paso.

Al final lo habrás logrado.

lingo5
Usuario habitual
Usuario habitual

Hola,

he conseguido hacer el formulario que recoge datos y una imagen, me guarda los datos y la ruta de la imagen en la BD MySQL y la imagen la sube a un directorio del servidor.

Aquí está el código PHP que hace est.

$uploadDir = '../uploads/';

if(isset($_POST['upload']))
{
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];

$filePath = $uploadDir . $fileName;

//este código asigna nombre aleatorio a cada imagen

// tomamos la extensión del archivo

$ext = substr(strrchr($fileName, "."), 1);

// asignamos nombre de archivo aleatorio

$randName = md5(rand() * time());

// ya tenemos el nombre de archivo único

$filePath = $uploadDir . $randName . '.' . $ext;

$result = move_uploaded_file($tmpName, $filePath);

if (!$result) {
echo "Error subiendo el archivo";
exit;
}

// insertamos contenido del formulario en la BD

if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
$filePath = addslashes($filePath);
}
$categoria = $_POST["id_categoria"];
$articuloesp = $_POST["articulo_esp"];
$articulocat = $_POST["articulo_cat"];
$precio = $_POST["precio"];
$descripcionesp = $_POST["descripcion_esp"];
$descripcioncat = $_POST["descripcion_cat"];
if(isset($_POST['novedad'])){
$novedad = 'si';
}
else{
$novedad = 'no';
}
$query = "INSERT INTO basededatos.t_articulo (id_categoria,articulo_esp,articulo_cat,precio,descripcion_esp,descripcion_ cat,novedad,articulo_image) ".

// "VALUES (\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\')";

mysql_query($query) or die('Error, query failed : ' . mysql_error());

//echo "<br>Archivos cargados con éxito<br>";

header("Location: PC_products_inserted.php");
}
?>

Ahora necesito el formulario para actualizar los registros. Lo he intetado pero me borra siempre la ruta de la imagen en la BD. Me gustaría que sólo se modificara la ruta si se quiere cambiar la imagen, en caso contrario que se mantenga la que ya hay.

Agradecería vuestra ayuda.

Gracias

Avatar Image
@man / @woman
@man / @woman

Comento que veo:

1) en

$query = "INSERT INTO basededatos.t_articulo (id_categoria,articulo_esp,articulo_cat,precio,descripcion_esp,descripcion_ cat,novedad,articulo_image) "."VALUES (\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\')";

dentro de VALUES() deben ir las variables (allí no hay ninguna...)

2) en la misma sentencia INSERT INTO no veo en que campo se carga el path

(la variable $filePath que se crea con $filePath = $uploadDir . $randName . '.' . $ext;)

3) deducción: si no almacenas el path, no se puede borrar ni leer

lingo5
Usuario habitual
Usuario habitual

Hola, no se por que no se han pegado los valores cuando he puesto el código, los pongo aquí sin comas y sin nada porque no me deja pegarlos de otra manera:

$categoria $articuloesp $articulocat $precio $descripcionesp $descripcioncat $novedad $filePath

Funciona como he dicho antes, pero necesito ayuda para actualizar registros, ya que no consigo que la imagen se mantenga cuando edito un registro. Necesitaría que la imagen solo se cambiara si se quiere cambiar, de lo contrario que la D mantenga la que hay. No se si queda claro. Gracias.

Avatar Image
@man / @woman
@man / @woman

Se me ocurren varias cosas que pueden estar haciendo ruido, al final sugiero la 'fuerza bruta' (funciona siempre)

Al leer un registro para editarlo, también lees la url y la cargas en un campo oculto (propiedad hidden) del formulario.

Al guardar el registro editado, incluyes la url de la imagen de nuevo (pasará por _POST junto con los otros campos).

lingo5
Usuario habitual
Usuario habitual

Gracias GestionXls, pero por favr podrías darme un ejemplo con mi código....soy muy nuevo en esto de PHP y bastante m ha costado que me funcione eto.

Si me puedes indicar (explicación para tontos) como hacer el formulario y el código para actualizar me har´s un gran favor.

Gracias

Avatar Image
@man / @woman
@man / @woman

Los detalles son muchos, te doy una guía (tu tarea es aprender php, métodos GET y POST, html y mysql):

Desde la página que le permites modificar un artículo (registro) apuntas a un script pasándole el id del artículo (GET).

Creas un script que recibe el id del registro a editar, haces una consulta SQL que incluya todos los campos. Este script crea un formulario donde carga los campos (en 2 campos ocultos pones el id de la consulta y la url de la imagen) y se lo envías a quien lo edita.

ej de formulario (en este caso, no hace falta un campo oculto para poner el id del registro): <form name="editar" action="?actualizar.php&id=id_reg" method="post">

ej de campo oculto para la url: <input type="hidden" name="url" value="url_de_la_imagen">

Este formulario (luego de editados los datos) envía los datos al mismo script (u otro si lo prefieres).

El script que recibe los campos editados (actualizar.php) recupera los valores actuales, id de registro y url y los actualiza en la base de datos.

lingo5
Usuario habitual
Usuario habitual

OK, este es el formulario que muestrael contenido de un registro para editarlo:

<form action=""<? echo $PHP_SELF;?>"" method="post" enctype="multipart/form-data">

<select name="id_categoria" class="CP_loginFormFields">
                <?php
do { 
?>
<option value="<?php echo $row_categories_RS['id_categoria']?>"<?php if (!(strcmp($row_categories_RS['id_categoria'], $row_products_RS['id_categoria']))) {echo "selected=\"selected\"";} ?>><?php echo $row_categories_RS['categoria_esp']?></option>
                <?php
} while ($row_categories_RS = mysql_fetch_assoc($categories_RS));
  $rows = mysql_num_rows($categories_RS);
  if($rows > 0) {
      mysql_data_seek($categories_RS, 0);
   $row_categories_RS = mysql_fetch_assoc($categories_RS);
  }
?>
</select>

<input name="articulo_esp" type="text" class="CP_loginFormFields" value="<?php echo $row_products_RS['articulo_esp']; ?>" size="32" />

<input name="articulo_cat" type="text" class="CP_loginFormFields" value="<?php echo $row_products_RS['articulo_cat']; ?>" size="32" />

<input name="precio" type="text" class="CP_loginFormFields" value="<?php echo $row_products_RS['precio']; ?>" size="8" />

<textarea name="descripcion_esp" cols="50" rows="10"><?php echo $row_products_RS['descripcion_esp']; ?></textarea>

<textarea name="descripcion_cat" cols="50" rows="10"><?php echo $row_products_RS['descripcion_cat']; ?></textarea>

//este es el campo oculto con la URL de la imagen existente

<input name="imgUrl" type="hidden" id="imgUrl" value="../uploads/<?php  echo $row_products_RS['articulo_image']; ?>" />

//este es el campo para seleccionar imagen nueva

<input name="userfile" type="file" id="userfile" />

<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />

<input <?php if (!(strcmp($row_products_RS['novedad'],"si"))) {echo "checked=\"checked\"";} ?> name="novedad" type="checkbox" value="" />

<input name="editar" type="submit" class="box" id="editar" value="modificar producto "></form>

No se si el campo oculto con la URL es correcto.

lingo5
Usuario habitual
Usuario habitual

y este es el script que actualiza la BD. Pero no me cambia la imagen, n me mantiene la que hay y además me de error al subir archivo cuando actualizo los otros datos. Si selecciono una imagen nueva me actualiza todos los campos excepto la imagen.

<?
$uploadDir = '../uploads/';

if(isset($_POST['editar']))
{
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];

$filePath = $uploadDir . $fileName;

// get the file extension first
$ext = substr(strrchr($fileName, "."), 1);

// make the random file name
$randName = md5(rand() * time());

// and now we have the unique file name for the upload file
$filePath = $uploadDir . $randName . '.' . $ext;

$result = move_uploaded_file($tmpName, $filePath);
if (!$result) {
echo "Error uploading file";
exit;
}

if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
$filePath = addslashes($filePath);
}
$categoria = $_POST["id_categoria"];
$articuloesp = $_POST["articulo_esp"];
$articulocat = $_POST["articulo_cat"];
$precio = $_POST["precio"];
$descripcionesp = $_POST["descripcion_esp"];
$descripcioncat = $_POST["descripcion_cat"];
if(isset($_POST['novedad'])){
$novedad = 'si';
}
else{
$novedad = 'no';
}

$Sql="UPDATE basededatos.t_articulo SET id_categoria='$categoria', articulo_esp='$articuloesp', articulo_cat='$articulocat', precio='$precio', descripcion_esp='$descripcionesp', descripcion_cat='$descripcioncat', novedad='$novedad', articulo_image='$filePath' WHERE id_articulo = 'id_articulo'";

mysql_query($Sql) or die('Error, query failed : ' . mysql_error());

header("Location: PC_products_updated.php");
}
?>

Avatar Image
@man / @woman
@man / @woman

a) En esta línea:

//este es el campo oculto con la URL de la imagen existente

<input name="imgUrl" type="hidden" id="imgUrl" value="../uploads/<?php  echo $row_products_RS['articulo_image']; ?>" />

debes poner el nombre del campo que contiene la url de la imagen (asegúrate que sea así).

b) Después de esta instrucción:

$Sql="UPDATE basededatos.t_articulo SET id_categoria='$categoria', articulo_esp='$articuloesp', articulo_cat='$articulocat', precio='$precio', descripcion_esp='$descripcionesp', descripcion_cat='$descripcioncat', novedad='$novedad', articulo_image='$filePath' WHERE id_articulo = 'id_articulo'";

pon un echo $Sql; y revisa si la sentencia está bien armada.

PD: si es posible, evita postear tanto código, concéntrate en la parte que interesa.

lingo5
Usuario habitual
Usuario habitual

Hola,

bueno ya hemos avanzado algo. Ahora puedo actualizar la imagen si selecciono una nueva. Si actualizo el resto de datos y dejo la imagen que ya había, recibo el error "Error uploading file".

Avatar Image
@man / @woman
@man / @woman
Escrito originalmente por lingo5

bueno ya hemos avanzado algo. Ahora puedo actualizar la imagen si selecciono una nueva. Si actualizo el resto de datos y dejo la imagen que ya había, recibo el error "Error uploading file".

Tendrás que, antes de intentar subir la imagen, comprobar si ya esta...

lingo5
Usuario habitual
Usuario habitual

uuuufffff....esto si que ya no tengo ni idea de como hacerlo. De todas maneras el script asigna un nombre aleatorio cada vez....ayuda porfa.

Avatar Image
@man / @woman
@man / @woman
Escrito originalmente por lingo5

uuuufffff....esto si que ya no tengo ni idea de como hacerlo. De todas maneras el script asigna un nombre aleatorio cada vez....ayuda porfa.

is_file()

lingo5
Usuario habitual
Usuario habitual

OK, he intentado esto para comprobar si hay una imagen...pero no funciona. Estoy muy perdido. Gracias.

<?
$uploadDir = '../uploads/';

if(isset($_POST['editar']))
{
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];


    if (
      isset($_FILES[$fileName
])) &&
      $_FILES[$fileName]['error'] == 0 
&&
      is_uploaded_file($_FILES['tmp_name'
])
    )
    {

$filePath = $uploadDir . $fileName;

// get the file extension first
$ext = substr(strrchr($fileName, "."), 1);

// make the random file name
$randName = md5(rand() * time());

// and now we have the unique file name for the upload file
$filePath = $uploadDir . $randName . '.' . $ext;

$result = move_uploaded_file($tmpName, $filePath);
if (!$result) {
echo "Error uploading file";
exit;
}

Avatar Image
@man / @woman
@man / @woman

Me auto-cito:

Escrito originalmente por GestionXls

PD: si es posible, evita postear tanto código, concéntrate en la parte que interesa.

así no te perderás...

mariluti
Usuario Novato
Usuario Novato

hola alguien me puede ayudar hice un formulario para insertar a una tabla de mi base de datos pero no inserta nada y no se donde esta mal espero me pedan ayudar se los agradesco

<HTML>
<HEAD>
<TITLE>Insertar.php</TITLE>
</HEAD>
<BODY>
<?
$matricula=$_POST['matricula'];
$claveproy=$_POST['claveproy'];
$clave=$_POST['clave'];
$nombrealum=$_POST['nombrealum'];
$semestre=$_POST['semestre'];

$link = mysql_connect("localhost", "root", "")
or die("Could not connect to database!");
mysql_select_db("controlproyectos")
or die("Could not select database!");
mysql_query = "insert into alumno(matricula,claveproy, clave, nombrealum ,semestre) values
('$matricula','$claveproy', '$clave', '$nombrealum', '$semestre')";
$result = mysql_query($query)
or die("Query failed:$query");
?>
<h1><div align="center">Registro Insertado</div></h1>

</BODY>
</HTML>

lingo5
Usuario habitual
Usuario habitual

Hola GestionXls,

por favor, me podrías orientar un poco más sobre como hacer el is_file() utilizando el código que ya uso para subir imágenes?. El caso es que este me funciona bien subiendo la imagen, guardando la ruta en la BD y asignando el nombre aleatorio.

El problema es que si actualizo un registro sin cambiar la imagen no me deja. He de cambiar la imagen cada vez. He buscado por todas partes pero no encuntro nada que yo entienda y pueda implementar a este código.

Un ejemplo me iría muy bien. Gracias.

Avatar Image
@man / @woman
@man / @woman

http://es.php.net/manual/es/function.is-file.php

Devuelve TRUE si el archivo con el nombre dado existe y es un archivo regular, FALSE de lo contrario.

lingo5
Usuario habitual
Usuario habitual

Hola de nuevo. Bueno, como que ya estaba un poco saturado de este lio me he tomado unos días de descanso....a veces pasa que es mejor dejar algo unos días cuando se llega al punto de que le das tantas vueltas que ya ni sabes lo que hace.

Me pongo con function.is a ver si consigo algo.

ATENCIÓN: Este tema no tiene actividad desde hace más de 6 MESES,
te recomendamos abrir un nuevo tema en lugar de responder al actual
Opciones:
Ir al subforo:
Permisos:
TU NO PUEDES Escribir nuevos temas
TU NO PUEDES Responder a los temas
TU NO PUEDES Editar tus propios mensajes
TU NO PUEDES Borrar tus propios mensajes
Temas similares
TemaUsuariosRespuestasVisitasActividad
Por: , el 07/May/2009, 18:09
udelunar ude23 NoSetup.org58kMay/09
Por: , el 09/Oct/2014, 17:19
craven78 GestionXls NoSetup.org32kJan/15
Por: , el 15/Oct/2011, 04:17
franciskiko_20 NoSetup.org15kOct/11
Por: , el 04/Ago/2011, 02:36
fb@100001468962018 GestionXls12kAug/11
Por: , el 05/May/2010, 19:08
cesarobcn NoSetup.org24kMay/10