簡體   English   中英

HTML / PHP表單不會將數據插入MySQL數據庫

[英]HTML/PHP form doesn't insert data to MySQL Database

我是PHP的新手,我一直在嘗試制作一個小型的Homework Organizer應用程序。

這個想法是,您可以輸入一個主題和描述,並且它將被添加到一個MySQL數據庫中(現在是這樣)。

我創建了一個HTML表單:

<form action="insert.php">
        <label for="subj">Subject:</label>
        <br>
        <input type="text" name="subj">
        <br>
        <label for="desc">Description:</label>
        <br>
        <input type="text" name="desc">
        <br>
        <input type="submit" value="Submit" name="submit">
    </form>

和一些PHP代碼:

<?php
$subject = $_POST['subj'];
$description = $_POST['desc'];
$subject = mysql_real_escape_string($subject);
$description = mysql_real_escape_string($description);

$dbhost = ''; //These are filled in actually
$dbuser = ''; //These are filled in actually
$dbpass = ''; //These are filled in actually
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
    die('Could not connect: ' . mysql_error());
}

$sql = 'INSERT INTO organiser '.
    '(subject,description) '.
    'VALUES ('$subject', '$description')';

mysql_select_db(''); //These are filled in actually
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
    die('Could not enter data: ' . mysql_error());
}
echo "Entered data successfully\n";
mysql_close($conn);
?>

問題在於,HTML表單上“主題”和“描述”框中的輸入不會進入MySQL數據庫。

但是,如果我設置

'VALUES ('$subject', '$description')';

'VALUES ("test", "test")';

有用。

任何幫助表示贊賞! 謝謝!

除了已經給出的關於連接符缺失點的答案之外:

如果表單方法從表單標簽中省略,則表單方法默認為GET方法。

您正在使用<form action="insert.php">等效於
<form action="insert.php" method = "get">不是您想要不需要的。

更改為

<form action="insert.php" method="post">

因為您正在使用POST變量。

這是促成原因'VALUES ("test", "test")'; 有效,而不是相反,因為這兩個變量$subject $description都基於POST變量:

$subject = $_POST['subj'];
$description = $_POST['desc'];

你可以做

$sql = "INSERT INTO organiser (subject,description) VALUES ('$subject', '$description')";

如評論中所述。

要么

$sql = "INSERT INTO organiser (subject,description) VALUES ('".$subject."', '".$description."')";

將錯誤報告添加到文件頂部

error_reporting(E_ALL);
ini_set('display_errors', 1);

這可能表示您的代碼中發現了錯誤。


但是,您的方法可以進行SQL注入 mysqli_*與預處理語句一起使用 ,或將PDO預處理語句一起使用


使用mysqli准備語句方法; 更安全。

<?php 

$DB_HOST = "xxx"; // replace with your own
$DB_NAME = "xxx";
$DB_USER = "xxx";
$DB_PASS = "xxx";

$conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($conn->connect_errno > 0) {
  die('Connection failed [' . $conn->connect_error . ']');
}

// optional to check for empty fields
// if(isset($_POST['submit']) && !empty($_POST['subj'])  && !empty($_POST['desc'])) {
if(isset($_POST['submit'])) {

$subject = stripslashes($_POST['subj']);
$description = stripslashes($_POST['desc']);

$stmt = $conn->prepare("INSERT INTO organiser (`subject`, `description`) VALUES (?, ?)");

$stmt->bind_param('ss', $subject, $description);

    if (!$stmt->execute()) {
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
    }

        else{
          echo "<h2>Success!</h2>";
        }

$stmt->close(); // Statement
$conn->close(); // MySQLi

}

?>

形式:(新)

<form action = "insert.php" method = "post">
        <label for="subj">Subject:</label>
        <br>
        <input type="text" name="subj">
        <br>
        <label for="desc">Description:</label>
        <br>
        <input type="text" name="desc">
        <br>
        <input type="submit" value="Submit" name="submit">
</form>

您忘記了變量周圍的點,並且可以根據變量的內容在其周圍添加一些雙引號:)

'VALUES ("'.$subject.'", "'.$description.'")';

您的問題是因為您在$sql聲明中使用單引號,

$sql = 'INSERT INTO organiser '.'(subject,description) '.'VALUES ('$subject', '$description')';

當您使用單引號時,您是在告訴PHP您希望將引號中的所有內容按字面意義使用。

$age = 20; 
$myAge = 'I am $age years';
echo $myAge; 

自從您使用單引號以來,這回盪了I am $age years

但是,如果您使用雙引號代替,

$age = 20; 
$myAge = "I am $age years";
echo $myAge;

輸出將是

I am 20 years

因此,您的$ sql語句應為(我將其寫在一行上),

$sql = "INSERT INTO organiser (subject,description) VALUES ('$subject', '$description')";
       ^                                                                               ^

如果您回顯$ sql,它將變成類似的東西,

INSERT INTO organiser (subject,description) VALUES ('Your subject', 'Your description') 

您在SQL語句中使用單引號是正確的,您可以在此處閱讀有關此主題的更多信息: 何時使用單引號,雙引號和反引號

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM