|
91
|
Programación / PHP / paginas incluidas no funcionan correctamente
|
en: 28 Septiembre 2014, 05:20 am
|
Hola, estoy teniendo un molesto problema a la hora de incluir paginas en php. El problema que tengo es causado al poner el mismo include en dos paginas y una de las paginas es incluida en la otra. Paso a explicarlo mejor: Tengo un index.php (.htaccess redirecciona todo aqui) include_once '/themes/default/views/layouts/main.php'; function showContent() { [...] }
/themes/default/views/layouts/main.php include_once('/includes/functions.php'); //why this include doesn't work for login.php // html and php code showContent(); //will include login.php
y una de las paginas a incluir, pero ocurre con otras paginas con el mismo include y la misma funcion. /views/site/login.php <?php include_once('/includes/functions.php'); sec_session_start(); if (login_check($mysqli) == true) { $logged = 'in'; } else { $logged = 'out'; } ?>
Este es el error que da: Notice: Undefined variable: mysqli in C:\xampp\htdocs\views\site\login.php on line 7
Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\includes\functions.php on line 151 La variable $mysqli esta creada en db_connect.php que esta incluido en functions.php y en un principio funciona perfectamente.... db_connect.php include_once 'config.php'; $mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
Y el otro error tambien me lo ha dado muchas otras veces con varias funciones mysqli (como execute() o get_result()) y aun no lo he arreglado, simplemente han desaparecido y aparecido en disitintas paginas, al crear un prepared statement. Esto es lo que me ha podido decir un amigo respecto a este error: You get the call to member function on non-object error, when you try to call a function in $this-> scope when the object hasn't been instantiated. Entonces, ¿como hago eso de estanciar el objeto? if ($stmt = $mysqli->prepare("SQL")) Lo curioso es que no da ningún error si quito el include de main.php, pero entonces tengo que comentar las funciones que llamo... Si en lugar de include_once utilizo include en login.php me da el siguiente error: Fatal error: Cannot redeclare sec_session_start() (previously declared in C:\xampp\htdocs\includes\functions.php:6) in C:\xampp\htdocs\includes\functions.php on line 26 Este es el codigo del error: function sec_session_start() { // Esta es la linea 6 de functions.php $session_name = 'sec_session_id'; // Set a custom session name $secure = SECURE; // This stops javascript being able to access the session id. $httponly = true; // Forces sessions to only use cookies. if (ini_set('session.use_only_cookies', 1) === FALSE) { header("Location: /error?err=Could not initiate a safe session (ini_set)"); } // Gets current cookies params. $cookieParams["path"], $cookieParams["domain"], $secure, $httponly); // Sets the session name to the one set above. } // Esta es la linea 26 de functions.php
¿Alguna idea de como arreglar esto? ¡Llevo horas intentando arreglarlo pero no consigo nada! Gracias!
|
|
|
92
|
Programación / Desarrollo Web / jscript function not defined but included
|
en: 27 Septiembre 2014, 02:11 am
|
Hola, estoy teniendo problemas con unos botones javascript y al parecer se debe a las rutas y que los archivos no se ejecutan desde donde estan, si no desde otras paginas (son incluidas) y al parecer me esta dando problemas. index.php <- main.php <- +showContent()+ %view%.php Bien, es algo simple, tengo un index.php que incluye una pagina (main.php) que es la estructura de la web y esta a su vez incluye paginas "views" mediante una funcion (showContent()) creada en index.php y llamada en main.php, una de estas paginas "views" es login.php y es donde esta el form con el input. Pero el problema es este, cuando le doy al boton login (o register que tampoco funciona) no pasa nada y en la consola del navegador me aparecen los siguientes errores: ReferenceError: regformhash is not defined register:1 ReferenceError: formhash is not defined login:1 Esto quiere decir que los archivos .jscript no estan siendo incluidos... Y es extraño porque los css y php script si que funcionan, esos archivos si que son incluidos. Las ruta estan todas bien, se incluyen desde la raiz (desde htdocs). Pero lo más extraño de todo, es que cada link de navegacion que le doy, me sale otro error en la consola: SyntaxError: invalid regular expression flag b forms.js:31 y esto es lo que hay en la linea 31: // Check the username - regformhash() re = /^\w+$+/b; // esta es la linea 31
Ahora, ese error indica que si esta incluyendo los jscripts, pero que por alguna razón la funcion no se esta leyendo: login.php <form action="includes/process_login.php" method="post" name="login_form"> Email: <input type="text" name="email" /> Password: <input type="password" name="password" id="password"/> value="Login" onclick="formhash(this.form, this.form.password);" />
Los scripts estan bien y no han sido modificados, porque antes de crear el sistema de includes dinamicos todo funcionaba perfectamente, se podian crear usuarios y loguearse. Para que lo veais: La primera función de forms.js (la otra es regfromhash) function formhash(form, password) { // Create a new element input, this will be our hashed password field. var p = document.createElement("input"); // Add the new element to our form. form.appendChild(p); p.name = "p"; p.type = "hidden"; p.value = hex_sha512(password.value); // Make sure the plaintext password doesn't get sent. password.value = ""; // Finally submit the form. form.submit(); }
El otro jscript es sha512.js que esta en la misma carpeta y se incluye con la misma ruta que form.js Estoy teniendo otros problemas similares y al parecer los includes no se incluyen en los includes.... o algo asi, por ejemplo, en una pagina cualquiera quiero hacer una consulta a la db y funciona bien durante un tiempo, hasta que un dia necesito agregar un include o cambiarlo, entonces ya da error porque la conexion a la db no existe (que se hace en otro archivo). Entonces db_connect.php se incluye en functions.php y este se incluye en los demas archivos y con 1 solo include se incluyen varios archivos. index.php incluye functions.php incluye db_connect.php pero index.php no es capaz de incluir db_connect.php.... o lo incluye cuando le da la gana, es un lio ¿Hay alguna manera de arreglar esto? Gracias! Edito: Solucionado, habia que quitar el ultimo + y b del jscript
|
|
|
93
|
Programación / PHP / crear enlaces seguros para las paginas php
|
en: 24 Septiembre 2014, 13:16 pm
|
Hola, me gustaría saber cual es la manera mas segura de crear enlaces seguros para las paginas de mi sitio web. Acaba de leer un pequeño tutorial donde aparece un codigo con el que se supone que no será facil hackear la web, pero es del año 2006 y tengo dudas por si ya no es tan seguro como lo era antes... Aqui esta el link: Safe Dynamic IncludesTambien he visto otra manera: Safe Dynamic Includes, pero tampoco se si hay otras maneras mas seguras para crear los links de una pagina a otra. Lo normal es las paginas suele ser <a href="index.php?x=pagename">Link </a>
Pero al parecer cambiando la variable de sesion por otra, el link puede ser de otra manera: $_GET['x']; -> $_SERVER['QUERY_STRING'];
<a href="index.php?pagename">Link </a>
¿Podriais confirmar que maneras son más seguras? Gracias!
|
|
|
94
|
Programación / PHP / convertir o mostrar binary image de la base de datos
|
en: 24 Septiembre 2014, 00:45 am
|
Hola, tengo que migrar una base de datos y al parecer las imagenes de perfil de los usuarios vienen dentro. No se que codificacion tienen, pero he mirado en el dump y todo apunta a que estan en hex: http://pastebin.com/fauxgT3uEn el dump del sql aparece todo junto y en mayusculas. Todas las imagenes empiezan asi: 0x6C740000B61E0100424DB61E010000000000360000002800000080000000BF0000000100180000000000801E010000000000000000000000000000000000 Las imagenes fueron tomadas (con webcam) y guardadas en sqlite por una aplicacion de escritorio. //test.php //header('Content-Type: image/jpeg'); $hex = 'hex code'; $filename = 'image.jpg';
Estoy intentando mostrarlas en la nueva web o mas facil, sacarlas a archivo, pero no funciona nada de lo que intento, alomejor no es hexadecimal... ?? Gracias!
|
|
|
95
|
Programación / Programación General / leer sqlite, conectar a db y enviar consultas
|
en: 22 Septiembre 2014, 16:18 pm
|
Hola, necesito de alguna manera conectar una aplicacion a una base de datos mysql pero que utiliza una base de datos sqli (file.mdb). La idea es que la aplicacion envie consultas a mysql.
¿Como podria hacer eso? ¿Que lenguaje de programación sería el más adecuado para esto?
Seguramente solo sea posible accediendo al archivo .mdb y sincronizando con mysql, en tal caso tambien seria necesario que la aplicacion haga lo contrario, sincronizar la db de mysql con el archivo sqlite.
¿Alguna idea para empezar?
Gracias!
|
|
|
96
|
Programación / Bases de Datos / cambiar conexion sqlite a mysql
|
en: 22 Septiembre 2014, 13:23 pm
|
Hola, no se si este es el apartado correcto, pero alla va: Tengo una aplicacion que guarda datos en un archivo sqlite (file.mdb) y me gustaría saber si hay alguna manera de redireccionar para que guarde en una base de datos en un servidor mysql.
¿Es esto posible?
Gracias.
|
|
|
97
|
Programación / PHP / funcion no inserta datos en la db
|
en: 22 Septiembre 2014, 00:53 am
|
Hola, estoy intentando añadir datos a un registro de usuarios, pero no funciona... functions.php//ip function function get_ip_address() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip = $_SERVER['REMOTE_ADDR']; } }
//time function function get_current_time() { }
//record attempt or failed login $login_time = get_current_time(); $access_address = get_ip_address(); $mysqli->query("INSERT INTO login_attempts(user_id, used_password, time, login_time, access_address) VALUES ('$user_id', '$used_password', '$now', '$login_time', '$access_address')");
Si antes de que se encripte la contraseña creo una variable que contenga $password tal y como viene en texto plano, podre usar esa variable despues para guardarla en la db y seguira conteniendo $password sin cifrar? Eso es lo que quiero hacer para guardar cada login fallido, pero no funciona si incluyo el $login_time y el $access_address, si los quito si que inserta. register.inc.php// Insert the new user into the database $reg_time = get_current_time(); $reg_ip = get_ip_address(); if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password, salt, reg_time, reg_ip) VALUES (?, ?, ?, ?, ?, ?)")) { $insert_stmt->bind_param('ssssss', $username, $email, $password, $random_salt, $reg_time, $reg_ip); // Execute the prepared query. if (! $insert_stmt->execute()) { header('Location: ../error.php?err=Registration failure: Contacte al administrador.'); } }
Eso tampoco funciona y es lo que quiero que se guarde en la db al crear el usuario. Y pasa lo mismo que antes, si quito $reg_time y $reg_ip si que funciona... ¿hay algo mal con esas dos variables o funciones? He comprobado todo lo que se, la base de datos esta bien, todas las columnas existen, pero no inserta nada en la db... ni aparece ningun error. Cuando creo una cuenta me redirecciona a la pagina "Cuenta creada" como si todo hubiera salido bien, pero en la tabla members no hay nada creado... Es posible que este mal la llamada a esas dos funciones y por eso no inserta nada, pero antes de crear esas dos funciones lo probe poniendo directamente el codigo y tampoco funcionaba. Es algo extraño la verdad. Gracias.
|
|
|
98
|
Programación / Desarrollo Web / css class no funciona con float left
|
en: 21 Septiembre 2014, 20:55 pm
|
Hola, tengo una clase en css que muestra un fondo para mostrar el contenido dentro, se adapta el contenido que haya. .boxy { background: none repeat scroll 0 0 #F7F7F9; border: 2px solid #FFFFFF; border-radius: 7px 7px 7px 7px; box-shadow: 0 0 0 1px rgba(0, 0, 2, 0.1), 0 1px 0 rgba(0, 0, 2, 0.15), 0 1px 1px rgba(0, 0, 2, 0.1); padding: 13px; text-shadow: 0 1px 0 #FDFDFF; margin: 10px; }
Pero no funciona cuando pongo float left para un div que hay dentro: <li><a>'.$row['id'].' </a></li> <li><a href="amigo.php?id='.$row['id'].'">'.$row['nombre'].' </a></li> <li><a>'.$row['status'].' </a></li> <li><a>'.$row['bonus'].' </a></li> ';
Eso es una lista, y cada casilla debe ir de izquierda a derecha, por eso la clase secondmenu tiene float: left; El div con la clase boxy envuelve todo el codigo php, pero no creo que eso sea un problema, ya que si quito el float left el fondo se alarga y cubre todas las filas de la lista, que estan todas de arriba a abajo. ¿Sabeis alguna manera de arreglar esto? Gracias.
|
|
|
99
|
Programación / PHP / obtener id login de session
|
en: 20 Septiembre 2014, 18:50 pm
|
Hola, necesito obtener el user_id del login actual para usarlo en una pagina. Esta es la función que utilizo para el login: function login($email, $password, $mysqli) { // Using prepared statements means that SQL injection is not possible. if ($stmt = $mysqli->prepare("SELECT id, username, password, salt FROM members WHERE email = ? LIMIT 1")) { $stmt->bind_param('s', $email); // Bind "$email" to parameter. $stmt->execute(); // Execute the prepared query. $stmt->store_result(); // get variables from result. $stmt->bind_result($user_id, $username, $db_password, $salt); $stmt->fetch(); // hash the password with the unique salt. $password = hash('sha512', $password . $salt); if ($stmt->num_rows == 1) { // If the user exists we check if the account is locked // from too many login attempts if (checkbrute($user_id, $mysqli) == true) { // Account is locked // Send an email to user saying their account is locked return false; } else { // Check if the password in the database matches // the password the user submitted. if ($db_password == $password) { // Password is correct! // Get the user-agent string of the user. $user_browser = $_SERVER['HTTP_USER_AGENT']; // XSS protection as we might print this value $_SESSION['user_id'] = $user_id; // XSS protection as we might print this value "", $username); $_SESSION['username'] = $username; $_SESSION['login_string'] = hash('sha512', $password . $user_browser); // Login successful. return true; } else { // Password is not correct // We record this attempt in the database $mysqli->query("INSERT INTO login_attempts(user_id, time) VALUES ('$user_id', '$now')"); return false; } } } else { // No user exists. return false; } } }
¿Como podria usar el id en otra pagina? Gracias!
|
|
|
100
|
Programación / PHP / enviar una id de mysql al hacer click
|
en: 19 Septiembre 2014, 22:32 pm
|
Hola, tengo una lista con usuarios de una base de datos, pero me gustaría que al hacer click encima del nombre se guardara la id de ese usuario para usarla en otra pagina donde se muestra el perfil completo. Esta es la lista: $query = sprintf("SELECT rc_usuario.*, rc_referidos.* FROM rc_referidos INNER JOIN rc_usuario ON rc_usuario.idUsuario = rc_referidos.idReferido WHERE rc_referidos.idRedComercio2 = '$connectedUserID'", $op['id']; $op['nombre']; $op['apellidos']; $op['status']; echo' <div class="menu"> <div class="secondmenu"> <ul> <li><a>'.$op['id'].'</a></li> <li><a href="index.php?r=usuario/amigo">'.$op['nombre'].'</a></li> <li><a>'.$op['apellidos'].'</a></li> <li><a>'.$op['status'].'</a></li> </ul> </div> </div> '; echo' '; }
Es algo complicado, ya que se muestran muchos usuarios y realmente esto ya es nuevo para mi. Pero supongo que en el nuevo archivo se tendrá que guardar la id en una variable para usarla... Gracias!
|
|
|
|
|
|
|