Foros del Web » Programando para Internet » PHP »

Interactuar mysql

Estas en el tema de Interactuar mysql en el foro de PHP en Foros del Web. Bueno nose si este tema va aqui, cree una base de datos jokes y una tabla con el mismo nombre jokes en la cual van ...
  #1 (permalink)  
Antiguo 02/02/2003, 12:17
fosforito
Invitado
 
Mensajes: n/a
Puntos:
Interactuar mysql

Bueno nose si este tema va aqui,
cree una base de datos jokes y una tabla con el mismo nombre jokes en la cual van el texto y la fecha a principio me salio todo bien vi el resultado , despues cree otra tabla author donde va el nombre y el email y en este solo veo el texto con un mensaje de error, del nombre y el email , alguien me podria explicar?

esto es list2.php
Código PHP:
<?php

  
// Connect to the database server
  
$dbcnx = @mysql_connect("localhost""root""mipassword");
  if (!
$dbcnx) {
    echo( 
"<p>Unable to connect to the " .
          
"database server at this time.</p>" );
    exit();
  }

  
// Select the jokes database
  
if (! @mysql_select_db("jokes") ) {
    echo( 
"<p>Unable to locate the joke " .
          
"database at this time.</p>" );
    exit();
  }

?>
<p>Aqui esta la lista de nuestra base de datos: </p>
<blockquote>
<?php
$jokelist 
mysql_query("SELECT jokeText, AID FROM jokes");

  if (!
$jokelist) {
    echo(
"<p>Error performing query: " mysql_error() . "</p>");
    exit();
  }

while (
$jokemysql_fetch_array($jokelist)) {
//get the text and  autor id for the joke
$jokeText $joke["jokeText"];
$aid $joke["AID"];

//get the autors details for the joke
$authordetails mysql_query("SELECT Name, Email FROM Authors WHERE ID=$aid");
$author mysql_fetch_array($authordetails);
$name $author["Name"];
$email $author["Email"];

//Display the joke list with author information
echo( "<p>$jokeText<br />".
"(by <a href='mailto:$email'>$name</a>) </p>");
}
?>
</blockquote>
el error que sale es:

Aqui esta la lista de nuestra base de datos:


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\Apache\htdocs\pruebas\list2.php on line 45

Why did the chiken coss the road? to get to the other side!.
(by )


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\Apache\htdocs\pruebas\list2.php on line 45

Esto es una prud=ba de insertar textos en la base de datos
(by )


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\Apache\htdocs\pruebas\list2.php on line 45


(by )

la linea 45 es este:

$author = mysql_fetch_array($authordetails);
  #2 (permalink)  
Antiguo 02/02/2003, 12:30
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
¿Por que no pruebas con un solo query?

select joketext, name, email from jokes, Authors where jokes.AID=Authors.ID


Saludos
__________________
Manoloweb
  #3 (permalink)  
Antiguo 02/02/2003, 12:33
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
Por otro lado,

Al parecer el error lo tienes en el query de Authors, ya que mysql_query te regresa el Identificador del resultado cuando el query resulta OK, pero si el query no esta correcto, te regresa "false" lo que resulta un argumento invalido para cualquier mysql_fetch_array o similares.

Te recomiendo revisar la estructura de el segundo select.


Saludos
__________________
Manoloweb
  #4 (permalink)  
Antiguo 02/02/2003, 13:17
fosforito
Invitado
 
Mensajes: n/a
Puntos:
Hey gracias por tu ayuda ya lo encontre el error
Código PHP:
$authordetails mysql_query("SELECT Name, Email FROM Authors WHERE ID=$aid");
//lo cambie por:
$authordetails mysql_query("SELECT Name, Email FROM Authors WHERE ID=1"); 
lo cambie el ID=$aid por ID=1 ahi esta el error, pero como le pongo el ID=1 me sale todos con el mismo nombre porque el ID=2 es otro nombre , si podrias decirme que valor le tendria que poner a ese ID

Cree una tabla asi:

CREATE TABLE Authors (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(100),
Email VARCHAR(100)
);

despues inserte dos nombres y sus respectivos mails en Name y Email

