Ver Mensaje Individual
  #9 (permalink)  
Antiguo 07/04/2005, 17:15
raml
 
Fecha de Ingreso: abril-2005
Mensajes: 50
Antigüedad: 19 años
Puntos: 0
Se solucionó en un 80% pero....

En efecto el problema era del archivo .ini, por lo que opté por el segundo método propuesto por cuija ya que el primero tiene la desventaja de que si activo session.auto_start = 1 no puedo usar objetos como variables de sesión. Me da gusto saber que de 8 foros en los que pedí ayuda, 1 (este) era en español y fue el único en donde obtuve una solución satisfactoria. Mil Gracias

Un segundo problema que tengo es que estoy creando un sistema de administración de contenido, con una aplicación para ratificar usuarios y aunque los problemas relacionados con SESSION de mis otros scripts se resolvieron, este, aún no.

El problema radica en que cuando escribo el usuario y el password correctos no me redirige a la página correcta sino que se queda ahí, tan sólo desaparecen los datos y se queda el formulario. En cambio cuando meto algún dato incorrecto si me muestra el error.

A continuación puse todo el código y la estructura de la base de datos, también les puede servir para sus aplicaciones ya que es un ejemplo de un libro y según yo el código está bien, tal vez el problema es otra vez con el ini.

Espero puedan ayudarme, este es el código:

index.php---------------------------------------------------

Esta página es la portada para administrar el sitio de noticias.

Código PHP:
<html>
<
head>
<
title>Admin Menu</title>
</
head>
<
body>
<
h1>Admin Menu</h1>
<
ul>
  <
li>Writers - <a href 'writer.php'>Add/Edit stories</a></li>
  <
li>Editors - <a href 'publish.php'>Publish/Unpublish stories</a></li>
</
ul>
</
body>
</
html
writer.php---------------------------------------------------

Esta pagina permite editar las noticias.

Código PHP:
<?php
  
// writer.php Is the Interface for Writers to Manage Their Stories


  
include_once('include_fns.php');

  if (!
check_auth_user()) 
  {
    
login_form();
  }
  else 
  {
      
$username $_POST['username'];
    
$password $_POST['password'];
    
$handle db_connect();

    
$writer get_writer_record($_SESSION['auth_user']);

    echo 
'<p>Welcome, '.$writer['full_name'];
    echo 
' (<a href="logout.php">Logout</a>) (<a href="index.php">Menu</a>) (<a href="../">Public Site</a>) </p>';
    echo 
'<p>';

    
$query 'select * from stories where writer = \''.
           
$_SESSION['auth_user'].'\' order by created desc';
    
$result $handle->query($query);

    echo 
'Your stories: ';
    echo 
$result->num_rows;
    echo 
' (<a href="story.php">Add new</a>)';
    echo 
'</p><br /><br />';
    
    if (
$result->num_rows
    {
      echo 
'<table>';
      echo 
'<tr><th>Headline</th><th>Page</th>';
      echo 
'<th>Created</th><th>Last modified</th></tr>';
      while (
$stories $result->fetch_assoc()) 
      {
        echo 
'<tr><td>';
        echo 
$stories['headline'];
        echo 
'</td><td>';
        echo 
$stories['page'];
        echo 
'</td><td>';
        echo 
date('M d, H:i'$stories['created']);
        echo 
'</td><td>';
        echo 
date('M d, H:i'$stories['modified']);
        echo 
'</td><td>';
        if (
$stories['published'])
        {
          echo 
'[Published '.date('M d, H:i'$stories['published']).']';
        }
        else 
        {
          echo 
'[<a href="story.php?story='.$stories['id'].'">edit</a>] ';
          echo 
'[<a href="delete_story.php?story='.$stories['id'].'">delete</a>] ';
        }
        echo 
'[<a href="keywords.php?story='.$stories['id'].'">keywords</a>]';
        echo 
'</td></tr>';
      }
      echo 
'</table>';
    }
  }
?>
publish.php---------------------------------------------------

Esta pagina permite publicar noticias.

Código PHP:
<?php
  
include_once('include_fns.php');

  if (!
check_auth_user()) 
  {
    
login_form();
  }
  else 
  {
    
$handle db_connect();

    
$writer get_writer_record($_SESSION['auth_user']);

    echo 
'<p>Welcome, '.$writer['full_name'];
    echo 
' (<a href="logout.php">Logout</a>) (<a href="index.php">Menu</a>) (<a href="../">Public Site</a>) </p>';
    
    
$query "select * from stories s, writer_permissions wp
              where wp.writer = '{$_SESSION['auth_user']}' and
                    s.page = wp.page
              order by modified desc"
;
    
$result $handle->query($query);

    echo 
'<h1>Editor admin</h1>';

    echo 
'<table>';
    echo 
'<tr><th>Headline</th><th>Last modified</th></tr>';
    while (
$story $result->fetch_assoc()) 
    {
      echo 
'<tr><td>';
      echo 
$story['headline'];
      echo 
'</td><td>';
      echo 
date('M d, H:i'$story['modified']);
      echo 
'</td><td>';
      if (
$story[published]) 
      {
        echo 
'[<a href="unpublish_story.php?story='.$story['id'].'">unpublish</a>] ';
      }
      else 
      {
        echo 
'[<a href="publish_story.php?story='.$story['id'].'">publish</a>] ';
        echo 
'[<a href="delete_story.php?story='.$story['id'].'">delete</a>] ';
      }
      echo 
'[<a href="story.php?story='.$story['id'].'">edit</a>] ';

      echo 
'</td></tr>';
    }
    echo 
'</table>';
  }
?>
include_fns.php ---------------------------------------------------

Esta pagina llama a algunas funciones que permiten 1) conectarme con la base de datos y 2) autentificar usuarios (puede que ahí este el problema) sino esta en el .ini

