Problema con PHP y MySQL

Publicado en 'Programación' por LeoIII, 18 Ene 2011.





  1. LeoIII

    LeoIII Miembro maestro

    Registro:
    22 Dic 2010
    Mensajes:
    506
    Likes:
    76




    Bueno, este infinitamente simple CMS lo programé en el verano del 2009 (aun recuerdo esos días :cray:, una semana algo aburrida ¬¬) y pues luego de ese tiempo lo dejé porque hacía lo que se supone que tenía que hacer y me daba mucha flojera agregar un sistema de comentarios u otro para agregar enlaces.

    En pocas palabras era mi versión de Wordpress, era una autoevaluación para ver si era capaz de programar algo decente. Bueno, dejo de marearlos y voy al punto:

    Tengo 2 archivos: addentry.php, proccessentry.php y la BD.

    La BD tiene la tabla "entrada", con los campos: "id", "nombre", "fecha" y "cuerpo".

    El archivo addentry.php:

    PHP:
    <form enctype="multipart/form-data" action="Nopuedocolocarenlaces" method="post">
        <
    label for="entrada">Título:</label><br />
        <
    input id="entrada" name="tituloe" size="30" type="text" />
        <
    br />
        <
    p>
        <
    label for="entrada">Cuerpo:</label><br />
        <
    textarea id="entrada" name="cuerpo" type="text" cols="67" rows="7">
    Escribe tu entrada.</textarea>
        </
    p>
        <
    p>
        <
    input name="submit" type="submit" value="Publicar" />
        </
    p>
    </
    form>
    El archivo proccessentry.php:

    PHP:
    <?php

        connectDB
    ($dbh$db);
        
    agregarreg($tituloe$fecha$cuerpo$sql$resultado$id);
        
        echo 
    "<br /><span class='entrada'>Tu entrada ha sido agregada. Ya deberías poder leerla en la página prncipal.</span>";
    ?>
    Estos 2 archivos era incluídos en la plantilla, que incluía la librería:

    librería.php:

    PHP:
    <?php

    function connectDB(){
        
        
    // Datos de conexión a configurar
        
    $user "usuario";
        
    $pass "contraseña";
        
    $bbdd "nombredelaBD";
        
        
    $dbh mysql_connect("localhost"$user$pass);  
        if (!
    $dbh) {
        die(
    'No se logró conectar con el servidor: ' mysql_error());  
        }
        
    $db mysql_select_db($bbdd$dbh);
        if (!
    $db) {
        die (
    'No se logró seleccionar la base: ' mysql_error());  
        }
        }

    function 
    agregarreg(){
        
        
    $minuto date('i');
        
    $hora date('H');
        
    $dia date('d');
        
    $mes date('m');
        
    $ano date('Y');
        
        
        
    $tituloe $_REQUEST['tituloe'];
        
    $fecha sprintf('%s:%s:%s %s-%s-%s'$hora,$minuto,date('s'),$dia,$mes,$ano);
        
    $cuerpo $_REQUEST['cuerpo'];
        
         
    // Guardamos en la BBDD
        
    $sql"INSERT INTO entrada (id, titulo, fecha, cuerpo) VALUES ('NULL','$tituloe','$fecha','$cuerpo')";
        
    $resultado mysql_query($sql);
     
        
    $id mysql_insert_id();
        }
    ?>
    Hasta ahí todo bien. Funcionaba perfectamente, podía agregar entradas que luego aparecían en la página principal, incluso borrarlas con otro sistema que hice. Pero no sé por qué (no recuerdo haber cambiado algo desde entonces) ya no funciona, cuando lleno el formulario me redirige a index.php y no aparece la entrada. ¿Alguien nota el error? Gracias por adelantado. Si necesitan más información díganmelo que sería un error mío por no ponerlo.

    PD:Todo esto está en mi DD, no en un servidor externo.

    PD2: No veo muchas peticiones de ayuda como esta, mas bien de empleos y cosas acerca de programación ¿es porque lo que acabo de hacer no debería estar acá?

    PD3: Por más simple que sea, el que quiera usarlo puede hacerlo, pero siempre dándole el crédito a quien lo merece :yeah:.
     
    Última edición: 18 Ene 2011


  2. achahuasoncco

    achahuasoncco Miembro maestro

    Registro:
    12 Dic 2010
    Mensajes:
    360
    Likes:
    108
    Te has oxidado en PHP, una aceitada no te hará daño. Bueno las observaciones:

    - El atributo action de tu formulario debe tener como valor la página a donde vas a enviar tus datos usando el método POST, en este caso se trata del archivo proccessentry.php:

    <form enctype="multipart/form-data" action="proccessentry.php" method="post">

    Una vez que tu archivo proccessentry.php recibe los datos enviados por addentry.php a traves del metodo POST.
     
  3. LeoIII

    LeoIII Miembro maestro

    Registro:
    22 Dic 2010
    Mensajes:
    506
    Likes:
    76
    Pues eso está correcto, lo que pasa es que aún no puedo colocar enlaces en el foro (había escrito toda la dirección), pero se dirige al archivo correcto (proccessentry.php)
     
  4. Fumador

    Fumador Miembro frecuente

    Registro:
    22 Jun 2009
    Mensajes:
    162
    Likes:
    10
    Está medio raro tu código, parece que guardas las fechas como cadenas y al ejecutar tus funciones ingresas parámetros que no existen.... pero bueno te dejo un ejemplo aproximado a tu codigo:

    supongamos que en proccessentry.php está el include('libreria.php');

    Pues bastaría un :

    PHP:
     
    echo agregarreg(); 
         

    y en tus funciones d ela librería podrías hacer algo así:

    PHP:
     
     
    function connectDB(){ 
         
        
    // Datos de conexión a configurar 
        
    $user "root"
        
    $pass "."
        
    $bbdd "db_name"
         
        
    $dbh mysql_connect("localhost"$user$pass);   
        if (!
    $dbh) { 
         die(
    'No se logró conectar con el servidor: ' mysql_error());   
        } 
        
    $db mysql_select_db($bbdd$dbh); 
     
        if (!
    $db) { 
        die (
    'No se logró seleccionar la base: ' mysql_error());   
        }
      
     return 
    $dbh;
    }
     
     

    function 
    agregarreg(){ 
     
    $db connectDB();
     
         
        
    $minuto date('i'); 
        
    $hora date('H'); 
        
    $dia date('d'); 
        
    $mes date('m'); 
        
    $ano date('Y'); 
         
         
        
    $tituloe $_REQUEST['tituloe']; 
        
    $fecha sprintf('%s:%s:%s %s-%s-%s'$hora,$minuto,date('s'),$dia,$mes,$ano); 
        
    $cuerpo $_REQUEST['cuerpo']; 
         
         
    // Guardamos en la BBDD 
        
    $sql"INSERT INTO entrada (id, titulo, fecha, cuerpo) VALUES ('NULL','$tituloe','$fecha','$cuerpo')"
        
    $resultado mysql_query($sql,$db) or die(mysql_error()); 
      
        
    //$id = mysql_insert_id();
     
     
    if($resultado) {
     
      return 
    "<br /><span class='entrada'>Tu entrada ha sido agregada. Ya deberías poder leerla en la página prncipal.</span>"
     
     }
      


    suerte
     
    A LeoIII le gustó este mensaje.
  5. LeoIII

    LeoIII Miembro maestro

    Registro:
    22 Dic 2010
    Mensajes:
    506
    Likes:
    76
    Sí, ahora funciona perfectamente :). Gracias Fumador.

    Está algo oxidado porque desde entonces no he aprendido nada más de PHP y como recién en ese tiempo empecé pues es muy simple, como dije. Recién ahora he seguido con los tutoriales y todo eso.

    ¿Está raro? ¿Cómo así? Con los parámetros creo que sé a qué te refieres y recién ahora me doy cuenta de eso :D. Con lo de la fecha ¿Hay una mejor forma de hacerlo?
     
  6. Fumador

    Fumador Miembro frecuente

    Registro:
    22 Jun 2009
    Mensajes:
    162
    Likes:
    10
    puedes usar DATE o DATETIME en los campos de tu tablas y en el servidor guardas tus fechas con un simple date('Y-m-d H:i:s')
     
  7. LeoIII

    LeoIII Miembro maestro

    Registro:
    22 Dic 2010
    Mensajes:
    506
    Likes:
    76
    Pues ya lo cambié a DATETIME, y el 'date('Y-m-d H:i:s')' lo he colocado en:

    PHP:
    $sql"INSERT INTO entrada (id, titulo, fecha, cuerpo) VALUES ('NULL','$tituloe','date('Y-m-d H:i:s')','$cuerpo')";
    He probado con y sin comillas pero no registra la fecha.
     
  8. Fumador

    Fumador Miembro frecuente

    Registro:
    22 Jun 2009
    Mensajes:
    162
    Likes:
    10
    pues pónlo en una variable.
     
  9. LeoIII

    LeoIII Miembro maestro

    Registro:
    22 Dic 2010
    Mensajes:
    506
    Likes:
    76
    Ya lo intenté también, de esta forma:

    PHP:
    $fecha sprintf(date('Y-m-d H:i:s'));
    Y de esta otra:

    PHP:
    $fecha date('Y-m-d H:i:s');
    Ninguna funciona.
     
    Última edición: 19 Ene 2011
  10. Fumador

    Fumador Miembro frecuente

    Registro:
    22 Jun 2009
    Mensajes:
    162
    Likes:
    10
    Fijate primero que es lo que te devuelve el query:

    if($resultado) {

    return $sql;


    }


    y verifica si te genera la fecha, si no guarda es porque no has cambiado el campo de tu tabla.
     
  11. LeoIII

    LeoIII Miembro maestro

    Registro:
    22 Dic 2010
    Mensajes:
    506
    Likes:
    76
    Que raro O_o, intenté de nuevo con:

    PHP:
    $fecha sprintf(date('Y-m-d H:i:s'));
    Pero ahora si funciona. Gracias de nuevo :D, ahora veré si me las ingenio para crear un sistema de comentarios.

    Parece que al quitar esta parte:

    PHP:
        if($resultado) {
        
            return 
    $sql;
    }
    Ya funciona.
     
    Última edición: 19 Ene 2011