elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Mensajes
Páginas: 1 ... 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [20] 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 ... 75
191  Programación / Bases de Datos / Re: mysql no usa la variable por defecto cuando no se inserta nada en: 6 Abril 2016, 00:00 am
Eso es precisamente lo que ya tengo hecho, pero que sin embargo no funciona como me esperaba. Yo configuro una tabla para que sus columnas que puedan ser opcionales tengan un valor default que es el que debería utilizar en caso de que el valor a insertar sea null. Esa es la razón por la que abrí este mensaje.

Le tuve que quitar la opción Not Null? porque daba error al insertar una variable nula.

192  Programación / Bases de Datos / Re: mysql no usa la variable por defecto cuando no se inserta nada en: 5 Abril 2016, 05:38 am
Eso era exactamente lo que necesitaba, gracias.

¿Se puede hacer asi?

Código
  1. VALUES (IFNULL(?, ?, ?, ?, ?, DEFAULT(0)))

A lo mejor es más sencillo usar un operador ternario...
193  Programación / Bases de Datos / Re: mysql no usa la variable por defecto cuando no se inserta nada en: 3 Abril 2016, 21:20 pm
Gracias por responder, pero no era eso lo que queria decir.

El problema creo que es más bien de html o php (es de html pero se soluciona con php...).

Lo que queria decir es que las variables que uso en el insert pueden no estar declaradas ya que son opcionales:

Tengo un formulario de 5 checkboxes y hago un insert a la tabla:

Código
  1. if ($stmt = $mysqli->prepare('INSERT INTO checkboxes (checkbox1, checkbox2, checkbox3, checkbox4, checkbox5) VALUES (?, ?, ?, ?, ?)')) {
  2.    $stmt->bind_param('iiiii', $checkbox1, $checkbox2, $checkbox3, $checkbox4, $checkbox5);
  3.    $stmt->execute();
  4. }

Al ser checkboxes, si no están marcados no se envia nada por lo tanto la variable no se genera y se inserta NULL en la columna.

¿Hay alguna manera de decirle a mysql que si la variable es NULL se inserte el valor por defecto?
194  Programación / Bases de Datos / [SOLUCIONADO] mysql no usa la variable por defecto cuando no se inserta nada en: 3 Abril 2016, 05:42 am
Hola buenas, estoy teniendo complicaciones para configurar las tablas de mi base de datos y poder trabajar correctamente con la aplicación web php.

Por ejemplo, en un INSERT que hago a X tabla, algunas variables pueden no existir (!isset) por lo que mysql debería introducir en el campo el valor default que se le especifica a la columna cuando se crea la tabla.

Yo uso sqlyog community para crear y gestionar las tablas, y las columnas que pueden ser opcionales les puse un valor default para que no se quede (NULL) y no haya problemas al hacer los select y comprobar el valor. Al principio probé activando la opción "Not Null?" pero al parecer si la variable a insertar no existe da error (diciendo que no puede ser null) pero debería usar el default. Probé desactivando dicha opción pero nada, se sigue quedando la columna (NULL) cuando se insertan variables opcionales que no están declaradas.

¿Cual creeis que puede ser el problema? A lo mejor me creo que el default sirve para esto pero resulta que es para otra cosa (aunque no lo creo)...

Gracias!
195  Programación / PHP / Re: variables dinamicas dentro de funciones ( is_numeric($$variable) ) en: 29 Marzo 2016, 19:50 pm
Ok I got it! ;D

El problema está en que no necesito el nombre del elemento para declarar el array:

