JQuery POST kullanarak JavaScript PHP için değişken geçmek için nasıl

2 Cevap php

Ben sayfa chat.php aşağıdaki Javascript işlevi değişkeni sessionnum geçirerek:

$(document).ready(function(){

        timestamp = 0;
        updateMsg();
        $("form#chatform").submit(function(){
            $.post("backend.php",{
                        message: $("#msg").val(),
                        name: author,
                        action: "postmsg",
                        time: timestamp,
                        tablename1: sessionnum
                    }, function(xml) {
                $("#msg").empty();

                addMessages(xml);

                document.forms['chatform'].reset()
                fixScroll();
            });
            return false;
        });
    });

Backend.php aşağıdaki PHP fonksiyonu:

if(@$action == "postmsg") {
    mysql_query("INSERT INTO `$tablename1` (`user`,`msg`,`time`)
                VALUES ('$name','$message',".time().")",$dbconn);
    mysql_query("DELETE FROM `$tablename1` WHERE id <= ".
                (mysql_insert_id($dbconn)-$store_num),$dbconn);
    }

$messages = mysql_query("SELECT user,msg
                         FROM `$tablename1`
                         WHERE time>$time
                         ORDER BY id ASC
                         LIMIT $display_num",$dbconn);

Ben kodu sabit, değişken ve değeri iki tamsayılar ve aynı değer olsa bile böyle $tablename1 = 100 backend.php gibi bir atama sadece çalışır. Bu kesmek aslında değişken geçmek zorunda gibi, kabul edilebilir değildir. Benim kod bir hata var mı?

Bu kod, http://articles.sitepoint.com/article/ajax-jquery/3 uyarlanmıştır

JQuery ile düzgün değişken ilanıyla herhangi bir yardım için teşekkür ederiz.

2 Cevap

$_POST['variable_name'] için POST değişkenlerini değiştirmeyi deneyin. Sen registered değişkenler olarak ortaya globalleri dayanan bir sözdizimi kullanarak ediyoruz. Bu a) varsayılan olarak etkin değil ve etkin olduğunda b) büyük bir güvenlik riski teşkil olan bir özelliktir. Böylece, sunucu tarafı kodunu değiştirmeyi deneyin:

$action = $_POST['action'];
$tablename1 = mysql_real_escape_string($_POST['tablename1']);
$name = mysql_real_escape_string($_POST['name']);
$message = mysql_real_escape_string($_POST['message']);

if(@$action == "postmsg") {
    mysql_query("INSERT INTO `$tablename1` (`user`,`msg`,`time`)
                VALUES ('$name','$message',".time().")",$dbconn);
    mysql_query("DELETE FROM `$tablename1` WHERE id <= ".
                (mysql_insert_id($dbconn)-$store_num),$dbconn);
    }

$messages = mysql_query("SELECT user,msg
                         FROM `$tablename1`
                         WHERE time>$time
                         ORDER BY id ASC
                         LIMIT $display_num",$dbconn);

Bazı SQL enjeksiyonu önlemek için, size (kullanıcı potansiyel değiştirebilirsiniz) SQL sorguları kullanarak konum değişkenleri mysql_real_escape_string kullanarak kaçtı edilmiş, unutmayın.

Eğer register_globals dayanarak, ve örneğin yerine $_POST superglobal dizin başvuran PHP'de POST değişken, ne olacağını baþvurduðunuzu sanki görünür

if ( $_POST['action'] == 'postmsg' ) {
    $name= mysql_real_escape_string( trim( $_POST['name'] ) );
    // query using $name reference
}

Bir kenara, gerçekten istemci tarafında kod tabloismi kullanımına izin yeniden gözden geçirilmesi gerektiğini.