Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Mysqli - Formulario no hace nada.

Estas en el tema de Mysqli - Formulario no hace nada. en el foro de PHP en Foros del Web. Muy buenas, antes que nada me presento: Mi nombre es Matias y estoy comenzando en esto del desarrollo de aplicaciones en PHP. LLevo varias horas ...
  #1 (permalink)  
Antiguo 10/04/2014, 00:24
Avatar de mati22  
Fecha de Ingreso: abril-2014
Mensajes: 10
Antigüedad: 10 años
Puntos: 0
Pregunta Mysqli - Formulario no hace nada.

Muy buenas, antes que nada me presento:

Mi nombre es Matias y estoy comenzando en esto del desarrollo de aplicaciones en PHP.

LLevo varias horas tras el ordenador leyendo y documentandome acerca de como funciona, pero como dicen "La práctica hace al maestro" he decidido comenzar mi primer proyecto para poner a prueba lo que he aprendido.

Antes de comentaros mi problema, os agradezco vuestro tiempo por leerlo y toda ayuda que me podais brindar.


Estoy desarrollando un programa en el cual, los usuarios pueden realizar operaciones de "prueba" en el mercado bursátil, forex, etc.
(para los que no sabéis de que va: [URL="http://es.wikipedia.org/wiki/Mercado_de_divisas"]Enlace a Wikipedia[/URL])

Hasta ahora, el proyecto consta de 4 páginas.
1
Op.php (Raíz de la página
)

Código PHP:
<?php

//Configuracion para conectar a db.
require_once("config/db.php");

// Carga la clase para nuevas operaciones.
require_once("classes/Newop.php");

//Crea el objeto para nuevas operaciones
$newop = new Newop();

// Muestra el formulario de operaciones 
include("views/formforex.php");
2
db.php (Datos para conexión a db
)

Código PHP:
<?php

/* Configuración conexión db*/
define("DB_HOST""localhost");
define("DB_NAME""login");
define("DB_USER""root");
define("DB_PASS""");
3
formforex.php (Formulario recolección de datos
)


Código PHP:
  <?php
if (isset($newop)) {
    if (
$newop->errors) {
        foreach (
$newop->errors as $error) {
            echo 
$error;
        }
    }
    if (
$newop->messages) {
        foreach (
$newop->messages as $message) {
            echo 
$message;
        }
    }
}
?>
Código HTML:
<!-- op form -->
</div>
<form method="post" action="op.php" name="x">

    <label for="select_simbol">
      <div align="center">Simbolo</div>
    </label>
    <div align="center">
      <select name="select_simbol" class="select_simbol" name="simbol"  />
  <option value ="eurusd">EURUSD</option>
  <option value ="usdchf">USDCHF</option>
</select>
      <br />
       <label for="select_tipo">
      <div align="center">Tipo</div>
    </label>
    <div align="center">
      <select name="select_tipo" class="select_tipo" name="tipo"  />
  <option value name="buy">Comprar</option>
  <option value name="sell">Vender</option>
</select>
      
      <br/>
      
      <input type="submit" class="bt" name="newop" value="Ejecutar" />
      
    </div>
</form> 
4
newop.php (Guardando datos en db
)


Código PHP:
<?php


class Newop
{
 
    private 
$db_connection null;
 
    public 
$errors = array();
  