Código
  1. foreach ( $list as $element_name => $nouse ) {
  2.    if (isset($_POST[$element_name])) {
  3.        if ( is_array($_POST[$element_name]) ) {
  4.            $filtered_data = filter_input( INPUT_POST , $element_name , FILTER_SANITIZE_STRING , FILTER_REQUIRE_ARRAY );
  5.            foreach ($filtered_data as $key => $value) {
  6.                $key = preg_replace('[a-z]', '', $key);
  7.                if ( is_numeric($value) ) { // this is line 34
  8.                    $$key = (int) $value;
  9.                    echo $report[$key] = $key . ' variable (from ' . $element_name . ' ) created1... <span style="color:green;">OK!</span><br>';
  10.                } else {
  11.                    $$key = $value;  // this is line 38
  12.                    echo $report[$key] = $key . ' variable (from ' . $element_name . ' ) created2... <span style="color:green;">OK!</span><br>';
  13.                }
  14.            }
  15.        } else {
  16.            if ( is_numeric($_POST[$element_name]) ) {
  17.                $$element_name = filter_input( INPUT_POST , $element_name , FILTER_SANITIZE_NUMBER_INT );
  18.                echo $report[$element_name] = $element_name . ' variable created3... <span style="color:green;">OK!</span><br>';
  19.            } else {
  20.                $$element_name = filter_input( INPUT_POST , $name , FILTER_SANITIZE_STRING );
  21.                echo $report[$element_name] = $element_name . ' variable created4... <span style="color:green;">OK!</span><br>';
  22.            }
  23.        }
  24.    } else {
  25.        if ($list[$element_name] == 'optional') {
  26.            $$element_name = 0;
  27.            echo $report[$element_name] = $element_name . ' (optional) variable not filled5... <span style="color:green;">OK!</span><br>';
  28.        } else die('Error: You must fill all mandatory fields! (' . $element_name . ')');
  29.    }
  30. }
196  Programación / PHP / Re: variables dinamicas dentro de funciones ( is_numeric($$variable) ) en: 29 Marzo 2016, 18:25 pm
No entiendo lo del hidden, pero entiendo que dices que no use arrays, sea por la razón que sea pero no la dices.

¿Por qué dices que le doy un nombre y luego accedo con otro? Creo que eso no es cierto, el script deja bien claro que el nombre del elemento es el usado para acceder al array:

Código
  1. $name = 'address_book';
  2.  
  3. $$name = $_POST[$name];
  4.  
  5. foreach ($$name as $key => $value) {
  6.    if ( is_numeric($$name[$key]) ) {
  7.        $$key = (int) $$name[$key];
  8.    }
  9. }

Si no me equivoco, lo de arriba es lo mismo que hacer:

Código
  1. $address_book = $_POST['address_book'];
  2.  
  3. foreach ($address_book as $key => $value) {
  4.    if ( is_numeric($address_book[$key]) ) {
  5.        $name/$surname = (int) $address_book[$key];
  6.    }
  7. }

No??

Si es incorrecto lo que intento hacer, dimelo, ya que no me estoy enterando de nada, ¿es un error en la manera de querer hacer esto?

Si no hay nada malo en usar arrays, preferiria hacerlo así a tener que llenar un whitelist con más de 40 nombres. Que pongan lo que quieran en los keys del array, el preg_replace dejará solo letras minusculas y con eso no se puede hacer nada, el prepare dará error al no tener las variables necesarias y no sé ejecutará nada en la base de datos, no veo el problema por ninguna parte.

Código
  1. if ($stmt->error()) {
  2.    die('Database Error');
  3. }

EDITO: Habia otro problema, que al parecer ninguno de los dos nos habiamos dado cuenta... La variable $name que contiene el valor del formulario estaba sobreescribiendo la variable $name del primer foreach... Le he cambiado el nombre y ahora puedo ver el mismo error para todos los campos del array address_book:

Citar
Warning: Illegal string offset 'name' in /home/aet/website.com/pages/upload.php on line 34

Notice: Undefined variable: a in /home/aet/website.com/pages/upload.php on line 34

Warning: Illegal string offset 'name' in /home/aet/website.com/pages/upload.php on line 38

Notice: Undefined variable: a in /home/aet/website.com/pages/upload.php on line 38
name variable (from address_book ) created2... OK!

Warning: Illegal string offset 'surname' in /home/aet/website.com/pages/upload.php on line 34

Notice: Undefined variable: a in /home/aet/website.com/pages/upload.php on line 34

Warning: Illegal string offset 'surname' in /home/aet/website.com/pages/upload.php on line 38

Notice: Undefined variable: a in /home/aet/website.com/pages/upload.php on line 38
surname variable (from address_book ) created2... OK!
197  Programación / PHP / Re: variables dinamicas dentro de funciones ( is_numeric($$variable) ) en: 29 Marzo 2016, 17:30 pm
Así seguramente funcionaria, pero el objetivo es automatizar para facilitar el proceso. Cuando hay formularios largos, con muchos campos (unos 40-50) se crean los arrays para agrupar y separar (organizar) los campos.

