Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный T_VARIABLE в строке 107

Строка 107 в приведенном ниже коде:

$sql="INSERT INTO " $table_name " (confirm_code,name,password,email,address,phone,education,date_of_birth) VALUES 
        ('".$confirm_code."','".$name."','".$pwd."','".$email."','".$adres."','".$phno."','".$educon."','".$dob."') "; "

я получаю неожиданный T_VARIABLE;

<?php
if(isset($_POST['Register']))
{ 
    $name= $_POST['uname'];
    $pwd= $_POST['pswd'];
    $email= $_POST['email'];
    $phno= $_POST['phno']; 
    $adrs= str_replace("'","`",$_POST['adres']);
    $adres  =   $adrs;
    $educon= $_POST['educon']; 
    $dob= $_POST['dob'];
    $chkname    =   "select email from ".USREG." where email='".$email."'";
    $res        =       mysql_query($chkname, $con) or die(mysql_error());
    $chkresult=mysql_fetch_array($res);
    $uemail= $chkresult['email'];
     //print_r($uemail);die();
     include ('config.php');
     $table_name=temp_members_db;
     $confirm_code=md5(uniqid(rand()));
        if($uemail==$email)
        {
            echo ' <p style="color:red">Email <b> '.$email.' </b> Already exists</p>';
        }
        else
        {
            $sql="INSERT INTO " $table_name      "(confirm_code,name,password,email,address,phone,education,date_of_birth) VALUES 
             ('".$confirm_code."','".$name."','".$pwd."','".$email."','".$adres."','".$phno."','".$educon."','".$dob."') ";
             $result  = mysql_query($sql, $con) or die(mysql_error());
            if($result)
            {  
                $to=$email;
                echo '<p style="color:green"> '.$name.' Your Registration Success</p> <br/>'; 
                $subject    =   "your confirmation link here";
                            $headers  = 'MIME-Version: 1.0' . "\r\n";
                            $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  
                            $header = 'From: ShareLibrary <'.ADMIN_MAIL.'>' . "\r\n";  
                            $admMesg    =   $email." is registered "; 
                            $message = "your confrimation link \r\n";
                            $message = "click on this link to activae your account \r\n";
                            $message = "http://www.xxxxxx.in/confirmation.php?passkey=$confirm_code";
                            $sentmail = $mail($to,$subject,$message,$header);
           if($sentmail)
                {   
                    echo '<p style="color:green">registration details sent to  '.$email.' </p><br/>';
                }
                else
                {
                    echo '<p style="color:red">registration details sending to your mail was failed';
                }
            }
            else
            { 
                echo "<p>Registration FAILED</p>";
            }
        } 
    } 
?>

приведенный выше код предназначен для формы регистрации пользователя после завершения регистрации, код активации будет отправлен на зарегистрированный почтовый идентификатор пользователя.

Я знал, что ошибка T_VARIABLE будет возникать в основном из-за отсутствия точки с запятой или фигурных скобок в предыдущей строке, где отображается ошибка. но я думаю, что закончил предыдущую строку точкой с запятой, и я не пропустил никаких фигурных скобок. но все же я получаю эту неожиданную ошибку t_variable, я не знаю, почему она возникает. пожалуйста, помогите мне с этим, как решить эту проблему


person user3032296    schedule 15.01.2015    source источник
comment
Вы не объединяете $table_name в $sql="INSERT INTO " $table_name " .. это должно быть похоже на $sql="INSERT INTO ". $table_name ."   -  person Jon    schedule 15.01.2015
comment
Нет точек конкатенации? INSERT INTO " $table_name "   -  person Rizier123    schedule 15.01.2015
comment
temp_members_db если это не константа, то ее нужно заключить в кавычки.   -  person Funk Forty Niner    schedule 15.01.2015
comment
Взгляните здесь.   -  person The Blue Dog    schedule 15.01.2015
comment
Похоже, в нем есть несколько уязвимостей для SQL-инъекций.   -  person halfer    schedule 15.01.2015


Ответы (2)


Вам не хватает операторов конкатенации:

 $sql="INSERT INTO " $table_name      "(confi
                   ^^^^^         ^^^^^
                   HERE          HERE

Должен быть

$sql="INSERT INTO " . $table_name . "(confi

PHP также должен предупреждать вас о $table_name=temp_members_db;.

Вам не хватает кавычек вокруг строкового значения temp_members_db, которое считается / обрабатывается как константа, если не указан.

$table_name='temp_members_db';
  • К вашему сведению, вы также широко открыты для инъекций SQL.
person John Conde    schedule 15.01.2015
comment
Я также задаюсь вопросом о $table_name=temp_members_db; - Постоянно это или нет. temp_members_db - person Funk Forty Niner; 15.01.2015
comment
@ Fred-ii: PHP тоже должен раздражать. - person John Conde; 15.01.2015
comment
Вероятно, это произойдет вскоре после того, как OP исправит конкатенацию. - person Funk Forty Niner; 15.01.2015
comment
И если так, мы получим еще один вопрос об опечатке в качестве дополнения! Вероятно, нам следует указать на это сейчас. ^^ (Как я вижу, вы только что сделали хаха) - person Jon; 15.01.2015
comment
@JohnConde Я думаю, мы можем назвать эту зеленую галочку прекрасным помощником ;-) Еще один счастливый конец. - person Funk Forty Niner; 15.01.2015

Отсутствующие точки в конкатенационных строках вокруг $table_name:

$sql = "INSERT INTO " . $table_name . "(confirm_code, name, password, email, address, phone, education, date_of_birth) VALUES ...
person pavel    schedule 15.01.2015