Undefined variable

17063 visitas 17 respuestas

Les escribo porque tengo el siguiente problema, estoy aprendiendo a crear un guestbook con php y luego de crea la base de datos y la tabla me tira el siguiente error al agregar una firma:

Notice: Undefined variable: name in c:\archivos de programa\easyphp1-8\www\libro\addguestbook.php on line 14

Notice: Undefined variable: email in c:\archivos de programa\easyphp1-8\www\libro\addguestbook.php on line 14

Notice: Undefined variable: comment in c:\archivos de programa\easyphp1-8\www\libro\addguestbook.php on line 14

Este es el codigo del archivo donde me tira el error:

<?php $host="localhost"; $username="root"; $password="admin"; $db_name="test"; $tbl_name="guestbook";

mysql_connect("$host", "$username", "$password")or die("cannot connect server "); mysql_select_db("$db_name")or die("cannot select DB");

$datetime=date("y-m-d h:i:s");

$sql="INSERT INTO $tbl_name(name, email, comment, datetime)VALUES('$name', '$email', '$comment', '$datetime')"; $result=mysql_query($sql);

if($result){ echo "Successful"; echo ""; echo "ver mis firmas"; }

else { echo "ERROR"; }

mysql_close(); ?>

por Spychaser desde Argentina

Registrado desde: 06 Feb 06

Respuestas

0 0

Me olvide de aclarar que la firma es cargada el guestbook, pero con ese error previo de pantalla. Probe de definir esas variables, pero no se si lo hice bien. Muchas Gracias

por Spychaser desde Argentina

Registrado desde: 06 Feb 06
0 0

De donde salen las variables $name, $email, $comment? Estas utilizando esas 3 variables para crear una cadena de texto pero esas variables no existen. Esas variables te llegan de algun formulario? o estan en alguna variable de sesion? Necesitas tener definidas esas variables para quitar ese error.

por MartinY desde España

Registrado desde: 03 Jan 05
0 0

como dice Martiny, tienes que declarar primero las varibles antes de usarlas, ya sean POST, GET , SESSION o vengan de una base de datos.

El error que te tira es que intenta insertar en la BD unos datos que no existen ...

por gOnDo desde España

Registrado desde: 20 Apr 03
0 0

Tengo los siguientes archivos creados:

guestbook.php

Test Sign Guestbook Name : Email : Comment :    

View Guestbook

addguestbook. php. <?php $host="localhost"; $username="root"; $password="admin"; $db_name="test"; $tbl_name="guestbook";

mysql_connect("$host", "$username", "$password")or die("cannot connect server "); mysql_select_db("$db_name")or die("cannot select DB");

$datetime=date("y-m-d h:i:s");

$sql="INSERT INTO $tbl_name(name, email, comment, datetime)VALUES('$name', '$email', '$comment', '$datetime')"; $result=mysql_query($sql);

if($result){ echo "Successful"; echo ""; echo "Ver firmas"; }

else { echo "ERROR"; }

mysql_close(); ?>

viewguestbook.php

View Guestbook | Sign Guestbook

<?php

$host="localhost"; $username="root"; $password="admin"; $db_name="test"; $tbl_name="guestbook";

mysql_connect("$host", "$username", "$password")or die("cannot connect server "); mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name"; $result=mysql_query($sql);

while($rows=mysql_fetch_array($result)){ ?>

ID : <? echo $rows['id']; ?> Name : <? echo $rows['name']; ?> Email : <? echo $rows['email']; ?> Comment : <? echo $rows['comment']; ?> Date/Time : <? echo $rows['datetime']; ?>

<? } mysql_close(); ?>

y la siguiente tabla: CREATE TABLE guestbook ( id int(4) NOT NULL auto_increment, name varchar(65) NOT NULL default '', email varchar(65) NOT NULL default '', comment longtext NOT NULL, datetime varchar(65) NOT NULL default '', PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;************

por Spychaser desde Argentina

Registrado desde: 06 Feb 06
0 0

Ya te han indicado el error. Usa las superglobales: $_POST, $_GET, $_SESSION ... etc

por thessoro desde España

Registrado desde: 31 Jul 03
0 0

Probe y salio andando, muchas gracias MartinY, gOnDo, thessoro. Use $_POST y define cada variable. Ahora tengo la siguiente duda como hago para poder loguearme como admin y poder borrar lo que no me gusta. Muchas Gracias

por Spychaser desde Argentina

Registrado desde: 06 Feb 06
0 0

Pues, mirate esto [URL]http://www.php-hispano.net/archivos/Manuales/51/1 un registro de usuarios de Rubenico, que tiene un sistema de prioridades. El que tu especifiques como admin, en la zona donde muestra tus Opciones de admin, pones unos accesos y creas las sentencias de BORRADO en la BD, o tmabien de EDICION.

Si tienes alguna duda con esas sentencias postea, que en algo te puedo ayudar ;)

Saludos

por gOnDo desde España

Registrado desde: 20 Apr 03
0 0

gOnDo, te molesto nuevamente. Antes que nada te doy las gracias por guiarme en esta incurcion en php. Arme el sistema del login pero tanto cuando creo un usuario o cuando me logue me tira el siguiente error. Notice: Use of undefined constant nick - assumed 'nick' in c:\archivos de programa\easyphp1-8\www\libro\autentificar.php on line 4

Notice: Use of undefined constant pass - assumed 'pass' in c:\archivos de programa\easyphp1-8\www\libro\autentificar.php on line 4

Notice: Use of undefined constant usuario - assumed 'usuario' in c:\archivos de programa\easyphp1-8\www\libro\autentificar.php on line 18

Notice: Use of undefined constant idusuario - assumed 'idusuario' in c:\archivos de programa\easyphp1-8\www\libro\autentificar.php on line 19

Notice: Use of undefined constant level - assumed 'level' in c:\archivos de programa\easyphp1-8\www\libro\autentificar.php on line 20

Warning: Cannot modify header information - headers already sent by (output started at c:\archivos de programa\easyphp1-8\www\libro\autentificar.php:4) in c:\archivos de programa\easyphp1-8\www\libro\autentificar.php on line 21

Muchas Gracias Juan

por Spychaser desde Argentina

Registrado desde: 06 Feb 06
0 0

Buenas... sigo molestando un poco. Tengo un formulario con un List/Menu con varias opciones, como hago para que en base a lo que elija el usuario se grabe en distintas tablas. Por ej. si elige firma que se grabe en la tabla firma y si elige abrazo que se grabe en la tabala abrazo. Muchas, pero muchas Gracias

por Spychaser desde Argentina

Registrado desde: 06 Feb 06
0 0

Si las dos tablas tienen los mismos campos (aún que en este caso podrías usar una sola tabla y ponerle un campo SET('firma', 'abrazo') y luego al coger las firmas hacer en el query WHERE como_hayas_llamado_al_campo='firma'...):

if($_POST['----nombre-de-la-lista----'] === 'firma') {

  $tabla = 'firma';

} elseif($_POST['---nombre-de-la-lista---'] === 'abrazo') {

  $tabla = 'abrazo';

}

mysql_query("INSERT INTO $tabla .........");

Si los campos de las tablas son distintos:

if($_POST['----nombre-de-la-lista----'] === 'firma') {

  mysql_query("INSERT INTO `firma` .........");

} elseif($_POST['---nombre-de-la-lista---'] === 'abrazo') {

  mysql_query("INSERT INTO `abrazo` .........");

}

por RainCT desde Alemania

Registrado desde: 08 Jan 05
0 0

rainbow2. Tengo la siguiente duda, ya que tengo un archivo php que toma la info que cargue el usuario en el formulario y tiene una linea donde selecciona la tabla, nose como hace que esa seleccion de la tabla se ajuste a lo que el usuario selecciono. Tu me pasaste el siguiente codigo que no supe como adaptarlo

if($_POST['rusbro'] === 'rodados') {

  $tabla = 'rodados';

} elseif($_POST['rusbro'] === 'inmobiliarias') {

  $tabla = 'inmobiliarias';

}

Y este es mi codigo:

<?php $host="localhost"; // Host name $username="root"; // Mysql username $password="admin"; // Mysql password $db_name="test"; // Database name $tbl_name="guestbook"; // Table name

// Connect to server and select database. mysql_connect("$host", "$username", "$password")or die("cannot connect server "); mysql_select_db("$db_name")or die("cannot select DB");//selecciona la tabla

$datetime=date("y-m-d h:i:s"); //date time $name = $_POST['name']; $email = $_POST['email']; $rusbro = $_POST['rusbro']; $comment = $_POST['comment'];

$sql="INSERT INTO $tbl_name(name, email, comment, rusbro, datetime)VALUES('$name', '$email', '$rusbro', '$comment', '$datetime')"; $result=mysql_query($sql);

//check if query successful if($result){ echo "Successful"; echo ""; echo "View guestbook"; // link to view guestbook page }

else { echo "ERROR"; }

mysql_close(); ?>

por Spychaser desde Argentina

Registrado desde: 06 Feb 06
0 0

Buenas... sigo molestando un poco, ya solucione un poco el tema, pero me pasa lo siguiente, me sigue grabando en la tabla guestbook y no en las tablas "abrazos" o "firmas" segun especifique el usuario, aca les paso mi codigo. Muchas Gracias

<?php $host="localhost"; $username="root"; $password="admin"; $db_name="test"; $tbl_name="guestbook";

mysql_connect("$host", "$username", "$password")or die("cannot connect server "); mysql_select_db("$db_name")or die("cannot select DB");//selecciona la tabla

if($_POST['tipo'] === 'abrazos') { $tabla = 'abrazos'; } elseif($_POST['tipo'] === 'firma') { $tabla = 'firma'; }

$datetime=date("y-m-d h:i:s"); $name = $_POST['name']; $email = $_POST['email']; $rusbro = $_POST['rusbro']; $comment = $_POST['comment'];

$sql="INSERT INTO $tbl_name(name, email, comment, rusbro, datetime)VALUES('$name', '$email', '$rusbro', '$comment', '$datetime')"; $result=mysql_query($sql);

if($result){ echo "Successful"; echo ""; echo "View guestbook"; }

else { echo "ERROR"; }

mysql_close(); ?>

por Spychaser desde Argentina

Registrado desde: 06 Feb 06
0 0

te los sigue introduciendo en la tabla guestbook, porque tu en esta sentencia

$sql="INSERT INTO $tbl_name(name, email, comment, rusbro, datetime)VALUES('$name', '$email', '$rusbro', '$comment', '$datetime')";

le estas diciendo que lo inserte en $tbl_name, lo que en tu codigo tienes asignado

$tbl_name="guestbook";

y en el control que tienes puesto

if($_POST['tipo'] === 'abrazos') { $tabla = 'abrazos'; } elseif($_POST['tipo'] === 'firma') { $tabla = 'firma'; }

le asignas la variable $tabla, tan solo cambia esto

$sql="INSERT INTO $tbl_name(name, email, comment, rusbro, datetime)VALUES('$name', '$email', '$rusbro', '$comment', '$datetime')";

por

$sql="INSERT INTO $tabla(name, email, comment, rusbro, datetime)VALUES('$name', '$email', '$rusbro', '$comment', '$datetime')";

en cuanto a los errores de los

Notice: Use of undefined constant pass - assumed 'pass' in c:\archivos de programa\easyphp1-8\www\libro\autentificar.php on line 4

te comento que en la linea 4 del autentificar.php es

if( ($_POST[nick] == ' ') or ($_POST[pass] == ' ') )

siempre en todos los arrays tipo $_POST, $_GET , $_SESSION , o los arrys de obtencion de bases de datos, en la casilla interior tienen que tener comillas, sino los considera como CONSTANTES DEFINIDAS por eso te tira el error.

solo cambia esto

<?

if( ($_POST[nick] == ' ') or ($_POST[pass] == ' ') ) ?>

por esto

<? if( ($_POST["nick"] == ' ') or ($_POST['pass'] == ' ') ) // COMILLAS SIMPLES ( ' ) O DOBLES ( " ) es igual ?>

espero haberte ayudado.

Suerte y saludos

por gOnDo desde España

Registrado desde: 20 Apr 03
0 0

Muchas gracias gOnDo, sigo avanzando, ahora me encontre con el siguiente problema:

--> Si uso este codigo, como hago si quiere agregar una 3 opcion de grabado de tabla if($_POST['tipo'] === 'abrazos') { $tabla = 'abrazos'; } elseif($_POST['tipo'] === 'firma') { $tabla = 'firma'; }

--> Al usar la variable $tabla (la cual depende de lo que seleccione el usuario) me encuentro con que no la tengo definida, como la defino. $sql="INSERT INTO $tabla(name, email, comment, rusbro, datetime)VALUES('$name', '$email', '$rusbro', '$comment', '$datetime')";

Muchas gracias!!

por Spychaser desde Argentina

Registrado desde: 06 Feb 06
0 0

para ese caso, esta la sentencia switch, te explico un poco de como va ..

la sintaxis es asi

<?

$dato = $_GET['dato'];

switch($dato) {

case 'abrazos':
          $tabla='abrazos';
break;
case 'firma';
          $tabla='firma';
break;
case 'loquesea':
          $tabla='loquesa';
break;

default: // Esto es por si en la variable introducida no coincide con ningun case, pasa aki

          $tabla='default';

break; } ` ?>

no se si con el ejemplo te basta para entender el switch, si tienes alguna duda posteala.

por gOnDo desde España

Registrado desde: 20 Apr 03
0 0

Muchas gracias, ya tengo todo andando de manera espectacular.... pero como no podia faltar tengo la siguiente duda.... como hago para darle mas seguridad y que el usuario no pueda volver con el navegador para atras y volver a cargar la firma. Muchas pero Muchas gracias.

por Spychaser desde Argentina

Registrado desde: 06 Feb 06
0 0

Pues podría comprovar si ya existe una firma con este texto y si es así devolver error. Sería algo así:

$query = mysql_query("SELECT * FROM $tbl_name WHERE name='$name' && email='$email' && rusbro='$rusbro' && comment='$comment'"); if(mysql_num_rows($query) > 0) {

 echo 'ERROR... No lo vuelvas a enviar';

} else {

// LO INSERTAS EN LA DB como hacias antes

}

por RainCT desde Alemania

Registrado desde: 08 Jan 05