0

テキスト投稿サイトを作りました。post.php ページへの投稿を除き、ユーザーが www.mywebsite.com/post.php?name=MyName&body=MyText? と入力したときにテキストを投稿できるようにしたいと考えています。どうすればこれを作ることができますか?

郵便番号は次のようになります。

  <?php


  //insert category to database
  if(isset($_POST['qty'])) {
    // Fetch and clean the <select> value.
    // The (int) makes sure the value is really a integer.
    $qty = (int)$_POST['qty'];


    // Create the INSERT query.
    $sql = "INSERT INTO `table`(`quantity`)
            VALUES ({$qty})";

    // Connect to a database and execute the query.
    $dbLink = mysql_connect('MyServer', 'username', 'password') or die(mysql_error());
              mysql_select_db('database_name', $dbLink) or die(mysql_errno());

    $result = mysql_query($sql);

    // Check the results and print the appropriate message.
    if($result) {
        echo "Record successfully inserted!";
    }
    else {
        echo "Record not inserted! (". mysql_error() .")";
    }
}



     if ($_POST['post'])
{
    //get data
    $title = $_POST['title'];
    $body = $_POST['body'];

    //check for existance
    if ($title&&$body)
    {
        mysql_connect("MyServer","username","password") or die(mysql_error());
        mysql_select_db("database_name") or die(mysql_error());

        $date = date("Y-m-d");

        //insert data
        $insert = mysql_query("INSERT INTO news VALUES ('','$title','$body','$date')") or die(mysql_error());

        die("Your text has been posted!");

    }
    else
        echo "Please fill out your name and text";
}
?>
4

5 に答える 5

1

最初の提案は、可能な限りのコストでクエリ文字列に基づく直接クエリを避けることです!これはセキュリティ上の大きな懸念事項です。

また、あなたが提供したコードは、多くのセキュリティホールや懸念にさらされています。

$ _COOKIE、$ _ POST、または$ _GETを介して変数を呼び出し、それがクエリで使用される場合は常に、可能な場合はMySQLI / PDOプリペアドステートメントを使用するか、少なくともmysql_real_escape_stringを使用してください。これにより、データベースに入力されるデータがサニタイズされます。

また、URL /クエリ文字列からパラメータを取得しているので、POSTをGETに変更します。

さらに、次のような行があります。

if($_GET['post'])

常に失敗します。URLにpostというパラメータがありません。それが機能するためには、次のようになっている必要があります。

post.php?post&name=MyName&body=MyText?)

下記参照:

<?php

//insert category to database
// makes sure qty is numeric # added by sixeightzero
if(isset($_GET['qty']) && is_numeric($_GET['qty'])) {
// Fetch and clean the <select> value.
// The (int) makes sure the value is really a integer.
$qty = (int)$_GET['qty'];


// Create the INSERT query.
$sql = "INSERT INTO `table`(`quantity`)
        VALUES ({$qty})";

// Connect to a database and execute the query.
$dbLink = mysql_connect('MyServer', 'username', 'password') or die(mysql_error());
          mysql_select_db('database_name', $dbLink) or die(mysql_errno());

$result = mysql_query(mysql_real_escape_string($sql));     
// sanitizes input # added by sixeightzero

// Check the results and print the appropriate message.
if($result) {
    echo "Record successfully inserted!";
}
else {
    echo "Record not inserted! (". mysql_error() .")";
}
}



if (!isset($_GET['name']) && !isset($_GET['body'])){

//get data
$title = $_GET['name'];
$body = $_GET['body'];

//check for existance
if ($title && $body)
{
    mysql_connect("MyServer","username","password") or die(mysql_error());
    mysql_select_db("database_name") or die(mysql_error());

    $date = date("Y-m-d");

    //insert data
    $insert = mysql_query("INSERT INTO news VALUES ('','".mysql_real_escape_string($title)."','".mysql_real_escape_string($body)."','".mysql_real_escape_string($date)."')") or die(mysql_error());
    // sanitizes input # added by sixeightzero

    die("Your text has been posted!");

}
else
    echo "Please fill out your name and text";
}
?>
于 2012-06-18T16:59:17.397 に答える
1

これが完全なソースコードです!! これを使ってみてください

  <?php


  //insert category to database
  if(isset($_POST['qty'])) {
    // Fetch and clean the <select> value.
    // The (int) makes sure the value is really a integer.
    $qty = (int)$_POST['qty'];


    // Create the INSERT query.
    $sql = "INSERT INTO `table`(`quantity`)
            VALUES ({$qty})";

    // Connect to a database and execute the query.
    $dbLink = mysql_connect('MyServer', 'username', 'password') or die(mysql_error());
              mysql_select_db('database_name', $dbLink) or die(mysql_errno());

    $result = mysql_query($sql);

    // Check the results and print the appropriate message.
    if($result) {
        echo "Record successfully inserted!";
    }
    else {
        echo "Record not inserted! (". mysql_error() .")";
    }
}



     if ($_SERVER['REQUEST_METHOD'] == "GET") //check whether its a GET method
{
    //get data, since you know that a valid "GET" request was sent
    $title = $_REQUEST['title'];
    $body = $_REQUEST['body'];


    if (isset($title) && isset($body)) //check for existance
    {
        mysql_connect("MyServer","username","password") or die(mysql_error());
        mysql_select_db("database_name") or die(mysql_error());

        $date = date("Y-m-d");

        //insert data
        $insert = mysql_query("INSERT INTO news VALUES ('','$title','$body','$date')") or die(mysql_error());

        die("Your text has been posted!");

    }
    else
        echo "Please fill out your name and text";
}
?>
于 2012-06-18T17:00:33.700 に答える
1

クエリ文字列からのデータには、POST ではなく $_GET を使用する必要があります。

//get data
$title = $_GET['title']; // or name if it's name
$body = $_GET['body']; 
于 2012-06-18T16:52:00.317 に答える
1

$_REQUEST を使用してみてください - スクリプトに投稿したすべてのデータが含まれています ($_GET、$_POST、および $_COOKIE グローバル配列から)

于 2012-06-18T16:54:50.557 に答える
0

$_REQUESTは基本的に の結果でarray_merge($_GET,$_POST,$_COOKIE)あるため、これを使用して GET または POST 変数の値を取得できます。

于 2012-06-18T16:52:30.377 に答える