Que programacion para rellenar formulario web con subida de imagenes

Iniciado por nomed, 9 Junio 2017, 10:47 AM

0 Miembros y 2 Visitantes están viendo este tema.

nomed

Hola soy nuevo en programacion, hice ya un programa en VB que va muy bien la verdad, me dispongo hacer el segundo.

Mi intencion es rellenar campos en una web y subir imagenes , todo quedando guardado en una BD para posteriormente volver a rellenar si hiciera falta.

Por ahora solo probe VB , seguramente se puede hacer con ello conectando el form con mysql guardaria los campos , y ya relleno la mitad de campos en el formulario web que quiero, pero...

He tenido varios problemas y me planteado si con otro estilo de programacion esta tarea me seria mas facil, me podeis aconsejar con que lenguaje me seria mas facil hacer un programa o web, que haga eso de rellenar una web y subir fotos. Gracias

Eleкtro

Por favor especifica si te refieres a VB6 o VB.NET.

La librería de clases de .NET Framework expone miembros específicos para llevar a cabo peticiones web por el método GET y POST de forma intuitivia y relativamente sencilla, orientada a objetos. En teoría no debería suponerte ningún problema conociendo los parámetros a rellenar y enviar en la cabecera, y como hacer la petición debidamente.

¿Y si mejor empiezas por mostrar tu código y describir exactamente cuales son esos problemas que has tenido y así intentar hallar una solución, en lugar de querer cambiar a otro lenguaje sin más para empezar desde cero todo lo que ya tienes hecho en ese otro lenguaje?.

Saludos!








3n31ch

Este Elektro ve a alguien en VB y no lo quiere soltar (déjanos alguno para Java)  :rolleyes:

Puedes usar casi cualquier lenguaje que tenga "soporte" web, osea podrias usar Java, Python, PHP, C#, etc...

Aunque lo mejor es que te quedes en el lenguaje que estas, puesto que ya tienes cierta experiencia. (Aparte, cuando es "difícil" es mas entretenido.)

Ahora... si te refieres a un campo laboral (que espero que no..., ya que al parecer eres novato aun) necesitamos mas detalles como para decirte cual puede ser mas o menos adecuado.

nomed

Gracias a ambos por responder , elektro si es .NET, ahora mostrare algo de lo que estoy intentando arrancar, y 3n31ch , lo del VB no esq me resulte complicado , pero cada vez que busco material en internet de como hacer algo me encuentro mucho de otros lenguajes y por eso preguntaba lo del cambio, por que al ser nuevo si hay mas tutoriales y demas de otros lenguajes quizas sea mas "sencillo" encontrar estos tutoriales.

Con este metodo logro introducir texto en los combobox de la web
Código (vbnet) [Seleccionar]
           If elemento.GetAttribute("name") = "descripcion" Then
               elemento.SetAttribute("value", TextBox5.Text)
           End If
'con este siguiente si tienen un valor especifico
           If ComboBox2.Text = "Bolsos deportivos" And elemento.GetAttribute("name") = "categoria" Then
               elemento.SetAttribute("value", "3029")
           End If


Ahora lo que intento hacer subir una imagen, en la web es pulsando un boton  se abre un openfiledialog para buscar en mi pc una imagen y subirla.

Intente los metodos anteriores con value pero claro no las carga
Código (vbnet) [Seleccionar]
            If elemento.GetAttribute("name") = "foto1" Then
               elemento.SetAttribute("value", PictureBox1.ImageLocation)
           End If


Claro como soy novato exactamente no se a que llamar para que funcione , expongo las 2 cosas
1º este seria supongo que la imagen que lleva el boton de subir foto por lo q no me vale para nada, corregirme si me equivoco pls.
<input name="image" style="margin: 0px; padding: 0px; right: 0px; font-size: 480px; position: absolute; cursor: pointer;" type="file">

edito con el codigo 1º y usando este codigo se me abre el openfiledialog de la web para subir las fotos , pero al haber 4 fotos con el mismo codigo se me abre 4 veces para elegir las fotos.
Código (vbnet) [Seleccionar]
        Dim clElement As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("Input")
        For Each Element As HtmlElement In clElement
            Dim controlName As String = Element.GetAttribute("input").ToString
            If Element.GetAttribute("name").Equals("image") Then
                Element.InvokeMember("click")
            End If
        Next



