0

我在此代码中收到错误,因此它无法在我的 PC 上运行。当我将它放入代码检查器时,我被告知有一个错误是意外的 T 字符串。但是,我试图寻找解决这个问题的方法,包括用引号括住代码的不同部分,但这没有区别。

特别是电子邮件地址字段为空的“If”语句。一位代码检查员甚至告诉我“Enter”这个词是出乎意料的。

<?php

function load( $page = 'login.php' )

{

$url = 'http://' . $_SERVER[ 'HTTP_HOST' ] .
               dirname( $_SERVER[ 'PHP_SELF' ] ) ;

$url = rtrim( $url , '^\' ) ;

$url .= '/' . $page ;

header( "Location: $url" ) ;
exit() ;


function validate( $dbc , $email = " , $pwd = " )

{

$errors = array() ;

if ( empty( $email ) )
{ $errors[] = 'Enter your email address.' ; }
else { $e = mysqli_real_escape_string( $dbc, trim( $email ) ) ; }

if ( empty( $pwd ) )
{ $errors[] = 'Enter your password.' ; }
else { $p = mysqli_real_escape_string( $dbc, trim( $pwd ) ) ; }

if ( empty( $errors ))
{
$q = "SELECT user_id, first_name, last_name, 
   FROM users
   WHERE email = '$e'
   AND pass = SHA1( '$p' ) " ;

$r = mysqli_query ( $dbc , $q ) ;

if ( mysqli_num_rows( $r ) == 1 )
{
$row = mysqli_fetch_array ( $r , MYSQLI_ASSOC ) ;
return array( true , $row ) ;
}
else

{ $errors[] = 'Email address and password not found.' ; } 

}

return array( false , $errors ) ;  }



}


?>    
4

2 回答 2

2

在以下代码行中:

$url = rtrim( $url , '^\' ) ;

你实际上已经通过在它前面'放了一个来逃避关闭。\这导致您的其余代码被假定为您尝试定义的字符串的延续。

\\您应该用实际上转义第一个反斜杠的双精度替换它,从而按照您的意思定义字符串:

$url = rtrim( $url , '^\\' ) ;
于 2013-10-14T00:39:02.567 回答
0
  1. 加载函数缺少右括号:}
  2. function validate( $dbc , $email = " , $pwd = " )- 你可能打算写:function validate( $dbc , $email = "" , $pwd = "" )或:
    function validate( $dbc , $email = '' , $pwd = '' )- 你发布代码的方式它无法运行!
  3. 调用后header( "Location...不要exit() ;- 使用return
  4. 您正在检查 email/pwd 是否为空并保存错误,但您不会更改程序的流程:在这种情况下您根本不应该调用数据库 - 而是立即显示错误!
  5. 更好的做法是在查询中使用bind_param而不是字符串连接 - mysqli_real_escape_string 不是针对 sql-injection 的防弹
  6. 这是个人的“品味”:当您在 SO 上发布问题时,请尝试识别代码并使其可读,进一步,else {blablabla..... ;}在同一行中执行类似的操作 - 不遵循任何代码约定,尝试接受一个代码约定并坚持下去!
于 2013-10-14T00:43:30.900 回答