0

私のJQueryはサニタイズ機能を起動しません。入力フィールド名から値を取得し、パス入力フィールドに表示する必要があります。なぜ機能しないのですか?このコードがすべて書かれているページは new_page.php と呼ばれるので、 ajax_request 関数が起動されると、外部ページではなく同じページを指します。PHP 5.3 と HEIDISQL を使用しています

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <?php 

        include('conect.php');
        if(($_POST)&&(!empty($_POST['name']))&&(!empty($_POST['path'])) ){
        $name=$_POST['name'];
        $path=$_POST['path'];

        if(isset($_POST['sanitize'])) {
            $title=$_POST['sanitize']; 
            $title = strip_tags($title);
            // Preserve escaped octets.
            $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title);
            // Remove percent signs that are not part of an octet.
            $title = str_replace('%', '', $title);
            // Restore octets.
            $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title);



            $title = strtolower($title);
            $title = preg_replace('/&.+?;/', '', $title); // kill entities
            $title = str_replace('.', '-', $title);
            $title = preg_replace('/[^%a-z0-9 _-]/', '', $title);
            $title = preg_replace('/\s+/', '-', $title);
            $title = preg_replace('|-+|', '-', $title);
            $title = trim($title, '-');

            echo $title;
        }   

        mysql_query("UPDATE menus SET name='$name' , path='$path'");
        }

        ?>
        <html>
        <head>
        <script type="text/javascript" src="/javascript/jquery-1.8.2.min.js"> </script>
        <script>


    // create the XMLHttpRequest object, according browser
function get_XmlHttp() {
  // create the variable that will contain the instance of the XMLHttpRequest object (initially with null value)
  var xmlHttp = null;

  if(window.XMLHttpRequest) {       // for Forefox, IE7+, Opera, Safari, ...
    xmlHttp = new XMLHttpRequest();
  }
  else if(window.ActiveXObject) {   // for Internet Explorer 5 or 6
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }

  return xmlHttp;
}

// sends data to a php file, via POST, and displays the received answer
function ajaxrequest(php_file, tagID) {
  var request =  get_XmlHttp();     // call the function for the XMLHttpRequest instance

  // create pairs index=value with data that must be sent to server
  var  the_data = 'sanitize='+document.getElementById('name').innerHTML;

  request.open("POST", php_file, true);         // set the request

  // adds  a header to tell the PHP script to recognize the data as is sent via POST
  request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  request.send(the_data);       // calls the send() method with datas as parameter

  // Check request status
  // If the response is received completely, will be transferred to the HTML tag with tagID
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      document.getElementById(tagID).innerHTML = request.responseText;
    }
  }
}   


    </script>

        </head>

        <body>
                <form action="<?php $_PHP_SELF ?>" method="post">
                <label for="nume">Name</label><input type="text" name="name" id="name" onchange="ajaxrequest('new_page.php', 'path')" />
                <label for="cale">Path</label><input type="text" path="path" id="path" />
                <input type="submit" name="submit"/>
        </form>
        </body>
        </html>
4

2 に答える 2

0

これは古い投稿であることは承知していますが、この質問を検索する人々に役立つと思います。

Zorayr が言ったように、PHP はサーバー側ベースの言語であり、Javascript または派生物はクライアント側です。これは、JS コードから PHP 関数を呼び出すことができないためです。

ただし、関数を呼び出す代わりに、コードにあるように、処理されたフォームで関数を起動できます。もう 1 つの方法は、PHP クラスを作成し、同じファイルでそれを初期化することです。

例:

<?php
Class MyClass {

    function __construct()
    {
        echo "hello world.";
    }
}
$init = new MyClass();
?>

このようにして、引数を渡し、より明確なことを行うことができます。

于 2014-04-17T11:20:26.347 に答える
0

既に述べたように、JavaScript を使用して PHP 関数を呼び出すことはできません。これは、1 つはサーバー側のテクノロジであり、もう 1 つはクライアント側のテクノロジであり、ローカル ブラウザーでのみ実行されるためです。

データ、データベース、およびユーザー入力を処理するための推奨されるアプローチは、データ アクセスにActiveRecord パラダイムを備えたMVC アーキテクチャを使用することです。正しく行われた場合、データベースにコミットする前に、アクティブなレコード モデル内ですべてのデータをサニタイズする必要があります。

于 2013-01-15T08:25:01.190 に答える