Lo que quiero hacer es bastantente simple. Un tag-board (con mysql) usando POO que acepte un numero maximo de mensajes (por ejemplo 20) y vaya acomodando los mensajes en la base de datos (una tabla que tendria 20 filas) y el script lo imprima de mensaje mas nuevo a mas viejo. Y lo mas dificil (no debe ser muy dificil, pero para mi lo es), cuando la tabla que este llena y un usuario quiera ingresar un mensaje, que el mensaje mas viejo sea borrado para dejar lugar al mensaje recien ingresado.
Basicamente es eso. Ahora les dejo mi codigo. Para que "funcione" (entre comillas por que realmente no funciona) tienen que tener una base de datos con 3 columnas, la primera llamada "numero" que seria el id de la fila, la segunda "nombre" que es el nombre de la persona que ingreso el mensaje, y la tercera "mensaje" que es el mensaje en si.
Por ultimo aclaro que el codigo no me da ningun error, simplemente no hace lo que deberia hacer, probe depurarlo de mil maneras, pero parece que no tiene arreglo, por eso creo que es mejor hacer uno desde cero.
Código PHP:
<?php
class insertarMensaje {
private $dblink, $filas; /* variables para almacenar el enlaze a mysql y la cantidad de filas que esta tiene la base de datos */
public function conectar($host, $user, $pass, $db) { /* constructor que sirve para conectar con la base de datos */
$this->dblink = mysql_connect($host, $user, $pass);
mysql_select_db($db, $this->dblink);
}
public function buscarEspacio($nombre, $mensaje, $tabla, $cantidadFilas) { /* metodo que busca espacio en la base de datos */
echo $nombre." ".$mensaje;
$this->filas = $cantidadFilas; // guarda la cantidad de filas que tiene la base de datos
$sql = "select nombre from '$tabla' where numero = $cantidadFilas";
for (;($resultado = mysql_query($sql)); $cantidadFilas--) { /* hace una consulta a cada fila, desde la ultima a la primera hasta que encuentre un espacio libre o no queden mas filas*/
$fila = mysql_fetch_assoc($resultado);
if ($fila['nombre'] == '') { /* si la columna nombre esta vacia llama al metodo insertar y termina el bucle */
$this->insertar($nombre, $mensaje, $tabla, $cantidadFilas);
break;
}
}
if ($cantidadFilas < 0) /* si cantidadFilas es menor que 0 significa que no hay espacio disponible en la base de datos, por lo que llama al metodo hacerEspacio */
$this->hacerEspacio($nombre, $mensaje, $tabla);
}
public function hacerEspacio($nombre, $mensaje, $tabla) { /* mueve los datos de una fila a la fila que le sigue, por ejemplo, los datos de la fila 2 seran movidos a la fila 3, para asi eliminar los datos de la ultima fila y dejar libre la primer fila (0) para insertar los datos nuevos */
echo $nombre." ".$mensaje;
$filaNum = $this->filas;
for (;$filaNum >= 1; $filaNum--) {
$filaInferior = $filaNum - 1;
$sql = "select * from '$tabla' where numero = $filaInferior";
$resultado = mysql_query($sql); /* copia los datos de una fila, como por ejemplo puede ser la fila numero 2 */
$fila = mysql_fetch_assoc($resultado);
$nombre = $fila['nombre'];
$mensaje = $fila['mensaje'];
$sql = "update mensajes set nombre = '$nombre' where numero = $filaNum";
mysql_query($sql); /* inserta el valor de la columna nombre que copio anterirmente, siguiendo con el ejemplo anterior, se insertaria en la fila numero 3 */
$sql = "update mensajes set mensaje = '$mensaje' where numero = $filaNum";
mysql_query($sql); /* igual que el anterior pero con la columna mensaje */
}
$this->insertar($nombre, $mensaje, $tabla, 0); //al terminar de mover todas las filas llama a la funcion insertar
}
public function insertar($nombre, $mensaje, $tabla, $fila) {
echo $nombre." ".$mensaje;
$sql = "update mensajes set nombre = '$nombre' where numero = $fila";
mysql_query($sql); /* inserta el valor de nombre en la columna correspondiente */
$sql = "update mensajes set mensaje = '$mensaje' where numero = $fila";
mysql_query($sql); /* igual que el anterior pero con el mensaje */
}
}
if(isset($_POST['nombre']) && isset($_POST['mensaje']) && isset($_POST['host']) && isset($_POST['user']) && isset($_POST['db']) && isset($_POST['tabla']) && isset($_POST['filas'])) {
$nombre = $_POST['nombre'];
$mensaje = $_POST['mensaje'];
$host = $_POST['host'];
$user = $_POST['user'];
$pass = $_POST['pass'];
$db = $_POST['db'];
$tabla = $_POST['tabla'];
$filas = $_POST['filas'];
$board = new insertarMensaje;
$board->conectar($host, $user, $pass, $db);
$board->buscarEspacio($nombre, $mensaje, $tabla, $fila);
}
else {
?>
<form action="tagpoo.php" method="post">
<h3>Datos a introducir:</h3>
<p>Nombre: <input type="text" name="nombre" /></p>
<p>Mensaje: <input type="text" name="mensaje" /></p>
<h3>Datos de la base de datos:</h3>
<p>Host: <input type="text" name="host" /></p>
<p>Usuario: <input type="text" name="user" /></p>
<p>Password: <input type="text" name="pass" /></p>
<p>Base de datos: <input type="text" name="db" /></p>
<p>Tabla: <input type="text" name="tabla" /></p>
<p>Cantidad de filas: <input type="text" name="filas" /></p>
<input type="submit" value="Enviar" />
</form>
<?php
}
?>