Con esto estoy liado creo que es el buen camino, ya me direis<div class="art_title">
       1. Añade tus fotografías
   </div>
   
   <div>
       <div class="art_button" id="art_button" onclick="showArtBanner('div-popup-fotografias','full');_gaq.push(['_trackEvent', 'venta-articulo', 'consejos', 'foto']);">
           Cómo conseguir que tus fotografías vendan de forma rápida.
       </div>
       

       <div class="art_columna_foto">
           <div class="art_foto"   data-id="1" >                
                   <a id="t1">
                       <img class="thumb-img-producto" src="" alt="" id="thumb1">
                   </a>
           </div>
           <div class="delete art_foto_bot2"  data-id="1" style="display:none;">
               Eliminar
           </div>
           <div class="art_foto_bot3 girar" data-numero="1" data-grados="90"  style="display:none;">
               Rotar
           </div>
           <div class="art_foto_bot"  data-id="1"  id="foto_articulo1">
               Fotografía delantera
           </div>
       </div>
       
       <div class="art_columna_foto">
           <div class="art_foto"   data-id="2" >                

                   <a id="t2">
                        <img class="thumb-img-producto" src="" alt="" id="thumb2">
                   </a>

           </div>

           <div class="art_foto_bot"  data-id="2"  id="foto_articulo2">
               Fotografía trasera
           </div>

           <div class="delete art_foto_bot2"  data-id="2"  style="display:none;">
               Eliminar
           </div>
           <div class="art_foto_bot3 girar" data-numero="2" data-grados="90"  style="display:none;">
               Rotar
           </div>

       </div>
       
      <div class="art_columna_foto">
           <div class="art_foto"   data-id="3" >                

                   <a id="t3">
                       <img class="thumb-img-producto" src="" alt="" id="thumb3">
                   </a>

           </div>

           <div class="art_foto_bot"  data-id="3"  id="foto_articulo3">
               Fotografía detalles
           </div>

           <div class="delete art_foto_bot2"  data-id="3"  style="display:none;">
               Eliminar
           </div>
           <div class="art_foto_bot3 girar" data-numero="3" data-grados="90"  style="display:none;">
               Rotar
           </div>

       </div>

       <div class="art_columna_foto"  style="margin-right:0px !important">
           <div class="art_foto"   data-id="4" >                

                   <a id="t4">
                       <img class="thumb-img-producto" src="" alt="" id="thumb4">
                   </a>

           </div>

           <div class="art_foto_bot"  data-id="4"  id="foto_articulo4">
               Fotografía detalles
           </div>

           <div class="delete art_foto_bot2"  data-id="4"  style="display:none;">
               Eliminar
           </div>
           <div class="art_foto_bot3 girar" data-numero="4" data-grados="90"  style="display:none;">
               Rotar
           </div>

       </div>

   </div>    

         <input type="hidden" name="foto1" id="foto1" value="">
         <input type="hidden" name="foto2" id="foto2" value="">
         <input type="hidden" name="foto3" id="foto3" value="">
         <input type="hidden" name="foto4" id="foto4" value="">



<div style="clear:both;"></div>





