2016-06-01 8 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'; 
} 

のコードはここにコードがあるされています(index.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; 
     } 
    } 
} 

ため私は$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

機能getinfo以外の機能mysqli_resultを定義します。それからそれをgetinfoから呼び出します。

getinfoの中にその関数を定義しているので、最初にgetinfoを呼び出すと、関数定義mysqli_resultが実行されます。 getinfoを2回目に呼び出すと、関数定義mysqli_resultが再度実行されます。しかし、それはすでに定義されており、あなたはそのエラーを取得します。

0

私はあなたがjavascript開発の背景を持っていると思います。

しかし、PHPでは関数の宣言方法が異なります。今、私たちはすべてのPHPファイルがrequire_once 'core.inc.php';我々は再宣言する必要はありませんかどう我々はそうcore.php

mysqli_result機能をdaclaredことを知っている

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のは次のようにする必要がありますこの関数。あなたのケースではindex.phpinclude_once 'login.php';と、login.phpにはmysqli_resultが冗長です。私はあなただけのPHPで初心者されており、他の開発者は、他のいくつかのアドバイスを与えることができますね

else if($query_num_rows == 1){ 
    $user_id= mysqli_result($query_run, 0,'id'); 
    $_SESSION['user_id'] = $user_id; 
    header('Location: index.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関数を再アニメーション化しようとすると、あなたが持っているひどい混乱の代わりに、これらのいくつかの行があります。