2016-06-01 84 views
2

這裏是我的login.php我無法PHP中多次執行相同功能

require_once 'connect.inc.php'; 
require_once 'core.inc.php'; 

if(isset($_POST['username']) && isset($_POST['password'])){ 
    $username=$_POST['username']; 
    $password=$_POST['password']; 
    $password_hash=md5($password); 
    if(!empty($username) && !empty($password)){ 
     $query="SELECT `id` FROM `login` WHERE `username`='$username' AND `password`='$password_hash'"; 
     if($query_run = mysqli_query($stat,$query)){ 
      $query_num_rows = mysqli_num_rows($query_run); 
      if($query_num_rows == 0){ 
       echo 'You have entered wrong username or password !'; 
      } 
      else if($query_num_rows == 1){ 
       function mysqli_result($res, $row, $field) { 
        $res->data_seek($row); 
        $datarow = $res->fetch_array(); 
        return $datarow[$field]; 
       } 
       $user_id= mysqli_result($query_run, 0,'id'); 
       $_SESSION['user_id'] = $user_id; 
       header('Location: index.php'); 
      } 
     } 
     else 
     { 
      echo 'You have entered wrong username or password !'; 
     } 
    }else { 
     echo 'You must have to enter username and password'; 
    } 
} 
<form action="<?php echo $server; ?>" method="POST"> 
    Username: 
    <input type="text" placeholder="Enter the userid" name="username"> 
    Password: 
    <input type="password" placeholder="Enter your password" name="password">  
    <input type="submit" value="Log in"> 

下面的代碼是針對的index.php

require_once 'core.inc.php'; 
require_once 'connect.inc.php'; 

if(get_status()){ 
$firstname=getinfo('firstname'); 
$lastname=getinfo('lastname'); 
echo 'You are logged in ,'.$firstname.' '.$lastname.''; 
echo "<br><a href='logout.php'>Logout</a><br>"; 
} 
else { 
include_once 'login.php'; 
} 

下面的代碼是代碼對於core.inc.php

session_start(); 
ob_start(); 
$server =$_SERVER['SCRIPT_NAME']; 
@$ref_url=$_SERVER['HTTP_REFERER']; 
function get_status(){ 
    if(isset($_SESSION['user_id']) && !empty($_SESSION['user_id'])){ 
     return true; 
    } 
    else 
     return false; 
} 

function getinfo($field){ 
    $get_query="SELECT `$field` FROM `login` WHERE `id`='".$_SESSION['user_id']."'"; 
    require 'connect.inc.php'; 
    if($query_run=mysqli_query($stat,$get_query)){ 
      function mysqli_result($res, $row, $f) { 
      $res->data_seek($row); 
      $datarow = $res->fetch_array(); 
      return $datarow[$f]; 
     } 
     if($query_result=mysqli_result($query_run,0,$field)){ 
      return $query_result; 
     } 
    } 
} 

在上述代碼(在的index.php)當我使用$lastname=getinfo('lastname'); after using $firstname=getinfo('firstname');。它給了我以下錯誤。 Fatal error:Cannot redeclare mysqli_result() (previously declared in C:\xampp\htdocs\good\core.inc.php:18) in C:\xampp\htdocs\good\core.inc.php on line 18

請別人幫我一把。我第一次學習這門語言。

+0

你應該學習參數化查詢,http://php.net/manual/en/mysqli.quickstart.prepared-statements.php – chris85

回答

2

定義功能mysqli_result功能外getinfo。然後從getinfo調用它。

由於您已在getinfo中定義了該函數,因此在調用第一次getinfo時將執行函數定義mysqli_result。當您第二次撥打getinfo時,mysqli_result的功能定義將再次執行。但它已經被定義,你會得到這個錯誤。

0

我想你有javascript的開發背景。

但在PHP中,我們聲明功能不同的方式。

因此,例如,您core.php中應該是這樣的:

session_start(); 
ob_start(); 
$server =$_SERVER['SCRIPT_NAME']; 
@$ref_url=$_SERVER['HTTP_REFERER']; 
function get_status(){ 
    if(isset($_SESSION['user_id']) && !empty($_SESSION['user_id'])){ 
     return true; 
    } 
    else 
     return false; 
} 

function mysqli_result($res, $row, $f) { 
    $res->data_seek($row); 
    $datarow = $res->fetch_array(); 
    return is_array($datarow)?$datarow[$f]:false; 
} 

function getinfo($field){ 
    $get_query="SELECT `$field` FROM `login` WHERE `id`='".$_SESSION['user_id']."'"; 
    require 'connect.inc.php'; 
    if($query_run=mysqli_query($stat,$get_query)){ 
     if($query_result=mysqli_result($query_run,0,$field)){ 
      return $query_result; 
     } 
    } 
} 

現在我們知道,我們在core.php

所以如果任何PHP文件將require_once 'core.inc.php';我們不需要再聲明daclared mysqli_result功能這個功能。在你的情況下index.php你叫include_once 'login.php';login.php你試圖重新聲明mysqli_result這是多餘的。

else if($query_num_rows == 1){ 
    $user_id= mysqli_result($query_run, 0,'id'); 
    $_SESSION['user_id'] = $user_id; 
    header('Location: index.php'); 
} 

我猜你只是初學者在PHP和其他開發人員可以提供一些其他的建議:所以你login.php片段進行改造。但我的回答只是關於你的問題,爲什麼你有一個錯誤 Cannot redeclare mysqli_result()

0

請所有善良的緣故,使用PDO

$query = "SELECT id FROM login WHERE username=? AND password=?"; 
$stmt = $pdo->prepare($query); 
$stmt->execute([$username, $password]); 
$user_id = $stmt->fetchColumn(); 
if($user_id) { 
    $_SESSION['user_id'] = $user_id; 
    header('Location: index.php'); 
    exit; 
} else { 
    echo 'You have entered wrong username or password !'; 
} 

此。是。所有。您需要的代碼。這幾行代替了所有可怕的混亂,試圖重新設置一個死的mysql_result函數。