Código PHP:
<?php
  
// All the include files for admin pages in the site
  
include_once('../db_fns.php');
  include_once(
'user_auth_fns.php');
  
session_start();
?>
db_fns.php ---------------------------------------------------

Esta pagina contiene la función para conectarse a la base de datos.

Código PHP:
<?php

function db_connect()
{
   
$handle = new mysqli('localhost''content''password''content'); 
   if (!
$handle)
   {
     return 
false;
   }
   return 
$handle;
}

function 
get_writer_record($username)
{
  
$handle db_connect();
  
$query "select * from writers where username = '$username'";
  
$result $handle->query($query);
  return(
$result->fetch_assoc());
}

function 
get_story_record($story)
{
  
$handle db_connect();
  
$query "select * from stories where id = '$story'";
  
$result $handle->query($query);
  return(
$result->fetch_assoc());
}

function 
query_select($name$query$default='')
{
  
$handle db_connect();

  
$result $handle->query($query);

  if (!
$result)
  {
    return(
'');
  }

  
$select  "<select name='$name'>";
  
$select .= '<option value=""';
  if(
$default == ''$select .= ' selected ';
  
$select .= '>-- Choose --</option>';

  for (
$i=0$i $result->num_rows$i++) 
  {
    
$option $result->fetch_array();
    
$select .= "<option value='{$option[0]}'";
    if (
$option[0] == $default
    {
      
$select .= ' selected';
    }
    
$select .=  ">[{$option[0]}] {$option[1]}</option>";
  }
  
$select .= "</select>\n";

  return(
$select);
}

?>
Esta página contiene las funciones para autentificar a los usuarios.

user_auth_fns.php ------------------------------------------------

Código PHP:
<?php
  
function login($username$password)
  
// check username and password with db
  // if yes, return true
  // else return false
  
{
    
// connect to db
    
$handle db_connect();
    if (!
$handle)
      return 
0;

    
$result $handle->query("select * from writers
                              where username='$username' and
                                password = SHA1('$password')"
);
    if (!
$result)
    {
      return 
0;
    }
    if (
$result->num_rows>0)
    {
      return 
1;
    }
    else 
    {
      return 
0;
    }
  }

  function 
check_auth_user()
  
// see if somebody is logged in and notify them if not
  
{
    global 
$_SESSION;
    if (isset(
$_SESSION['auth_user']))
    {
      return 
true;
    }
    else
    {
      return 
false;
    }
  }

  


  function 
login_form()
  {
    
?>
    <form action='login.php' method='POST'>
    <table border=0>
    <tr>
      <td>Username</td>
      <td><input size='16' name='username'></td>
    </tr>
    <tr>
      <td>Password</td>
      <td><input size='16' type='password' name='password'></td>
    </tr>
    </table>
    <input type='submit' value='Log in'>
    </form>
    <?php
  
}

  function 
check_permission($username$story)
  
// check user has permission to act on this story 
  
{
    
// connect to db
    
$handle db_connect();
    if (!
$handle)
      return 
0;

    if(!
$_SESSION['auth_user'])
      return 
0;

    
$result $handle->query("select * from writer_permissions wp, stories s
                              where wp.writer = '{$_SESSION['auth_user']}' and
                                  wp.page = s.page and
                                  s.id = $story
                              "
);
    if (!
$result)
    {
      return 
0;
    }
    if (
$result->num_rows>0)
    {
      return 
1;
    }
    else 
    {
      return 
0;
    }
  }
?>
login.php ------------------------------------------------

Esta página corre el script para accesar al CMS.´

Código PHP:
<?php
  
include_once('include_fns.php');

  if ( (!isset(
$_REQUEST['username'])) || (!isset($_REQUEST['password'])) ) 
  {
    echo 
'You must enter your username and password to proceed';
    exit;
  }

  
$username $_REQUEST['username'];
  
$password $_REQUEST['password'];

  if (
login($username$password)) 
  {
    
$_SESSION['auth_user'] = $username;
    
header('Location: '.$_SERVER['HTTP_REFERER']);
  }
  else 
  {
    echo 
'The password you entered is incorrect';
    exit;
  }
?>
Espero sirva de algo, gracias.