Foros del Web » Programando para Internet » PHP »

foreach y base de datos..

Estas en el tema de foreach y base de datos.. en el foro de PHP en Foros del Web. Hola! Tengo un formulario para enviar articulos publicados en un blog. El script funciona, es decir, llegan los correos-articulos, pero no funciona porque no recoge ...
  #1 (permalink)  
Antiguo 19/12/2010, 21:36
 
Fecha de Ingreso: noviembre-2009
Mensajes: 64
Antigüedad: 14 años, 5 meses
Puntos: 1
foreach y base de datos..

Hola!

Tengo un formulario para enviar articulos publicados en un blog. El script funciona, es decir, llegan los correos-articulos, pero no funciona porque no recoge los valores de los campos existentes en la base de datos.

un extracto del codigo:

Código PHP:
$postno $_POST['postno'];
$envposts = array("SELECT * FROM $tablearticulos WHERE ID = " $postno);    
if (
$envioarticulos

foreach (
$envioarticulos as $envioarticulo)            
{
$tit = ($envioarticulo->titulo);
$aut = ($envioarticulo->autor);

//sigue más codigo que no pongo.

$parte[1] = $tit;
$parte[2] = $aut;
$parte[3] = 'saludos';

}

titulo y autor son dos de los campos que hay en $tablearticulos.

$parte[1], $parte[2] $parte[3 ]son variables que se imprimen en el mail.

la $parte[3] aparece correctamente en el mail, pero la 1 y la 2 no, lo que quiere decir que $tit y $aut no estan recogiendo los datos de la tabla de la base de datos

he puesto un var_dump para $tit y $art, y aparece string(0) ""

sin embargo, si pongo un var_dump para $envioarticulos y $envioarticulo

aparece algo como lo siguiente:

string(37) "SELECT * FROM articulos WHERE ID = 5348"

es decir, realiza una consulta a la tabla que creo es correcta porque lo hace para un articulo especifico, que es el que el usuario quiere mandar a alguien.

pero entonces, no entiendo porque $tit y $art no recogen los datos de la tabla



alguien, puede orientarme para encontrar el error.

gracias.

saludos
  #2 (permalink)  
Antiguo 20/12/2010, 02:38
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: foreach y base de datos..

Hola Tooj, estoy un poco perdido con tu código, supongo que faltan líneas, en cualquier caso me he tomado la libertad de comentarlo, a ver si te sirve y a ver si aprendo yo también:

Código PHP:
<?php
error_reporting
(E_ALL);
ini_set("display_errors",1);

/**
 * Valor que envía el usuario por formulario
 */
$postno $_POST['postno'];

/**
 * Lo siguiente se supone que hace una query a la db, ¿es un objeto?, ¿es código tuyo?, ¿está el código completo?
* Quita la siguiente línea y conviertela en una consulta normal aunque sea para probar
 * De lo contratio, no hay manera que esto funcione.
 */
$envposts = array("SELECT * FROM $tablearticulos WHERE ID = " $postno);
// $envposts = mysql_query("SELECT * FROM $tablearticulos WHERE ID = " . $postno);
// $envioarticulos = mysql_num_rows($envposts);
// $xFetch = mysql_fetch_assoc($envioarticulos);
if ($envioarticulos//¿Dónde se declara, qué valor debería tener?
{
    
/**
     * A partir de aquí parece que todo está ok
     */
    
foreach ($xFetch as $envioarticulo)
    {
        
/**
         * ¿Accedes a los valores del array como si fuera un objeto?
         * En condiciones normales, sería $tit = $envioarticulo["titulo"];
         */
        
$tit = ($envioarticulo->titulo);
        
$aut = ($envioarticulo->autor);

        
//sigue más codigo que no pongo.

        
$parte[1] = $tit;
        
$parte[2] = $aut;
        
$parte[3] = 'saludos';

    }
}

?>
Espero que sirva, saludos
  #3 (permalink)  
Antiguo 20/12/2010, 09:03
 
Fecha de Ingreso: noviembre-2009
Mensajes: 64
Antigüedad: 14 años, 5 meses
Puntos: 1
Respuesta: foreach y base de datos..

Gracias por tu respuesta.

el codigo lo he puesto incompleto.
el código no es mío, sino que lo estoy tratando de arreglar porque no funcionaba, lo cual he logrado en parte, porque como decia, ya llegan los correos y antes no llegaban.

La razón de porqué no llegaban los correos estaba en la falta de un array en la consulta a la base de datos, necesario para ejecutar un foreach, entonces al hacer lo que tu me dices pues marca error porque no hay ningún array. Además de que me equivoque y $envpost, es más bien $envioarticulos. Así es posible entender tu pregunta al if y descartamos mysql_fetch_assoc

o sea que todo está en la manera de hacer la consulta a la base de datos, pero segun entiendo a partir de un array.

he pensado algo asi:
Código PHP:
$envioarticulos = array("SELECT * FROM $tablearticulos WHERE ID, titulo, autor = " $postno); 
pero no funciona

también he probado esto, siguiendo tu respuesta:
Código PHP:
$envioarticulos mysql_query("SELECT * FROM $tablearticulos WHERE ID = " $postno);
$envioarticulomysql_num_rows($envioarticulos);
$envioarticulos = array ($envioarticulo); 
pero, aunque llegan los mails, sigue sin recoger los campos de la tabla

saludos

Última edición por Tooj; 20/12/2010 a las 09:16
  #4 (permalink)  
Antiguo 20/12/2010, 11:53
 
Fecha de Ingreso: noviembre-2009
Mensajes: 64
Antigüedad: 14 años, 5 meses
Puntos: 1
Respuesta: foreach y base de datos..

solucionado!!

al final, lo que hice fue un poco seguir el consejo de repara 2, quite el foreach y puse una consulta normal.

quedo así:

Código PHP:
$envioarticulos "SELECT * FROM $tablearticulos WHERE ID = " $postno;
$envio mysql_query($envioarticulos);
$env mysql_fetch_object($envio);


$tit = ($env->titulo);

etc... 
y funciona!!

aunque, me hubiera gustado saber cual era la falla en el primer codigo.

saludos

Etiquetas: foreach
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:50.