3º Esto aun no intente por que no se si me vale.
<script>
 $(document).ready(function() {
     
    if (trim($("#nombre_articulo").val()) == "")
      sugerir = 1;
    else
      sugerir = 0;
                             $(".girar").live("click", function() {
         
         var num = $(this).attr("data-numero");
         var url = "https://www.chicfy.com/admin/ajax/productos.php";
         var foto = $("#thumb"+num).attr("src");
         var grados = parseInt($(this).attr("data-grados"));
           if (foto != "img/fotmg.png") {
               $(this).show();
               $("body").css("cursor", "wait");
               $("#boton").val("ESPERE MIENTRAS SE SUBEN LAS FOTOS");
                               $.post(url, {"action" : "girar_foto", "foto" : foto, "grados" : grados, "num" : num}, function(respuesta) {
               
                 $("#foto"+num).val(respuesta);
                 $("#thumb"+num).attr("src", respuesta);
                 $("body").css("cursor", "default");
                 $("#boton").val("SUBIR ARTICULO A LA VENTA");
               })
           }
     });




Bueno muchas gracias por responder y si me orientais mejor :), yo lo que en realidad necesito esq cuando suba un producto a la web en cuestion , guardar esos datos en mysql para poder subirlo en otro momento sin tener que volver a rellenarlo manualmente, por lo que ahorro mucho tiempo.
Quizas haya un metodo para interceptar lo que meto en la web guardarlo en un BD y un metodo para subirlo, por ahora empeze con el metodo para subirlo, gracias

Eleкtro

#4
Cita de: nomed en  9 Junio 2017, 15:30 PMlo del VB no esq me resulte complicado , pero cada vez que busco material en internet de como hacer algo me encuentro mucho de otros lenguajes y por eso preguntaba lo del cambio, por que al ser nuevo si hay mas tutoriales y demas de otros lenguajes quizas sea mas "sencillo" encontrar estos tutoriales.

.NET soporta varios lenguajes, entre ellos C# y VB.NET. La documentación oficial en la Microsoft MSDN para C# y VB.NET es exactamente la misma, habiendo ejemplos para VB.NET y para C#, sin embargo, es una realidad que existe muchísima más documentación "home-made" para C# que para VB.NET, así que el "truco" cuando no sepas como hacer algo es buscar ejemplos en C#, y luego tan solo tienes que convertir el código de C# a VB.NET, lo cual no es extremadamente complicado puesto que en esencia ambos lenguajes son lo mismo (sin entrar en detalles aquí), así que puedes usar cualquier conversor online u offline de C# <> VB.NET como por ejemplo: http://converter.telerik.com/




Cita de: nomed en  9 Junio 2017, 15:30 PMAhora lo que intento hacer subir una imagen, en la web es pulsando un boton  se abre un openfiledialog para buscar en mi pc una imagen y subirla.

Hay dos modos de hacer lo que quieres: la simulación de un WebBrowser, o la automatización de un webBrowser. Para que se entienda a lo que intento referirme, un modo de hacerlo sería en background o segundo plano simplemente realizando peticiones http desde tu código (con la clase System.Net.WebClient, System.Net.Http.HttpClient, o System.Net.WebRequest+System.Net.WebResponse), y el otro modo sería de forma "visual" automatizando la instancia del WebBrowser, es decir navegando a webs, renderizándolas, rellenar los campos de los forms de manera visual, controlando los eventos y etc...

La forma que has elegido, la automatización, es la más limitada, y eso al mismo tiempo lo vuelve la forma más compleja, puesto que en teoría por razones de seguridad (el host de)InternetExplorer no permite establecer/adjuntar archivos de forma programática en elementos Input html. Es decir que si supuestamente tu WebBrowser ha navegado a un formulario web en el se requiera subir un archivo, no vas a poder subir ese archivo estando en ese formulario web, ¿y como se resuelve esto?, pues la librería de clases de .NET expone una manera guiada: el método System.Windows.Forms.WebBrowser.Navigate() concretamente una de las sobrecargas del método Navigate() que acepta como argumento unos datos POST a enviar:


Aquí tienes un ejemplo elaborado de como utilizarlo para subir un archivo:
( el código está en C#, pero así puedes practicar lo que te dije al principio de este comentario sobre la conversión de código... )

Si la automatización de un WebBrowser no es una necesidad real, es decir, si no te importa llevar a cabo la operación de rellenar el form y enviar la imagen en segundo plano sin necesidad de ir mostrando la página en el WebBrowser, pues eso es lo que deberías hacer, por que lo más conveniente sería simplemente realizar una petición POST y adjuntar el archivo a subir en la cabecera http.

Aquí tienes varios ejemplos genéricos de como realizar una petición POST simple:

Y aquí unos ejemplos de peticiones POST con MULTIPART para subir un archivo :

...Como puedes ver en esos ejemplos, hay varias formas de hacer lo mismo mediante las distintas clases que te mencioné más arriba. Cuanto más reciente sea la versión de .NET Framework que utilices, muchas más facilidades tendrás para realizar cualquier cosa "compleja" o tediosa.

PD: Evidentemente antes de intentar subir un archivo primero debes inspeccionar la cabecera para conocer (el nombre de)los parámetros que debes usar en la petición POST con MULTIPART.

Saludos!








nomed

Gracias fenomeno , cuando venga de unas mini vacaciones me pongo con los dos metodos, a ver cual me funciona mejor, pero , no es necesidad tener webbrowser , si bien para mostrar que se realizo todo correctamente si debiera tenerlo , pero para rellenar y adjuntar  no es necesario.
Cita de: Eleкtro en 10 Junio 2017, 01:17 AM
PD: Evidentemente antes de intentar subir un archivo primero debes inspeccionar la cabecera para conocer (el nombre de)los parámetros que debes usar en la petición POST con MULTIPART.

Exactamente los parametros yo uso el F12 en internet explorer y voy mirando lo que me conviene, hay otra forma mejor de sacar los parametros?

Bueno gracias ya te voy diciendo como lo llevo :)