La cuestión es saber por qué no funciona y saber arreglarlo. Cuando los formularios apenas tienen 10-15 campos pues si que es mejor hacerlo a mano, pero cuando hay más de 40 la cosa cambia, además de poder usarlo en todos los formularios que necesites.
198  Programación / PHP / [Solucionado] variables dinamicas dentro de funciones ( is_numeric($$variable) ) en: 29 Marzo 2016, 03:54 am
Hola, estoy intentando crear un script que declare y limpie las variables de formularios largos, donde hayan arrays de numeros y strings, pero utilizando un whitelist para los nombres de los elementos. Me están dando errores:

Citar
Warning: Illegal string offset 'name' in /home/aet/website.com/pages/upload.php on line 34

Notice: Undefined variable: a in /home/aet/website.com/pages/upload.php on line 34
Y
Citar
Warning: Illegal string offset 'name' in /home/aet/website.com/pages/upload.php on line 38

Notice: Undefined variable: a in /home/aet/website.com/pages/upload.php on line 38

De momento esto es lo que tengo:

Código
  1. $list = array('name' => 'mandatory', 'surname' => 'optional');
  2.  
  3. foreach ( $list as $name => $nouse ) {
  4.    if (isset($_POST[$name])) {
  5.        if ( is_array($_POST[$name]) ) {
  6.            $$name = filter_input( INPUT_POST , $name , FILTER_SANITIZE_STRING , FILTER_REQUIRE_ARRAY );
  7.            foreach ($$name as $key => $value) {
  8.                $key = preg_replace('[a-z]', '', $key);
  9.                if ( is_numeric($$name[$key]) ) { // this is line 34
  10.                    $$key = (int) $$name[$key];
  11.                    echo $report[$key] = $key . ' variable (from ' . $name . ' ) created1... <span style="color:green;">OK!</span><br>';
  12.                } else {
  13.                    $$key = $$name[$key];  // this is line 38
  14.                    echo $report[$key] = $key . ' variable (from ' . $name . ' ) created2... <span style="color:green;">OK!</span><br>';
  15.                }
  16.            }
  17.        } else {
  18.            if ( is_numeric($_POST[$name]) ) {
  19.                $$name = filter_input( INPUT_POST , $name , FILTER_SANITIZE_NUMBER_INT );
  20.                echo $report[$name] = $name . ' variable created3... <span style="color:green;">OK!</span><br>';
  21.            } else {
  22.                $$name = filter_input( INPUT_POST , $name , FILTER_SANITIZE_STRING );
  23.                echo $report[$name] = $name . ' variable created4... <span style="color:green;">OK!</span><br>';
  24.            }
  25.        }
  26.    } else {
  27.        if ($list[$name] == 'optional') {
  28.            $$name = 0;
  29.            echo $report[$name] = $name . ' (optional) variable not filled5... <span style="color:green;">OK!</span><br>';
  30.        } else die('Error: You must fill all mandatory fields! (' . $name . ')');
  31.    }
  32. }

El html es de lo más sencillo, los arrays los tengo asi:

Código
  1. <input type="text" name="address_book[name]" />
  2. <input type="text" name="address_book[surname]" />

¿Alguna idea de por qué no funciona?  :-\

Gracias!
199  Programación / PHP / Re: funcion de clase no imprime datos de la db en: 26 Marzo 2016, 18:08 pm
Vale ya encontré el fallo  :P

Que vergüenza... el copia pega  :silbar:

Código
  1.    public function setPersonalPhone($personal_phone) {
  2.        $this->phone = $personal_phone;
  3.    }

Código
  1.    public function setPersonalPhone($personal_phone) {
  2.        $this->personal_phone = $personal_phone;
  3.    }
200  Programación / PHP / [Solucionado] funcion de clase no imprime datos de la db en: 26 Marzo 2016, 16:15 pm
Hola, me ha pasado algo realmente raro y no consigo encontrar el problema.

Tengo una clase para los usuarios de una web, en esta clase tengo una funcion que devuelve el valor de una de las columnas de la tabla. Al principio todo funcionaba, pero tuve que añadir más columnas a la tabla y cambiar el nombre de un par de ellas, desde entonces hay una de las funciones (una de las dos a las que les tuve que cambiar el nombre) que no devuelve nada, las demás si que funcionan.

He comprobado varias veces por si fuera un error al escribir el nombre, pero todo parece estar en orden.

He grabado un video donde se puede ve claramente el código y el formulario donde se llama dicha función que debería imprimir el contenido de la columna pero nada...
Páginas: 1 ... 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [20] 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 ... 75
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines