página php simple: ¿qué estoy haciendo mal aquí? [cerrado]

usando Eclipse 3.5.2 (PDT, WEB TOOLS, APTANA 2 y depurando con XDEBUG) en UBUNTU 10.04 ...

No puedo averiguar por mi vida qué está mal con este código. He trabajado durante años como desarrollador de .NET, así que creo que sé leer documentación y configurar una aplicación básica, aunque soy nuevo en LAMP.

La siguiente página solo muestra "PHP se está ejecutando" y la primera lista de "yo", "usted" y "ella". Verifiqué las credenciales de la base de datos al iniciar sesión en PhpMyAdmin.

Al depurar y entro en core_db.php, todas las variables se enumeran como <Uninitialized> y todo se detiene en la línea $stmt->execute();

list_users.php

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<?php include 'db/chore_db.php' ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=encoding">
<title>Insert title here</title>
</head>
<body>
<?php echo 'Php is running'; ?>
<ul>
<?php $ar = array('me','you','her');
foreach ($ar as $user) {
    ?>
    <li><?php   echo $user;}?></li>
</ul>

<div>

<?php 
$db = new chore_db();
$myusers = $db->get_users(null,null);

foreach ($myusers as $u) {
    ?>


<ul>
    <li><?php echo $u;  }?></li>
</ul>
</div>
</body>
</html>

chore_db.php

<?php    
class chore_db{
    /**
     * @param int $id
     * @param string $user_name
     * @return Ambigous <multitype:, usersTbl>
     */
    public function  get_users($id, $user_name){
        $users = array();
        $sql = '';
        $con = null;


        $sql = 'SELECT id, chore_type, name, description, created_dt, created_by, modified_dt, modified_by FROM chores';// where id = IFNULL(?,id) and name = IFNULL(?,name)";
        $con = new mysqli('localhost','chore_admin','!chore_admin','chores');

        $stmt = $con->prepare($sql);

        //bind parameters
        //$stmt->bind_param('ss', $id_param, $name_param);
        //$id_param = $id;
        //$name_param = $user_name;
        //execute the sql

        $stmt->execute();

        //now bind the results to variables
        $stmt->bind_result($rs_id, $rs_chore_type, $rs_name, $rs_description, $rs_created_dt, $rs_created_by, $rs_modified_dt, $rs_modified_by);

        while($stmt->fetch()){
            $users[] = new usersTbl($rs_id, $rs_chore_type, $rs_name, $rs_description, $rs_created_dt, $rs_created_by, $rs_modified_dt, $rs_modified_by);

        }

        return $users;
    }
}



class usersTbl{
    public $id;
    public $user_name;
    public $first_name;
    public $last_name;
    public $created_dt;
    public $created_by;
    public $modified_dt;
    public $modified_by;

    public $user_chore_list;
    public $user_chore_date_list;

    //public function __construct(){}
    public function __construct($userId, $uName, $fName, $lName, $createdDT, $createdDT, $createdBY, $modifiedDT, $modifiedBy){
        $this->id = $userId;
        $this->user_name = $uName;
        $this->first_name = $fName;
        $this->last_name = $lName;
        $this->created_by = $createdBY;
        $this->created_dt = $createdDT;
        $this->modified_by = $modifiedBy;
        $this->modified_dt = $modifiedDT;
    }
}

preguntado el 27 de agosto de 11 a las 21:08

¿Dónde has guardado tu documento? ¿Puedes acceder a él a través de localhost / list_users.php? -

alexn, maldita sea! eso fue rápido. Sí, lo es [enlace]localhost / Tareas /… -

@kevcoder ¿Es el final de la salida HTML (si es su fuente de vista)? ¿O la salida simplemente se detiene después de la lista? Además, su lista se muestra mal en el foreach, debe cerrarla (el foreach) después del </li>, no después de la echo - esto se aplica a ambos bucles / listas. -

también el proyecto se guarda en / var / www / Chores y mi cuenta es propietaria de todo en / var / www -

Además, ¿qué obtienes si var_dump($myusers);? -

2 Respuestas

El problema es que está intentando hacer eco de objetos, sin dar ninguna indicación de cómo se debe formatear su contenido. Aún debería estar obteniendo algo de salida, por lo que obviamente hay algo más en juego, pero aquí hay una versión con muchos problemas solucionados:

list_users.php

<?php include 'db/chore_db.php' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=encoding">
    <title>Insert title here</title>
  </head>
  <body>
    <?php echo 'Php is running'; ?>
    <ul>
      <?php 
        $ar = array('me','you','her');
        foreach ($ar as $user) {
      ?>
      <li><?php echo $user; ?></li>
    <?php } ?>
    </ul>
    <div>
      <ul>
        <?php 
          $db = new chore_db();
          $myusers = $db->get_users(null,null);
          foreach ($myusers as $u) {
        ?>
        <li><?php echo $u->user_name; ?></li> <!-- You need to echo a property of the object (or several, rather than the object itself... -->
        <?php } ?>
      </ul>
    </div>
  </body>
</html>

Respondido 28 ago 11, 02:08

Yo también lo entendí. Pero, ¿por qué no veo ningún error en la página? - codificador de claves

Depende de su nivel de error / configuración de visualización (vea el comentario de afuzzyllama sobre la pregunta) pero no siempre es un error imprimir / hacer eco de un objeto. Es posible que obtenga un 'Error fatal detectable ...' pero también puede obtener una cadena como 'Objeto (nombre de clase) # 1', dependiendo de muchos factores. Vale la pena verificar sus registros de Apache, ya que los errores probablemente aparecerán allí incluso si no aparecen en la salida ... - DaveRandom

está bien. También preguntaste sobre el archivo PHP que termina con un ?>. ¿Por qué los archivos PHP creados con eclipse no incluyen el cierre? ?>? - codificador de claves

@kevcoder No recuerdo haber preguntado sobre eso, pero: No es necesario que incluya un cierre ?>, dependiendo de lo que esté haciendo en el archivo. Cualquier cosa afuera <?php ?> se trata como salida directa, como lo ha usado anteriormente, pero si tuviera que crear un archivo que sea PHP puro (como chore_db.php) no es necesario incluirlo y existe el argumento de que es mejor omitirlo. Esto se debe a que ayuda a evitar problemas en los que tenga espacios en blanco adicionales en uno de estos archivos que se han incluido. Este espacio en blanco podría enviarse al navegador y evitar que use header() mas tarde. - DaveRandom

<ul>
<?php $ar = array('me','you','her');
foreach ($ar as $user) {
    ?>
    <li><?php   echo $user;}?></li>  <<< this is at least one of the problems
</ul>

Respondido 28 ago 11, 02:08

¡eso fue todo! Ambos bucles tenían el mismo problema. una vez que lo corrigí (y el sql: en realidad no estaba mirando la tabla de usuarios), estoy viendo la salida. Gracias a todos - codificador de claves

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.