    public 
$messages = array();

   
    public function 
__construct()
    {
        if (isset(
$_POST["newop"])) {
            
$this->ejecutarnuevaop();
        }
    }

 
    private function 
ejecutarnuevaop()
    {
 switch(
$_POST['select_simbol']){
    case 
"eurusd"
        function 
between($beg$end$str) {
            
$a explode($beg$str2);
            
$b explode($end$a[1]);
            return 
$beg $b[0] . $end;}
        
$url file_get_contents ("https://es.finance.yahoo.com/q?s=EURUSD=X");
        
$eleccion between('<span id="yfs_l10_eurusd=x">''</span>'$url);
     break;

    case 
"usdchf"
        
$eleccion "test"; break;
{
            
// crando conexión a db
            
$this->db_connection = new mysqli(DB_HOSTDB_USERDB_PASSDB_NAME);

         
            
// Si no hay errores
            
if (!$this->db_connection->connect_errno) {

         
$fecha date('d-m-Y');  
         
$tipo $_POST['tipo'];  
         
$estado "abierto";
         
$capitalrequerido"4";
       
                    
$sql "INSERT INTO operaciones ( Tipo, Cotizacion, Fecha, CapitalRequerido, Estado)
                            VALUES('" 
$Tipo "', '" $seleccion "', '" $fecha "','" $capitalrequerido "', '" $estado "',);";
                    
$query_new_op_insert $this->db_connection->query($sql);

                    
// si la operacion se realizo con exito
                    
if ($query_new_op_insert) {
                        
$this->messages[] = "Op se ha realizado con exito.";
                    } else {
                        
$this->errors[] = "Sorry, your op failed. Please go back and try again.";
                    }
            }
        
             else {
                
$this->errors[] = "Sorry, no database connection.";
            }
  }
}

    }
}
El error (por el cual hace 3 horas estoy frente al monitor probando, cambiando, sin obtener resultado alguno.) es que, al hacer click en "ejecutar" no funciona, ni da error ni nada. Simplemente el estado de navegación dice "esperando a localhost..." y la página sigue igual.
Es desesperante y soy consciente de que puede ser un error muy sencillo (de principiante, vamos...)

Debo aclarar que el código no fue escrito integramente por mí, tome como plantilla un registro y login (su autor php-login) y lo adapte a mi programa.


Os agradezco de antemano a todos los que tengais tiempo de leer y brindarme alguna solución, yo de momento seguiré buscando en que estoy fallando.
  #2 (permalink)  
Antiguo 10/04/2014, 01:21
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Mysqli - Formulario no hace nada.

<select name="select_simbol" class="select_simbol" name="simbol" />

Aparte de corregir algunos errores en HTML (como el marcado):

1- Al depurar puedes incluir antes de cada acción "importante" algo como:
echo 'Entrando en __construct<br />';
....
echo 'Hay valores en $_POST<br />';

Con eso puedes saber donde se detiene tu script y tienes una pista más concreta.

2- La configuración de PHP no siempre te permite abrir URL's con file_get_contents() , revisa esto: http://www.php.net/manual/es/filesys...figuration.php
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 10/04/2014, 01:42
Avatar de mati22  
Fecha de Ingreso: abril-2014
Mensajes: 10
Antigüedad: 10 años
Puntos: 0
Respuesta: Mysqli - Formulario no hace nada.

Hola! Antes que nada, gracias por tu pronta respuesta.

Se me pasaron por completo los errores html, ya los he corregido.

He intentado generar algunos errores a posta para tener una idea de que era lo que no funcionaba y de momento puedo pre-suponer que es la última parte newop.php y para ser mas especifico, cuando empiezal a sentencia switch... voy a intentar modificarlo por un if, o else y probar tu recomendación al depurar.

Por otra parte, la configuración de mi servidor permite abrir las urls.

Muchas gracias, de momento seguiré intentando pero esto ya es un avanze!
  #4 (permalink)  
Antiguo 10/04/2014, 02:27
Avatar de mati22  
Fecha de Ingreso: abril-2014
Mensajes: 10
Antigüedad: 10 años
Puntos: 0
Respuesta: Mysqli - Formulario no hace nada.

Bueno, me aproximo un poco más al problema.
Hice lo que me recomendaba Triby sobre echo y ahora se que el problema se encuentra en el momento de realizar la conexión y guardar los datos en la db.
¿Alguna otra sugerencia?
  #5 (permalink)  
Antiguo 10/04/2014, 02:55
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Mysqli - Formulario no hace nada.

Normalmente, si imprimes la consulta, y la pruebas en algun tipo de gestor de mysql, sabrías encontrar el error...

Pero te puedo decir que te sobra una , en la consulta ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #6 (permalink)  
Antiguo 10/04/2014, 05:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Mysqli - Formulario no hace nada.

Te está faltando un dato en el VALUES de ese insert:
Código PHP:
Ver original
  1. $sql = "INSERT INTO operaciones ( Tipo, Cotizacion, Fecha, CapitalRequerido, Estado)
  2. VALUES('" . $Tipo . "', '" . $seleccion . "', '" . $fecha . "','" . $capitalrequerido . "',
  3. '" . $estado . "', /* aqui falta un dato*/);";
Si el dato no va porque no existe, se debe omitir el campo en el INTO. Si va... hay que ponerlo, si estás poniendo de más, quítalo.
Y como te dijeron: Poner un echo $sql, sería una buena idea...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 11/04/2014, 00:56
Avatar de mati22  
Fecha de Ingreso: abril-2014
Mensajes: 10
Antigüedad: 10 años
Puntos: 0
Respuesta: Mysqli - Formulario no hace nada.

Hola de nuevo!
Os traigo buenas y malas noticias:
Las buenas: He logrado que funcione el código!! Implemente vuestras recomendaciones (las que estaban al alcance de mi conocimiento, claro.) y lo único que logré fue un error "en blanco". Desconcertado y realmente frustrado, reescribí el código desde 0 y... ¡Sorpresa! Esta vez, funciona!

Las malas: Realmente, no se cual fue el error. Imagino que parte de lo que me habias dicho sobre los datos en el campo INTO. Pero no hice la modificación pertinente como para corroborarlo, por lo cual no puedo poner el código solucionado como ejemplo para otras personas que se encuentren con el mismo problema.

Nuevamente, os doy las gracias: Triby, Eleazan, gnzsoloyo por tomarse el tiempo de leer mi código y ayudarme a resolver mi problema. Es muy bueno contar con la experiencia de programadores avanzados en casos concretos como el mio.
¡Gracias!

Etiquetas: fecha, formulario, mysql, mysqli, registro, select, sql, usuarios
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 17:46.