PHP kendi bir işlevi yapmak için

3 Cevap php

How can you make an own function in PHP such that I can bind to it different files according to the data in $_GET

Ben giriş yapmadınız ise sadece giriş formunu gösterir işleyicisi handler_login.php kullanın

Kullanıcı logged_in veya not_logged_in Ancak eğer, ben belirli işlemleri çalıştırmak gerekir. Benim şu anki hnadler Ancak bunu başarmak için çok esnek değildir.

My handler_login.php

<?php
// Check for the existing Cookie

if (isset($_COOKIE['login']) ) {
    //1. read the first word in Cookie of the form 
        //"email@gmail.com,ca05106e445c15197f7213bc12648524
    //Then, store this word to $email 
    $cookie_tripped = explode(",", $_COOKIE['login']);   
    $email = $cookie_tripped[0];
    $result = pg_prepare($dbconn, "query1", 'SELECT passhash_md5 FROM users 
                         WHERE email = $1;');
    $result = pg_execute($dbconn, "query1", array($email));

    if(!$result) {
        exit;
    }

    // to take the passhash out of the cookie
    $passhash_md5_cookie = $cookie_tripped[1];
    if($result == $passhash_md5_cookie) {
        header("Location: ../index.php");
        die("logged in");
    }
    // put the login form visible                // Problem HERE: I want that my function changes this value in the parameter
    include 'forms/login.php';
}

?>

Yukarıdaki kod sorun uzayabilir olmasıdır.

not_logged_in(include_file) ve logged_in(include_file): Sorun iki işlevi gerektiğini bana gösteriyor. Aksi halde yapmadınız kullanıcı, bu ekran için yeni bir şey bir şey döndürmek gerekiyorsa eski parametresi dosyayı içermelidir.

İkincisi daha sonra tekrar kullanıcı Aksi oturum ise, hiçbir şey yapmalıyım parametresi dosyayı içermelidir.

My attempt in Pseudo code.

* Not_logged_in (paramer)-fonksiyonu *

 // process all variables in the URL such as ?questions=777
 not_logged_in(forms/login.php)
 // this should return
 //     include 'forms/login.php'; if the user is not logged in

* Logged_in (paramer)-fonksiyonu *

 // process all variables in the URL such as ?questions=777
 logged_in(handler/send_question.php)
 // this should return
 //     include 'handlers/send_question.php'; if the user is logged in

3 Cevap

function not_logged_in($file)
{
    if(!isset($_COOKIE['login']))
    {
       include($file);
    }
}
function logged_in($file)
{
    if(isset($_COOKIE['login']))
    {
       include($file);
    }
}
not_logged_in("login.php");
logged_in("handler/send_question.php");

Bu $ _COOKIE ['login'] ayarlı ise, onlar oturum açtığınızı varsayarak

Ben aslında bunun yerine sadece bir if deyimi yapıyor bunu yapmak için ilginç bir yol olduğunu düşünüyorum:

if(isset($_COOKIE['login']))
{
    include("handler/send_question.php");
}
else
{
    include("login.php");
}

Sizin yol ile sorun ancak iki fonksiyonlarını değerlendirmek zorundadır çünkü ekstra kod olmasıdır. Ama bu işe yarayabilir işlevlerinden biri (yalnızca bir işlev $_COOKIE testi geçecek çünkü) aslında kodu değerlendirmek asla eğer.

Sen cannot Bu gibi dahil dosyaları GET parametrelerini geçmek:

include("test.php?somevar=var");

Dahil dosyaları çağrıldığını sayfasından $ _GET parametreleri devralır.

Aşağıdaki konuda bir işlev oluşturabilirsiniz:

function func_name($params) {
    // operations
}

Yani, örneğin, aşağıdaki yazabilirsiniz:

function handle_login($if_logged, $if_not_logged) {
    if(isset($_COOKIE['login'])) {
        include($if_logged);
    } else {
        include($if_not_logged);
    }
}

Bir fonksiyon içerisinde de dahil olmak üzere, çünkü işlev dışındaki değişkenleri dahil dosyaya görünür olmayacağını unutmayın. Sen onlara erişmek için global veya $ GLOBALS süper küresel kullanmak gerekecek. Örneğin, aşağıdaki örnekte değişkeni $cantSeeMe okumak mümkün olmayacaktır:

$cantSeeMe = 'Ha! Ha! I am hidden!';

function test() {
    var_dump($cantSeeMe);
}

test() // dumps null

Burada mevcut değişken kapsam belirleme hakkında daha fazla bilgi:

PHP: Variable Scope

Ben yanlış bir yaklaşım alarak düşünüyorum. Siz kullanıcı giriş ve siz yazdı eğer kendini tekrar olurdu gibi geliyor Yani kullanıcı not oturum ise her iki işlevi bir şablon döndürmek gerekiyorsa hem işlevleri tüm değişkenleri işlemek gerektiğini söylüyorlar Bunu yapmak için iki fonksiyonları.

Ben en loginProcess() diyelim, tek fonksiyon kullanmak ve onu hiçbir şey geçerdi. Daha sonra ikinci bir işlevi isLoggedIn() diyoruz ve bu dayanarak kararlarını yapabilirsiniz:

function loginProcess()
{
    $loggedIn = isLoggedIn();   //returns boolean true or false
    if ($isLoggedIn) {
         //process variables here
         //show logged in template here
    }
    else {
         //show not logged in template here
    }
}

Eğer işlem için ayrı işlevleri gerekirse, o içine daha o kadar bölünmüş:

function loginProcess()
{
    if (isLoggedIn()) processLoggedInUser();
    else processNotLoggedInUser();
}

Böyle bir şey aynı değişkenleri işlemek birden fonksiyonlarını korumak zorunda sizi kurtaracak.