Cual seria el ID en esta tabla ?
nose si esta hecha bien la pregunta pero cualquier respuets me vendria bien!! gracias
  #5 (permalink)  
Antiguo 02/02/2003, 14:28
Avatar de chubu  
Fecha de Ingreso: enero-2002
Ubicación: Buenos Aires
Mensajes: 133
Antigüedad: 22 años, 2 meses
Puntos: 0
La forma correcta sería asi, como estaba antes:

Código PHP:
$authordetails mysql_query("SELECT Name, Email FROM Authors WHERE ID=$aid"); 
y la estructura de la tabla está bien creada, lo que evidentemente pasa es que el valor de $aid es incorrecto, fijate en el contenido de la tabla jokes, si el campo AID tiene algún valor cargado, o si está vacío o en cero. Creo que es eso.

saludos,

chubu
__________________
:pensando:hay algo mal que no anda bien
  #6 (permalink)  
Antiguo 02/02/2003, 14:30
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Mira, haz lo que te dicen. Despues del mysql_query() haz:
Código PHP:
if (!$authordetails)
{
  echo 
"Error. MySQL dice ".mysql_error();
  exit;

Con esto consigues que te diga exactamente que error te da la consulta. Aunque por lo que he visto eso ya lo has "encontrado". Yo creo que es que $aid es una cadena vacia. Haz la prueba con un
Código PHP:
echo "\$aid vale $aid."
despues de leer el valor de la BD. Si es vacio, esa es la causa del error. Tambien puede mirar en la BD si el campo AID de la tabla jokes tiene valor.

Espero haber sido de ayuda.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 02/02/2003, 18:02
fosforito
Invitado
 
Mensajes: n/a
Puntos:
Hola amigos!! Bueno lo que pasa es que estoy aprendiendo a interactuar con mysql estoy un poquito harto de estar agarrando script hechos por otros capos. para el colmo tengo un libro escrito en ingles.
Bueno aqui les doy todo el ejemplo de lo que quiero hacer asi ustedes me corrigen en que falle ok?

#cree la base de datos jokes:
mysql>CREATE DATABASE jokes;
use jokes;

#cree la tabla jokes
mysql>CREATE TABLE jokes (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
jokeText TEXT,
jokeDate DATE NOT NULL
);

#Insertamos Texto y fecha
mysql>INSERT INTO jokes SET
jokeText = "Why did the chicken cross the road? To get to the other side!",
jokeDate = "2003-02-02";

#insertamos otro texto
mysql>INSERT INTO jokes SET
jokeText = "Esto es una prueba de insertar texto en la base de datos",
jokeDate = "2003-02-02";

#Creamos la tabla Authors
mysql>CREATE TABLE Authors (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(255),
Email VARCHAR(255)
);

#insertamos Nombre y Email
mysql>INSERT INTO Authors SET
Name= "Fosforito Fosfo",
Email= "[email protected]";

#insertamos otro Nombre y Email
mysql>INSERT INTO Authors SET
Name = "Armando Carpas",
Email= "[email protected]";

#agregamos la columna AID en la tabla jokes
mysql>ALTER TABLE jokes ADD COLUMN AID INT;

ahora para llamar todo eso hice esto con el php y lo salve como:

list2.php

<html>
<head>
<title>list2</title>
</head>

<body>
Código PHP:
<?php

  
// nos conectamos con mysql
  
$dbcnx = @mysql_connect("localhost""root""12345");
  if (!
$dbcnx) {
    echo( 
"<p>no he podido conectarme " .
          
"que pena!.</p>" );
    exit();
  }

  
// Seleccionamos la base de datos
  
if (! @mysql_select_db("jokes") ) {
    echo( 
"<p>No pude localizar " .
          
"la base de datos donde estara!.</p>" );
    exit();
  }

?>
<p>Aqui esta la lista de nuestra base de datos: </p>
<blockquote>
<?php
$jokelist 
mysql_query("SELECT jokeText, AID FROM jokes");

  if (!
$jokelist) {
    echo(
"<p>Error performando con el query: " mysql_error() . "</p>");
    exit();
  }

while (
$jokemysql_fetch_array($jokelist)) {
//get the text and  autor id for the joke
$jokeText $joke["jokeText"];
$aid $joke["AID"];

//obtenemos detalles del autor para el joke
$authordetails mysql_query("SELECT Name, Email FROM Authors WHERE ID=$aid");
$author mysql_fetch_array($authordetails);
$name $author["Name"];
$email $author["Email"];

//desplazamos la lista con la informacion del autor
echo( "<p>$jokeText<br />".
"(by <a href='mailto:$email'>$name</a>) </p>");
}
?>
</blockquote>
</body>
</html>

Si alguien hicira la prueba sobre esto y si le salio bien me gustaria saber en que falle, desde ya les estare agradecido.

Última edición por fosforito; 02/02/2003 a las 18:11
  #8 (permalink)  
Antiguo 03/02/2003, 09:23
Avatar de chubu  
Fecha de Ingreso: enero-2002
Ubicación: Buenos Aires
Mensajes: 133
Antigüedad: 22 años, 2 meses
Puntos: 0
aparentemente, lo que falta es insertar datos en la columna AID de la tabla jokes, ya que cuando la agregaste, el mysql por defecto la rellena con vacio (NULL), lo que deberias hacer es, de ahora en mas, agregar la columna cada vez que hagas un insert, y por otro lado, para "reparar" los datos ya cargados, realizar un update donde asignaras un valor a esa columna, de esta forma:

UPDATE jokes SET AID = 1 WHERE id = 2;

asignara el valor 1 en la columna AID del joke con ID 2.

espero que esto te sirva, te recomiendo que leas algo sobre SQL ANSI (es la sintaxis standard), o MySQL si prefieres, ya que tu error vino por ese lado.

saludos,

chubu
__________________
:pensando:hay algo mal que no anda bien
  #9 (permalink)  
Antiguo 03/02/2003, 10:12
fosforito
Invitado
 
Mensajes: n/a
Puntos:
Gracias chubu por ayudarme y a todos !!
te agradesco un monton chubu por haverme dato ese detalle ahora esta todo bien!!
  #10 (permalink)  
Antiguo 06/02/2003, 12:28
fosforito
Invitado
 
Mensajes: n/a
Puntos:
Hola!!
Bueno Gracias a la ayuda de todos ustedes he podido arreglar todo esto y me va bien, he puesto todo en una sola tabla para no tener problemas,
pero ahora tengo dos probles que se me presentaron,

la primera: Porque cuando hago el refresh de mi navegador (Internet explorer) se duplica los comentarios a que se debe eso?

La segunda: Entre los codigos de abajo en donde deberia poner el htmlspecialchars para que no inserte texto en ehtml?

Código PHP:
<html>
<head>
<title> The Internet Joke Database </title>
</head>
<body>
<?php
  
if (isset($addjoke)): // si el usuario quiere agregar
?>

<form action="<?=$PHP_SELF?>" method="post">
Name <input type="text" name="name" size="20"><br>
Email <input type="text" name="email" size="20"><br>
<p>Type your joke here:<br />
<textarea name="text" rows="10" cols="40" wrap></textarea><br />
<input type="submit" name="submitjoke" value="SUBMIT" /></p>
</form>

<?php
  
else:

    
// nos conectamos con mysql
    
$dbcnx = @mysql_connect("localhost""root""1234");
    if (!
$dbcnx) {
      echo( 
"<p>Unable to connect to the " .
            
"database server at this time.</p>" );
      exit();
    }

    
// seleccionamos la base de datos
    
if (! @mysql_select_db("uno") ) {
      echo( 
"<p>no pude localizar a" .
            
"la base de datos.</p >" );
      exit();
    }

    
// si el news2 has sido agregado,
    // agregar a la base de datos.
    
if ($submitjoke == "SUBMIT") {
      
$sql "INSERT INTO news2 SET
              Name='$name',
              Email='$email',
              Text='$text',
              Date=CURDATE()"
;
      if (@
mysql_query($sql)) {
        echo(
"<P>su comentario se ha agregado.</P>");
      } else {
        echo(
"<P>Error al agregar: " .
             
mysql_error() . "</P>");
      }
    }

    
// si se ha borrado,
    // brramos de la base de datos.
    
if (isset($deletejoke)) {
      
$sql "DELETE FROM news2
              WHERE ID=$deletejoke"
;
      if (@
mysql_query($sql)) {
        echo(
"<p>se ha borrado news2.</p>");
      } else {
        echo(
"<p>error al borrar: " .
             
mysql_error() . "</p>");
      }
    }
  
    echo(
"<p> aqui esta todo lo que se muestra: </p>");
  
    
// requerimos la table nesw2
    
$result = @mysql_query("SELECT ID, Text, Name, Email, Date FROM news2");
    if (!
$result) {
      echo(
"<p>Error performando query: " mysql_error() . "</p>");
      exit();
    }
  
    
// desplazamos el texto
    // con "Delete this Joke" a cada lado.
    
while ( $row mysql_fetch_array($result) ) {
      
$jokeid $row["ID"];
      
$text $row["Text"];
      
$name $row["Name"];
      
$email $row["Email"];
      
$date $row ["Date"];
      echo(
" $text  <a href='$PHP_SELF?deletejoke=$jokeid'> Delete this Joke</a><br /> por, <a href='mailto:$email'>$name</a> el $date".
           
"</p>");
    }
    
// cuando clikee se cargara otra pagina
    // con la forma de submision.
    
echo("<p><a href='$PHP_SELF?addjoke=1'>Add a Joke!</a></p>");
  
  endif;
  
?>
</body>
</html>
Si alguien me podria ayudar sobre este tema les estare profundamente agradecido

Saludos
  #11 (permalink)  
Antiguo 06/02/2003, 12:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Sobre htmlspecialchars() .. lo debes de usar en el momento que presentas HTML en tu foro o bien lo guardas "limpio de html" cuando insertes tu dato en tu Base de dtos campo q corresponda al mensaje (en realidad todos deberian ser)

Lo de la recarga se produce porque trabajas la parte q presenta eso datos y la q lo gestiona en la misma página .. Por eso el navegador te pide confirmación para reenviar los dtos nuevamente y por eso mismo tu lógica detecta los mismos datos .. Eso sumado a campos autoincrementales en las BD ocasiona ese efecto ..

La forma de solucionarlo (por lo menos la mas efectiva q uso yo) es redireccionando (aunque sea a la misma página) al terminar los procesos de INSERT/DELETE/UPDATE de tu Base de dato

Esto lo haces via:

header("Location: comosellametupagina.php");
exit;

(o puedes usar $_SERVER['PHP_SELF'] .. si quieres para obtner el nombre de la página en curso..)

Si lo usas en tu código tal cual está te va a dar un error aceca de las cabeceras ..

Esta parte de cabeceras HTML
<html>
<head>
<title> The Internet Joke Database </title>
</head>
<body>

no debe estar ahi .. solo debe de mostrarse cuando vallas a mostrar datos en el navegador .. En tu caso es cuando se usa el formulario .. o se muestra el SELCT q tienes por ahí .. Te recomiendo q pongas eso en una funcion .. y lo llames cuando sea necesario ... Lo mismo para el píe de página . aunque podría quedarse ahí ..

Los mensajes de error o como fué el proceso NO deberias mostrarlo ahí .. en ese punto (usando header() ) ..sino mandar alguna variable de control a "si mismo" (a la misma página) ejemplo:

Código PHP:
if(...){
  
// caso error
      
header("location: comosellametupagina.php?error=codigotuyo");
      exit;
} else {
  
// caso error
      
header("location: comosellametupagina.php?ok=codigotuyo");
      exit;

y en tu código principal .. usar algun condicional tipo:

Código PHP:
if (isset($_GET['error'])){
echo 
"hay un error  .. codigo".$_GET['error'];
}

if (isset(
$_GET['ok'])){
echo 
"Todo bien .. codigo".$_GET['error'];

Es decir .. Si hay alguna de estas variables error o OK .. se muestra el mensaje deacuerdo con la accion .. He de ahí ese "codigo" .. puedes emplear lo q quieras .. Lo mas funcional suele ser usar un array con tus mensajes de errror o OK .. y usar ese "codigo" como un indice del array .. $mensajes[$error] .. etc ..

Un saludo,
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 08:02.