0

I made a form to insert and modify categories in my project. when i hit "submit" i get the record submitted into the database but it appears empty ! and if i go to the databse field and write the text myself it will appear good in MySQL and and "????" in the browser !

here is the code i wrote:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>

 <?php
$con = mysql_connect("localhost","user","pass");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("mydb", $con);

$sql="INSERT INTO categories (name, parent_id,description)
VALUES
('$_POST[name]','$_POST[parent_id]','$_POST[description]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con)
?>

<form action="ins.php" method="post">
category: <input type="text" name="name" /><br><br>
parent: <input type="text" name="parent_id" /><br><br>
description: <input type="text" name="description" /><br><br>

<input type="submit" />
</form>

</body>
</html>
4

11 に答える 11

2

$_POST は配列であるため、SQL リクエストでインデックス名を (" を使用して) 引用符で囲む必要があります。

$sql="INSERT INTO categories (name, parent_id,description)
VALUES
('".$_POST["name"]."','".$_POST["parent_id"]."','".$_POST["description"]."')";

ただし、一般的に言えば、SQL インジェクションを避けるために、ユーザーがスクリプトに投稿しているものを直接信用しないでください。より優れた安全な mysqli::query を使用できます。

Mysqli

于 2013-01-23T09:47:23.323 に答える
0

次のように、ステートメントで二重引用符を使用してみてください。

$ sql = "INSERT INTO category(name、parent_id、description)VALUES("'。$_ POST['name']。'"、"'。$_ POST['parent_id']。'"、"'。$_ POST [ '説明']。'")";

于 2013-01-23T09:59:19.950 に答える
0
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>

 <?php
 if ($_POST['action']=="doformpost") {
    //only do DB insert if form is actually posted

    $con = mysql_connect("localhost","user","pass");
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }

    mysql_select_db("mydb", $con);

    $sql="INSERT INTO categories (name, parent_id,description)
    VALUES
    ('".$_POST['name']."','".$_POST['parent_id']."','".$_POST['description']."')";


    if (!mysql_query($sql,$con))
      {
      die('Error: ' . mysql_error());
      }
    echo "1 record added";

    mysql_close($con)
}
?>

<form action="ins.php" method="post">
<input type="hidden" name="action" id="action" value="doformpost" />
category: <input type="text" name="name" /><br><br>
parent: <input type="text" name="parent_id" /><br><br>
description: <input type="text" name="description" /><br><br>

<input type="submit" />
</form>

</body>
</html>
于 2013-01-23T09:46:58.720 に答える
0
$sql="INSERT INTO categories (name, parent_id,description)
VALUES
("'.$_POST['name'].'","'.$_POST['parent_id'].'","'.$_POST['description'].'")";

Please provide quotes while inserting values in database

于 2013-01-23T09:48:38.340 に答える
0

ここにたくさんの問題があります。

  • $_POST[name]する必要があります$_POST['name']
  • フォームが送信されなくても、クエリは実行されます。
  • 非推奨のmysql_*関数を使用しています。PDOまたはmysqliを使用する
  • あなたのコードは、 SQL インジェクションに対して脆弱です

以上のことを踏まえて、次のことを行う必要があります。

フォームが送信されたことを確認するには、

if( !empty($_POST['name']) && 
!empty($_POST['parent_id']) && 
!empty($_POST['description']) )

(isset空の値が許可されている場合に使用します。)

次に、クエリを実行します。


PDO では、コードは次のようになります ->

<?php
// configuration
$dbtype     = "mysql";
$dbhost             = "localhost";
$dbname     = "mydb";
$dbuser     = "user";
$dbpass     = "pass";

// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

// query
$sql = "INSERT INTO categories (name, parent_id,description)
        VALUES
       (?,?,?)";
$q = $conn->prepare($sql);
$q->execute(array($_POST[name],$_POST[parent_id],$_POST[description]));


?>

これはほんの始まりにすぎません。tryおよびブロックを使用しcatchて例外をキャッチできます。

!empty()クエリを実行する前に、フォームがまたはisset()上記のように送信されているかどうかを確認してください。

于 2013-01-23T10:02:00.233 に答える
-1

安全を忘れないでください!

$sql="INSERT INTO categories (name, parent_id,description)
VALUES
('".mysql_real_escape_string($_POST['name'])."','".intval($_POST['parent_id'])."','".mysql_real_escape_string($_POST['description'])."')";

そして、私はエンコーディングに問題があると思います。

データを挿入する前にクエリを起動します。

$sql = 'set names `utf-8`'; (for example)
于 2013-01-23T09:50:47.013 に答える
-1

私も同じ問題に直面しました。

このように挿入クエリを続行すると、これが役に立ちました。

$email_id = $_POST['email_id'];
$device_id = $_POST['device_id'];
***For My Sqli***
if(!empty($email_id ))
    {
        $result_insert = mysqli_query($db_conn,"INSERT INTO tableName (user_email, user_device_id,last_updated_by) VALUES('".$email_id."', '".$device_id."', '".$email_id."') ");

        if(mysqli_affected_rows($db_conn)>0)
        {
            $response["success"] = 1;
            $response["message"] = "Successfully Inserted";
        }
        else
        {
            $response["success"] = 0;
            $response["message"] = "Problem in Inserting";
        }
    }
    else
    {

        $response["success"] = 4;
        $response["message"] = "Email id cannot be Blank";
    }
}
///////////////////////////////////////////////////////////////////////////////
 **For My Sql**
if(!empty($email_id ))
    {
        $result_insert = mysql_query("INSERT INTO tableName (user_email, user_device_id,last_updated_by) VALUES('".$email_id."', '".$device_id."', '".$email_id."') ");

        if(mysql_affected_rows()>0)
        {
            $response["success"] = 1;
            $response["message"] = "Successfully Inserted";
        }
        else
        {
            $response["success"] = 0;
            $response["message"] = "Problem in Inserting";
        }
    }
    else
    {

        $response["success"] = 4;
        $response["message"] = "Email id cannot be Blank";
    }
}

注:ここでは、電子メールのみを確認しました。

于 2015-08-12T12:59:26.293 に答える
-1

以下の挿入クエリを使用してデータを挿入します。間違いなく役立つと確信しています。

$sql="INSERT INTO categories (name,parent_id,description)
VALUES
('".$_POST['name']."','".$_POST['parent_id']."','".$_POST['description']."')";
于 2013-01-23T11:19:01.950 に答える
-1

use this statement for your code

if( isset($_POST['name']) && isset($_POST['parent_id']) && isset($_POST['description']) )

//your insert query
于 2013-01-23T09:48:31.663 に答える
-1

これを試して

<?php
if(isset($_POST['submit'])) {
    $con = mysql_connect("localhost","user","pass");
    if (!$con){
      die('Could not connect: ' . mysql_error());
    }
    mysql_select_db("mydb", $con);

    $sql="INSERT INTO categories (name, parent_id,description) VALUES
    ('".$_POST['name']."','".$_POST['parent_id']."','".$_POST['description']."')";

    if (!mysql_query($sql,$con)) {
      die('Error: ' . mysql_error());
    } else {
        echo "1 record added";
    }
    mysql_close($con);
}
?>
<html>
<body>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
category: <input type="text" name="name" /><br><br>
parent: <input type="text" name="parent_id" /><br><br>
description: <input type="text" name="description" /><br><br>
<input type="submit"name="submit" value="Submit" />
</form>
</body>
</html>
于 2014-12-15T17:04:58.620 に答える