Bir Fonksiyon Along Değişkenler Passing

1 Cevap

show_commentbox(), aşağıdaki fonksiyonu olarak, bir değişken $_SESSION['loginid'], $submissionid, $submission, {[(4)] iletmekten istiyoruz }, $submittor, $submissiondate, $countcomments, $dispurl. Aşağıda kurulum ile, işe yaramıyor. Nasıl show_commentbox() boyunca değişkenleri pass yapmak değiştirebilir?

Teşekkür peşin,

John

index.php:

<?php 

$submission = $_GET['submission'];

 require_once "header.php"; 

 include "login.php";

 include "comments.php";

 include "commentformonoff.php"; 

?>

Header.php:

require_once ("function.inc.php");

Comments.php in:

$uid = $_SESSION['loginid'];
$submissiondate = mysql_real_escape_string($_GET['submissiondate']);
$submittor = mysql_real_escape_string($_GET['submittor']);
$countcomments = mysql_real_escape_string($_GET['countcomments']);
$dispurl = mysql_real_escape_string($_GET['dispurl']);
$url = mysql_real_escape_string($_GET['url']);
$submission = mysql_real_escape_string($_GET['submission']);
$submissionid = mysql_real_escape_string($_GET['submissionid']);

commentformonoff.php:

<?php
if (!isLoggedIn())
{

    if (isset($_POST['cmdlogin']))
    {

        if (checkLogin($_POST['username'], $_POST['password']))
        {
            show_commentbox();
        } else
        {
            echo "Login to comment";

        }
    } else
    {

        echo "Login to comment";
    }

} else
{

    show_commentbox();
}
?>

Display.functions.inc.php in:

function show_commentbox()
{
echo '<form  action="http://www...com/sandbox/comments/comments2.php" method="post"> 
    <input type="hidden" value="'.$_SESSION['loginid'].'" name="uid">
    <input type="hidden" value="'.$submissionid.'" name="submissionid">  
    <input type="hidden" value="'.$submission.'" name="submission">
    <input type="hidden" value="'.$url.'" name="url">
    <input type="hidden" value="'.$submittor.'" name="submittor">
    <input type="hidden" value="'.$submissiondate.'" name="submissiondate">
    <input type="hidden" value="'.$countcomments.'" name="countcomments">
    <input type="hidden" value="'.$dispurl.'" name="dispurl">



    <label class="addacomment" for="title">Add a comment:</label>

    <textarea class="commentsubfield" name="comment" type="comment" id="comment" maxlength="1000"></textarea>  

    <div class="commentsubbutton"><input name="submit" type="submit" value="Submit"></div> 
</form>
'; 
}

1 Cevap

Basitçe argümanlar olarak onları geçmek:

function show_commentbox($submissionid, $submission, ...) {
...

show_commentbox($submissionid, ...);

Kullanılabilir olması için formu geçirilecek gerekmez çünkü ben, $_SESSION['loginid'] kaldırıldı unutmayın. Ayrıca, muhtemelen bir nedenle sızdırılmış edilmemelidir hassas bilgiler bulunuyor.

mysql_real_escape_string, yalnızca bir veritabanına gönderilecek olacak verileri hazırlamak için kullanılmalıdır. Değerlerin yer tespit edilir bu beri yerine, önce değil, htmlspecialchars or htmlentities to prepare the data for output. This should be done in show_commentbox kullanın.

Tabii ki, birçok parametre hantal. Bir kere, nasıl onların düzen hatırlıyor musun? Bu sorun için bir çözüm (PHP) bir ilişkisel dizi geçerek uygulamak zorunda argümanlar, anahtar kelime için:

function show_commentbox($args) {
...

show_commentbox(array('submissionID' => $submissionid, ...));

Bu durumda daha iyi bir çözüm sınıfları kullanmaktır. : Bu kadar basit olabilir

class CommentBox {
    public $submissionid, ...;
    function show() {
        ?><form ...><?php
        foreach ($this as $name => $val) {
            $val = htmlspecialchars($val);
            ?><input name="<?php echo $name; ?>" value="<?php echo $value; ?>" type="hidden"/><?php
        }
        ?></form><?php
    }
}
...
$cb = new CommentBox();
foreach ($cb as $name => $ign) {
    // note: we don't want to loop over $_GET, as that introduces
    // potential injection attacks
    if (isset($_GET[$name])) {
        $cb->$name = $_GET[$name];
    }
}

Yoksa, bir MVC architecture kullanarak FormView sınıfa show ayıran başlayabilirsiniz.

Beri globals are bad Ben bilerek, küresellerle kullanılarak dışarı gidiyorum.