Buscar

Ayuda con base de datos


 
 Old 23 abr 2006, 18:04   #1 (permalink)  
Miembro
 
Avatar de kakashi_®
 
Registrado: marzo 2006
Mensajes: 37

Triste Ayuda con base de datos

Hola a toEstoy intentando crear una pagina web en php y sql.
Creo el siguiente archivo php:

Código:
<?
$servidor="127.0.0.1";
$usuario_bd="root";
$clave_bd="";
$basedatos="Anime";
$tabla1="series"; 

echo "Intentando establecer conexión con el servidor: $servidor.<br>\n";
$conexion=mysql_connect($servidor,$usuario_bd,$clave_bd);
if (! $conexion){
	echo "ERROR: Imposible establecer conexión con el servidor.<br>\n";
	exit;
}else{

	print "Comprobando si la base de datos $basedatos existe en el servidor.<br>\n";
	$existe = "NO" ;
	echo "Intentando obtener una lista de las bases de datos del servidor.<br>\n";
	$listabasesdatos = mysql_list_dbs();
	echo "Intentando obtener el número de bases de datos del servidor.<br>\n";
	$numerobasesdatos = mysql_num_rows($listabasesdatos);
	print "Hay $numerobasesdatos bases de datos:<br>\n";
	for ($i=0; $i<$numerobasesdatos; $i++) {
		$unabasedatos=mysql_dbname($listabasesdatos, $i);
		echo "Base de datos $i: $unabasedatos<br>\n";
		if ($unabasedatos == $basedatos) {
			$existe = "SI" ;
			echo "Base de datos: $basedatos encontrada en el servidor.<br>\n";
		}
	}
	if ($existe == "NO") { // si no existe la base de datos la creamos
		echo "No existía la base de datos. Intentando crearla...<br>\n";
		if (!mysql_query("CREATE DATABASE $basedatos", $conexion)) {
			echo "ERROR: Imposible crear base de datos $basedatos.<br>\n";
			mysql_close($conexion); 
			exit;
		}else{
			echo "Base de datos $basedatos creada satisfactoriamente.<br>\n";
		}
	}

	print "Comprobando si la tabla $tabla1 existe en la base de datos.<br>\n";
	$existe = "NO" ;
	echo "Intentando obtener una lista de las tablas en la base de datos.<br>\n";
	$listatablas = mysql_listtables ($basedatos);
	echo "Intentando obtener el número de tablas de la base de datos.<br>\n";
	$numerotablas = mysql_num_rows($listatablas);
	print "Hay $numerotablas tablas:<br>\n";
	$i = 0;
	while ($i < $numerotablas) {
		$vectornombrestablas[$i] = mysql_tablename ($listatablas, $i);
		echo "Tabla $i: " . $vectornombrestablas[$i] . "<BR>\n";
		if ($vectornombrestablas[$i] == $tabla1) {
			$existe = "SI" ;
			echo "Tabla: $tabla1 encontrada en el servidor.<br>\n";
		}
		$i++;
	}
	if ($existe == "NO") { // si no existe la tabla la creamos
		echo "No existía la tabla. Intentando crearla...<br>\n";
		echo "Intentamos crear la tabla $tabla1, con una instrucción SQL.<br>\n";
		
		$sql = "CREATE TABLE $tabla1 (";
		$sql .= "nombre CHAR(50), ";
		$sql .= "director CHAR(50), ";
		$sql .= "anyo YEAR (4), ";
		$sql .= "capitulos CHAR(255), ";
		$sql .= "genero CHAR(50), ";
		$sql .= "KEY (Nombre) ) ";
		//$sql = 'ALTER TABLE `series` DROP INDEX `nombre`, ADD PRIMARY KEY (`nombre`)';

		if (!mysql_db_query($basedatos, $sql, $conexion)) {
			echo "Imposible crear la tabla.<br>\n";
		}else{
			echo "La tabla se ha creado con éxito. Insertando registro...<br>\n";
		
			
			
			$sql = "INSERT INTO $tabla1 VALUES (";
			$sql .= "Naruto, 'sdfds', '2002', '181', 'ninjas')";
			

if (!mysql_db_query($basedatos, $sql, $conexion)) {
	echo "No se ha podido insertar el registro en la tabla.<br>";
		}else{
		echo "Registro insertado con éxito.<br>";
			}			
		}
	}

//Mostramos los registros:
$resultado = mysql_query("SELECT nombre,director,anyo,capitulos,genero FROM $tabla1, $conexion");
	echo "<br>REGISTROS DE $tabla1:<br>\n";
	while ($fila = mysql_fetch_row($resultado)){
		echo "$fila[0] : $fila[1] : $fila[2] : $fila[3] : $fila[4]<br> \n";
	}
	


	mysql_close($conexion);
}
echo "<br>FIN.<br>";
?>
para que me cree automaticamente la base de datos en phpmyadmin pero a la hora de poder insertar registros me da error.
Alguien sabe porque me da fallos.
Agradeceria mucho que alguien lo probara con su servidor apache si pudiese ser y viese el error.
Gracias de antemano

