Hola, que tal.
Mucho tiempo sin hacer PHP han pasado la cuenta y estoy pegado en un problema hace un par de días.
Tengo un seudo CMS que construí hace mucho tiempo en php 5.0.
Ahora estoy en proceso de transformarlo y adecuarlo a las nuevas llamadas de MySQLi además de pasar de un formato estructurado normal a php OO.
Por un asunto de TOC (transtorno obsesivo compulsivo), quiero dejar la conexión a la BD en una clase en un archivo (conexion.php), tener un archivo con las clases y métodos de trabajo de este cms (funciones.php) y por otro lado un archivo index.php que sólo tenga en su mayoría, html sin tanto código php sólo el justo y necesario.
Hasta ahora, la conexión a la BD, funciona.
Y he podido enviar entre objetos el link de mysqli para poder ejecutar consultas.
Lo que NO puedo hacer es recuperar los datos en forma de array y poder retornarlos al lugar desde donde fue instanciado el objeto y generada la llamada al método.
Les pego mi código.
Conexion.php
Código:
<?php
class DB {
//Atributos
private $errores;
public $mysqli;
//Metodos
function __construct($errores = array()) {
$this -> errors = $errores;
$this -> conectar();
}
function conectar() {
$servidor = "localhost";
$usuario = "mcfly";
$password = "123456";
$database = "greatscott";
if ($this -> mysqli == null)
{
$this -> mysqli = new mysqli($servidor, $usuario, $password, $database);
if ($this->mysqli->connect_errno > 0)
{
die('No puedo conectarme por [' . $this->mysqli->connect_error . ']');
}
}
return $this -> mysqli;
}
}
?>
funciones.php
Código:
class FuncionesSitio {
//Atributos
private $DB;
public function __construct(DB $DB) {
$this->DB = $DB;
}
//Metodos
//Validacion Usuarios
public function validarUsuario($username,$password){
$respuesta = array();
$query = "SELECT nombre, apellido, tipousuario FROM m_usuarios WHERE username = ? AND password = ?";
$stmt = $this->DB->mysqli->stmt_init();
if ($stmt = $this->DB->mysqli->prepare($query)) {
$stmt->bind_param("ss",$username, $password);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($nombre, $apellido, $tipousuario);
$meta = $stmt->num_rows();
echo "Filas valor: " . $meta . "<br>";
while($stmt->fetch()) {
$respuesta[] = $nombre . "|" . $apellido;
}
//Vaciar Recursos
//$stmt->free_result();
} else {
echo "Problemas realizando la consulta: [" . $this->DB->mysqli->error . "]";
die();
}
return $respuesta;
}
}
?>
El problema de arriba es esa es la única forma en que he podido recuperar los valores de la BD usando Preparated Statements, haciendo un array separado por "palitos" | que después tendré que volver a limpiar.
mi archivo index.php
Código:
//Conecta a BD testing
include("config/conexion.php");
include("libreria/funciones.php");
//Nuevo Objeto de DB
$DB = new DB();
//Asigno el link a la BD a mi clase de funciones de página
$FS = new FuncionesSitio($DB);
session_start();
if (isset($_POST["enviar"])) {
$username = $_POST["holi"];
$password = $_POST["crayoli"];
if ($valor[] = $FS->validarUsuario($username, $password) ) {
//Si hay usuario, dame sesiones mamita
$_SESSION['user_sitio'] = "ON";
echo "Valores de Sesiones <br>";
$_SESSION['nombre_user'] = $valor[1];
$_SESSION['apellido_user'] = $valor[2];
$_SESSION['privilegio_user'] = $valor[4];
//Avísame que conectaste
echo " <br>ARCHIVO INDEX - YEAH BABY<br>";
echo $valor[1];
foreach ($valor as $val) {
echo $val;
}
//Envíame al admin con sesiones activas
echo "<script>window.location=\"admin.php\";</script>";
} else {
// die();
echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0;URL=index.php?e=incorrecto\">";
}
}
Llevo días tratando de solucionar esto. Soy un novato en PHP OO pero creo haber logrado hartos avances en este poco tiempo.
Si pueden ayudarme o darme algunos tips sobre poder recibir correctamente la info desde bd al hacer la pregunta con mysqli y "statements" preparados podría seguir y realizar las demás acciones básicas como editar, agregar o borrar...
HELP!!