2010-10-29 4 views
0

Как преодолеть снизу ошибки:Нужна помощь расшифровки сообщения об ошибке PHP

Notice: Use of undefined constant temp_members_db - assumed 'temp_members_db' 
in /var/www/signup_ac.php on line 10 Cannot send Confirmation link to 
your e-mail address 

Ниже приведен код:

<?php 

ini_set('display_errors',1); 
error_reporting(E_ALL|E_STRICT); 

include('config.php'); 

// table name 
$tbl_name=temp_members_db; 

// Random confirmation code 
$confirm_code=md5(uniqid(rand())); 

// values sent from form 
$name=$_POST['name']; 
$email=$_POST['email']; 
$country=$_POST['country']; 

// Insert data into database 
$sql="INSERT INTO $tbl_name(confirm_code, name, email, password, country)VALUES('$confirm_code', '$name', '$email', '$password', '$country')"; 
$result=mysql_query($sql); 

// if suceesfully inserted data into database, send confirmation link to email 
if($result){ 

// ---------------- SEND MAIL FORM ---------------- 

// send e-mail to ... 
$to=$email; 

// Your subject 
$subject="Your confirmation link here"; 

// From 
$header="from: your name <your email>"; 

// Your message 
$message="Your Comfirmation link \r\n"; 
$message.="Click on this link to activate your account \r\n"; 
//$message.="http://www.yourweb.com/confirmation.php?passkey=$confirm_code"; 
$message.="http://localhost/confirmation.php?passkey=$confirm_code"; 

// send email 
$sentmail = mail($to,$subject,$message,$header); 

} 

// if not found 
else { 
echo "Not found your email in our database"; 
} 

// if your email succesfully sent 
if($sentmail){ 
echo "Your Confirmation link Has Been Sent To Your Email Address."; 
} 
else { 
echo "Cannot send Confirmation link to your e-mail address"; 
} 

?> 
+0

Если вы показываете нам, что находится в строке 10 signup_ac.php, мы можем, вероятно, дать вам более точный ответ. –

+0

Ниже приведен код: – AON

+0

Как указано @user ниже, у вас [SQL injection] (http://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection -пакеты) проблемы –

ответ

9

Либо вы забыли $ или вы забыли какую-то цитату.

+0

+1 Хорошая работа с хрустальным шаром;) – 2010-10-29 05:40:24

5

Вы, вероятно, используют temp_members_db в качестве ключа массива, но не процитировать строку правильно:

$arr[temp_members_db] ⟶ $arr['temp_members_db'] 

Смотрите также Why is $foo[bar] wrong?:

This is wrong, but it works. The reason is that this code has an undefined constant (bar) rather than a string ('bar' - notice the quotes). PHP may in future define constants which, unfortunately for such code, have the same name. It works because PHP automatically converts a bare string (an unquoted string which does not correspond to any known symbol) into a string which contains the bare string. For instance, if there is no defined constant named bar , then PHP will substitute in the string 'bar' and use that.

+0

Я ненавижу это поведение. Устранение несуществующей константы должно приводить к ошибке, а не к уведомлению ***. –

+0

+1 для объяснения, хотя на самом деле это не связано с массивами. –

+0

@Pekka: Мое настроение точно. В некоторых аспектах PHP слишком толерантен. – Gumbo

1

Является ли это мне, или есть огромный SQL -injection и Mail-injection в этом коде?

(И это не только некоторые модные слова, это означает, что вы не в полной мере понять, что вы делаете ...)

И кстати PHP6 еще не наступил, поэтому функция get_magic_quotes_gpc() по-прежнему существует и по-прежнему необходимо ...

+0

Нет причин для downvote - здесь * огромные уязвимости здесь, и новые пользователи не могут комментировать. +1 для выравнивания. –

+0

+1 для поощрения – Mchl

1
<?php 

ini_set('display_errors',1); 
error_reporting(E_ALL|E_STRICT); 

include('config.php'); 

// table name 
$tbl_name=temp_members_db; 

Вы или недостающие цитаты:

$tbl_name='temp_members_db'; 

или постоянное определение:

define('temp_members_d', 'whatever'); 
+0

Или 'config.php' определяет' $ temp_members_db'. –

Смежные вопросы