Editado por kakashi_® en 23 abr 2006 a las 21:25.
kakashi_® is offline   Citar y responder
 
 Old 23 abr 2006, 19:06   #2 (permalink)  
Miembro
 
Avatar de kakashi_®
 
Registrado: marzo 2006
Mensajes: 37

Predeterminado Re: Ayuda con base de datos

Hola de nuevo
He conseguido hacer que me vaya bien, el error era que no marcaba con ' simple un valor:
mal
Código PHP:
$sql .= "Naruto, 'sdfds', '2002', '181', 'ninjas')"
bien
Código PHP:
$sql .= " 'Naruto', 'sdfds', '2002', '181', 'ninjas')"
Ahora, bien, lo ejecuto, me da tobo bien pero un warning el la linea 93:
Cita:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\Archivos de programa\Apache Group\Apache2\htdocs\Anime\crearbasedatosytablas.php on line 93
esta exactamente:

Código PHP:
while ($fila mysql_fetch_row($resultado)){ 
Luego, al abrir el phpmyadmin para comprobar, la tabla esta creada y insertado un registro, bien, pero cuando creo mi formulario html y php de inserccion me hace como que inserta pero no me lo inserta luego.
Otro problemita es que nombre lo tengo como primary key pero no me lo coje como primary key, me pone nombre - index - nombre, algo asi como primary key.

Espero me ayuden
kakashi_® is offline   Citar y responder
 
 Old 23 abr 2006, 21:29   #3 (permalink)  
Moderador
 
Avatar de the_ma3x
 
Registrado: febrero 2005
Ubicación: México
Mensajes: 4.331

Predeterminado Re: Ayuda con base de datos

Kahashi, el problema que creo que pasa es la forma en como estás asignando el resultado del query a la variable.

Prueba con esto que es reasignando el resultado a un array:

Código PHP:
while ($resquery mysql_fetch_row($resultado)){
        
$fila[] = $resquery
        
echo "$fila[0] : $fila[1] : $fila[2] : $fila[3] : $fila[4]<br> \n";
    } 
Espero te sirva.

Saludos

Every wall is a door. Ralph Waldo Emerson
the_ma3x is offline   Citar y responder
 
 Old 24 abr 2006, 04:10   #4 (permalink)  
Miembro activo
 
Avatar de Spacey
 
Registrado: junio 2004
Ubicación: Detrás de ti!
Mensajes: 178

Alegre Re: Ayuda con base de datos

Hola,

Cita:
kakashi_® escribió:
Ahora, bien, lo ejecuto, me da tobo bien pero un warning el la linea 93:
esta exactamente:
while ($fila = mysql_fetch_row($resultado)){
Bueno, creo que el problema lo tienes en el query, se te han colado las dobles comillas al final de la sentencia, cuando deberían salir un poco antes:

Código PHP:
// Mal
$resultado mysql_query("SELECT nombre,director,anyo,capitulos,genero FROM $tabla1, $conexion");

// La forma correcta
$resultado mysql_query("SELECT nombre,director,anyo,capitulos,genero FROM $tabla1"$conexion ); 
Casi siempre que te sale el error "supplied argument is not a valid MySQL result resource blah blah" es porque el query no se ha podido ejecutar por algún motivo (está mal escrito, no hay conexión a la db, etc...), así que puedes empezar a buscar el error por ahí

Cita:
kakashi_® escribió:
Otro problemita es que nombre lo tengo como primary key pero no me lo coje como primary key, me pone nombre - index - nombre, algo asi como primary key.
Sobre esto, bueno, primero recomendarte que pongas un identificador numérico autoincremental como primary key en vez del nombre (porque el primary key es un campo que debe ser único, y los nombres tienden a no serlo). Segundo, para especificar el primary key, tienes que poner PRIMARY KEY, no KEY a secas. Así que por ejemplo, quedaría así (puede haber algún error sintáctico):

Código PHP:
$sql "CREATE TABLE $tabla1 (";
        
$sql .= "id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, ";
        
$sql .= "nombre CHAR(50), ";
        
$sql .= "director CHAR(50), ";
        
$sql .= "anyo YEAR (4), ";
        
$sql .= "capitulos CHAR(255), ";
        
$sql .= "genero CHAR(50), ";
        
$sql .= "PRIMARY KEY(`id`) )"
Por cierto, es interesante lo que has hecho para comprobar si la db y la tabla existe, pero bueno, por si no lo sabes ya, para simplificar puedes hacer un CREATE DATABASE IF NOT EXISTS, y CREATE TABLE IF NOT EXISTS, que básicamente crearán la db y la tabla si existen, y si no pues no harán nada.

Espero haberte ayudado

Por cieeerto, eres fan de Naruto? Jeje, a mí me encanta esa serie! ^^

Saludines,

When I fall into regret, I stumble with the words... They remind me that, they remind me that... Everything in ebb, everything has led me... to right now... somehow.
Spacey is offline   Citar y responder
 
 Old 24 abr 2006, 16:09   #5 (permalink)  
Moderador
 
Avatar de the_ma3x
 
Registrado: febrero 2005
Ubicación: México
Mensajes: 4.331

Predeterminado Re: Ayuda con base de datos



Vaya Spacey... tu si que lees a detalle... a mi se me paso ese error en la consulta y como alguna vez llegue a tener ese problema al asignar variables a un array...

Saludines

Every wall is a door. Ralph Waldo Emerson
the_ma3x is offline   Citar y responder
 
 Old 24 abr 2006, 16:33   #6 (permalink)  
Miembro activo
 
Avatar de Spacey
 
Registrado: junio 2004
Ubicación: Detrás de ti!
Mensajes: 178

Predeterminado Re: Ayuda con base de datos

Jeje... Bueno, no es eso, pero como comentaba antes, ese tipo de error normalmente viene dado porque la consulta no ha devuelto resultados, bien porque está mal escrita, bien porque no hay conexión al host o no se ha seleccionado la base de datos... Pero como en su script ya comprueba el host y la db, pues lo único que queda por mirar es el query

Saludines,

When I fall into regret, I stumble with the words... They remind me that, they remind me that... Everything in ebb, everything has led me... to right now... somehow.
Spacey is offline   Citar y responder
 
 Old 24 abr 2006, 20:55   #7 (permalink)  
Miembro
 
Avatar de kakashi_®
 
Registrado: marzo 2006
Mensajes: 37

Predeterminado Re: Ayuda con base de datos

Gracias por vuestra ayuda spacey y the_ma3x

He probado los codigos que me habeis puesto y me sigue dando el mismo error.
He probado primero el the_ma3x y me crea la base de datos y me inserta el registro en la tabla pero me sigue dando error en su codigo, exactamente en la linea donde pone:

Código PHP:
 $fila[] = $resquery 
El tuyo spacey, me crea la base de datos pero no me crea la tabla ni inserta nada.

Código PHP:
// Mal 
$resultado mysql_query("SELECT nombre,director,anyo,capitulos,genero FROM $tabla1, $conexion"); 

// La forma correcta 
$resultado mysql_query("SELECT nombre,director,anyo,capitulos,genero FROM $tabla1"$conexion ); 
La que tu me dices que es la correcta, me da fallo, la que segun tu esta mal, es la que me va bien

PD: Si, me gusta naruto.

Otra cosa, no se si mi codigo de insertar datos es el correcto, os lo pongo y me deciis:

Insertar html
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<
title>Anime</title>
</
head>

<
body>
<
div align="center">
<
h1>Insertar un registro nuevo</h1>
<
br>
<
FORM METHOD="POST" ACTION="insertar.[url=http://php.softonic.com]php[/url]">
Nombre<br>
<
INPUT TYPE="TEXT" NAME="nombre"><br>
creador<br>
<
INPUT TYPE="TEXT" NAME="creador"><br>
anyo<br>
<
INPUT TYPE="TEXT" NAME="año"><br>
capitulos<br>
<
INPUT TYPE="TEXT" NAME="capitulos"><br>
genero<br>
<
INPUT TYPE="TEXT" NAME="genero"><br>


<
INPUT TYPE="SUBMIT" value="Insertar">
</
FORM>
</
div>


</
body>
</
html
Codigo php de insertar
Código PHP:
<html>
<head>
<title>Anime</title>
</head>
<body>

<? 
if (isset($_POST['insertar']) and isset($_POST['series'])) { 
    
$series=$_POST['series'];

    echo 
"<form method='POST' action='comprobarinsertar.[url=http://php.softonic.com]php[/url]'>";
    echo 
"Nombre: <input type='text' name='nombre' size='50'><br>";
    echo 
"Director: <input type='text' name='director' size='10'><br>";
    echo 
"Anyo: <input type='text' name='anyo' size='50'><br>";
    echo 
"Capitulos: <input type='text' name='capitulos' size='10'><br>";
    echo 
"Genero: <input type='text' name='genero' size='50'><br>";

    echo 
"<input type='hidden' name='series' value='$series' size=16>";
    echo 
"<input type='submit' value='Guardar' name='comprobarinsertar'>";
    echo 
"</form>";


else {
?>
<form action='../anime/insertar.html' method=post>
<input type=submit name='Insertar nuevo registro' value='Insertar nuevo registro'></form>    

<?
}
?>


</body>
</html>
Gracias

Editado por kakashi_® en 24 abr 2006 a las 21:09.
kakashi_® is offline   Citar y responder
 
 Old 25 abr 2006, 00:45   #8 (permalink)  
Moderador
 
Avatar de the_ma3x
 
Registrado: febrero 2005
Ubicación: México
Mensajes: 4.331

Predeterminado Re: Ayuda con base de datos

Hice un par de cambios al código.

Mi primera sugerencia sería que separaras el código. Es un poco complicada la validación que estas haciendo. Modifique ciertos operadores en algunas sentencias y cambie de lugar la inserción de datos. Ya que de la otra forma, no queda.

Basta con modificar un par de cosillas, entre ellas esta sentencia:

Código PHP:
//Original
if ($unabasedatos == $basedatos) {
//Nueva
if ($unabasedatos $basedatos) { 
El código completo.

Código PHP:
<?
$servidor
="127.0.0.1";
$usuario_bd="root";
$clave_bd="";
$basedatos="Anime";
$tabla1="series"

echo 
"Intentando establecer conexión con el servidor: $servidor.<br>\n";
$conexion=mysql_connect($servidor,$usuario_bd,$clave_bd);
if (! 
$conexion){
    echo 
"ERROR: Imposible establecer conexión con el servidor.<br>\n";
    exit;
}else{

    print 
"Comprobando si la base de datos $basedatos existe en el servidor.<br>\n";
    
$existe "NO" ;
    echo 
"Intentando obtener una lista de las bases de datos del servidor.<br>\n";
    
$listabasesdatos mysql_list_dbs();
    echo 
"Intentando obtener el número de bases de datos del servidor.<br>\n";
    
$numerobasesdatos mysql_num_rows($listabasesdatos);
    print 
"Hay $numerobasesdatos bases de datos:<br>\n";
    for (
$i=0$i<$numerobasesdatos$i++) {
        
$unabasedatos=mysql_dbname($listabasesdatos$i);
        echo 
"Base de datos $i: $unabasedatos<br>\n";
        if (
$unabasedatos $basedatos) {
            
$existe "SI" ;
            echo 
"Base de datos: $basedatos encontrada en el servidor.<br>\n";
        }
    }
    if (
$existe == "NO") { // si no existe la base de datos la creamos
        
echo "No existía la base de datos. Intentando crearla...<br>\n";
        if (!
mysql_query("CREATE DATABASE $basedatos"$conexion)) {
            echo 
"ERROR: Imposible crear base de datos $basedatos.<br>\n";
            
mysql_close($conexion); 
            exit;
        }else{
            echo 
"Base de datos $basedatos creada satisfactoriamente.<br>\n";
        }
    }

    print 
"Comprobando si la tabla $tabla1 existe en la base de datos.<br>\n";
    
$existe "NO" ;
    echo 
"Intentando obtener una lista de las tablas en la base de datos.<br>\n";
    
$listatablas mysql_listtables ($basedatos);
    echo 
"Intentando obtener el número de tablas de la base de datos.<br>\n";
    
$numerotablas mysql_num_rows($listatablas);
    print 
"Hay $numerotablas tablas:<br>\n";
    
$i 0;
    while (
$i $numerotablas) {
        
$vectornombrestablas[$i] = mysql_tablename ($listatablas$i);
        echo 
"Tabla $i: " $vectornombrestablas[$i] . "<BR>\n";
        if (
$vectornombrestablas[$i] = $tabla1
            {
            
$existe "SI" ;
            echo 
"Tabla: $tabla1 encontrada en el servidor.<br>\n";
            }
        
$i++;
    }
    if (
$existe == "NO"
    { 
// si no existe la tabla la creamos
        
echo "No existía la tabla. Intentando crearla...<br>\n";
        echo 
"Intentamos crear la tabla $tabla1, con una instrucción SQL.<br>\n";
        
        
$sql "CREATE TABLE $tabla1 (";
        
$sql .= "nombre CHAR(50), ";
        
$sql .= "director CHAR(50), ";
        
$sql .= "anyo YEAR (4), ";
        
$sql .= "capitulos CHAR(255), ";
        
$sql .= "genero CHAR(50), ";
        
$sql .= "KEY (Nombre) ) ";
        
//$sql = 'ALTER TABLE `series` DROP INDEX `nombre`, ADD PRIMARY KEY (`nombre`)';

        
if (!mysql_db_query($basedatos$sql$conexion)) {
            echo 
"Imposible crear la tabla.<br>\n";
        }else{
            echo 
"La tabla se ha creado con éxito. Insertando registro...<br>\n";
        }            
    }
    
    
//Mostramos los registros:
    
$sql "INSERT INTO $tabla1 VALUES (";
    
$sql =  $sql " 'Naruto', 'sdfds', '2002', '181', 'ninjas')";  
    echo 
$sql;
    if (!
mysql_db_query($basedatos$sql$conexion)) {
    echo 
"No se ha podido insertar el registro en la tabla.<br>";
    }else{
    echo 
"Registro insertado con éxito.<br>";
    }        
$resultado mysql_query("SELECT nombre,director,anyo,capitulos,genero FROM $tabla1"$conexion);
    echo 
"<br>REGISTROS DE $tabla1:
\n"
;
    while (
$fila mysql_fetch_row($resultado)){
        echo 
"$fila[0] : $fila[1] : $fila[2] : $fila[3] : $fila[4]<br> \n";
    }

    
mysql_close($conexion);
}
echo 
"<br>FIN.
"
;
?>
Espero te sirva.
Saludos

Every wall is a door. Ralph Waldo Emerson
the_ma3x is offline   Citar y responder
 
 Old 25 abr 2006, 20:37   #9 (permalink)  
Miembro
 
Avatar de kakashi_®
 
Registrado: marzo 2006
Mensajes: 37

Predeterminado Re: Ayuda con base de datos

Gracias por responder de nuevo pero ahora va mucho peor jo
Te cuento:

Creo un archivo nuevo con tu codigo, elimino la base de datos de mi servidor y la intento crear con tu codigo, pues bien, me dice base de datos creada pero no esta
Al ejecutarlo me da esto:

Cita:
Intentando establecer conexión con el servidor: 127.0.0.1.
Comprobando si la base de datos Anime existe en el servidor.
Intentando obtener una lista de las bases de datos del servidor.
Intentando obtener el número de bases de datos del servidor.
Hay 4 bases de datos:
Base de datos 0: agenda
Base de datos: Anime encontrada en el servidor.
Base de datos 1: coches
Base de datos: Anime encontrada en el servidor.
Base de datos 2: mysql
Base de datos: Anime encontrada en el servidor.
Base de datos 3: test
Base de datos: Anime encontrada en el servidor.
Comprobando si la tabla series existe en la base de datos.
Intentando obtener una lista de las tablas en la base de datos.
Intentando obtener el número de tablas de la base de datos.

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Archivos de programa\Apache Group\Apache2\htdocs\Anime\crearbasedatosytablas2. php on line 54
Hay tablas:
No existía la tabla. Intentando crearla...
Intentamos crear la tabla series, con una instrucción SQL.
Imposible crear la tabla.
INSERT INTO series VALUES ( 'Naruto', 'sdfds', '2002', '181', 'ninjas')No se ha podido insertar el registro en la tabla.

REGISTROS DE series:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\Archivos de programa\Apache Group\Apache2\htdocs\Anime\crearbasedatosytablas2. php on line 100
me repite mucho lo de base de datos anime encontrada, pero no esta.
No se porque me falla.

Los codigo squ epuse de insertar datos, estan bien?? me hace como que insertan pero luego la base de datos sigue vacia.

Help!!
kakashi_® is offline   Citar y responder
 
 Old 25 abr 2006, 20:51   #10 (permalink)  
Moderador
 
Avatar de the_ma3x
 
Registrado: febrero 2005
Ubicación: México
Mensajes: 4.331

Predeterminado Re: Ayuda con base de datos

kakashi,

Hagamos lo siguiente.

Divide tu código en 3 funciones diferentes:

Comprobación y/o creación de la Base de Datos
Comprobación y/o creación de la Tabla

Y por último la inserción de datos.

Usalo como 3 funciones diferentes. Y te aconsejaría que usaras el código que pone Spacey.

CREATE DATABASE IF NOT EXISTS, y CREATE TABLE IF NOT EXISTS

Creo que sería mucho más facil entender el código y analizar los errores.

Saludines

Every wall is a door. Ralph Waldo Emerson
the_ma3x is offline   Citar y responder
Página 1 de 2 | 1 | 2 | >

« Nueva versión de UPX! | Paginar en columnas »

Herramientas
Estilo


 

Tema Iniciado por Foro Respuestas Último mensaje
Crear base de datos con phpmyadmin kakashi_® Programación 3 10 abr 2006 03:23
Base de Datos epincho Programación 15 22 ago 2005 10:45
Restaurar Base Datos Php En Foro 2.0.16 roberto88 Programación 4 27 jul 2005 18:50
base de datos acces dañada MiNeRvA6791 Software 1 13 jul 2005 02:10
Ayuda Error conexion base datos Cris27 Programación 1 22 abr 2005 00:02



Buscar