iT邦幫忙

0

透過PHP INSERT DATA 但是資料沒進入資料庫

問題: 試了很多天,沒辦法透過PHP 完成插入DATA的工作,瀏覽器執行的時候確實有清除使用者輸入的表單,猜想應該是POST 行為成功?,但回訪資料庫端確實沒資料,新手想不到問題在那,求解?

己經處理的動作
ADMIN 權限全開/允許遠端登入/ACCOUNT 資料表允許ADMIN 操作

驗證資料是不是有進入資料庫方式
use member;
select * fROM account where 'name' like '%';
-----code------

<?php
    //connect to database
    $db = mysqli_connect("localhost","admin","*","member");
	if(isset($_post['register_btn'])){
		$name = mysql_real_escape_string($_post['name']);
		$email = mysql_real_escape_string($_post['email']);
		$password = mysql_real_escape_string($_post['password']);
			mysql_query("INSERT INTO account(name, email, password) VALUES('$name', '$email', '$password')");
			echo 'insert 1 record';
    }
?>

<!Doctype html>
<html>
    <Title>會員註冊</Title>
    <body>
    <div class="header">
    <h1>會員註冊</h1>
    <form method="post" action="register.php">
        <table>
            <tr>
            <td>使用者名稱:</td>
            <td><input type="text" name="name" class="textInput"></td>
            </tr>
            <tr>
            <td>E-Mail:</td>
            <td><input type="text" name="email" class="textInput"></td>
            </tr>
            <tr>
            <td>密碼:</td>
            <td><input type="text" name="password"" class="textInput"></td>
            </tr>
                       <tr>
            <td></td>
            <td><input type="submit" name="register_btn" value="Register"></td>
            </tr>
        </table>
    </form>
  
    </div>
    </body>
</html>
1
海綿寶寶
iT邦大神 1 級 ‧ 2020-04-08 11:58:32
最佳解答

為什麼 connect 就用 mysqli_connect
query 卻不用 mysqli_query 而用 mysql_query ?

拿以下這個範例去改著用吧

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";

if (mysqli_query($conn, $sql)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?> 

資料來源

看更多先前的回應...收起先前的回應...
KYC World iT邦新手 5 級 ‧ 2020-04-08 13:48:55 檢舉

謝謝,
抱歉個人比較笨,請教$sql 也是如同$_get一樣是PHP 指令?

$sql 是自己取的「變數」名字
$_get 是「專有名詞」請看[官方說明](https://www.php.net/manual/en/reserved.variables.get.php)
KYC World iT邦新手 5 級 ‧ 2020-04-08 16:29:23 檢舉

收到,啃書去!

KYC World iT邦新手 5 級 ‧ 2020-04-10 09:27:03 檢舉

謝謝大大,昨天試作已經確認可以用了。

問題解決了的話
記得來選最佳解答
把這個問題結案

1
一級屠豬士
iT邦大師 1 級 ‧ 2020-04-08 11:42:20

MySQL 保留字

https://dev.mysql.com/doc/refman/8.0/en/keywords.html

table , column 的名稱最好避掉保留字.若堅持一定要使用,就要使用 ` `包起來,
不過這樣是會比較麻煩.

另外最好是能夠把執行 query 後,MySQL 回覆的狀況做判斷.

換一本新一點的書吧, MySQLi 已經是很久以前的東西了.幾乎來這裡問PHP的新手,
都會被提醒要換PDO.
不過以我的觀察,很多新手幾乎還沒撐到換PDO , 就陣亡消失了.
祝你好運,加油!

江山如此多嬌,引無數英雄競折腰
/images/emoticon/emoticon73.gif

江山如此多嬌
https://ithelp.ithome.com.tw/upload/images/20200408/20050647DGm9MV44dJ.jpg

KYC World iT邦新手 5 級 ‧ 2020-04-08 14:00:40 檢舉

呃....今天第一次知道PDO這東西....再去國圖找找...感謝.

1
浩瀚星空
iT邦超人 1 級 ‧ 2020-04-08 13:17:13

上面兩位大神已經教你了。
我就不再多說什麼了。

我先不論你要不要換pdo啥的。
你的sql本身就有問題了。

INSERT INTO account(name, email, password) VALUES

光這一段就能看出一個問題。你的表名跟欄位宣告之間並沒隔開一個空格。
會造成將其當一個函數使用。

理論上來說,你因該會得到一個錯誤。
先學學一下海綿寶寶給你的程式碼。
然後再去找pdo相關的東西。改掉使用mysqli的使用方式。

看更多先前的回應...收起先前的回應...
KYC World iT邦新手 5 級 ‧ 2020-04-08 13:46:44 檢舉

謝謝大神指教

dragonH iT邦超人 6 級 ‧ 2020-04-08 15:52:07 檢舉

光這一段就能看出一個問題。你的表名跟欄位宣告之間並沒隔開一個空格。
會造成將其當一個函數使用。

應該是不會影響唷

img

KYC World iT邦新手 5 級 ‧ 2020-04-08 16:33:34 檢舉

如果沒問題?請問會不會是那個設定我還需要確認的?例如php.ini?

dragonH iT邦超人 6 級 ‧ 2020-04-08 16:41:46 檢舉

jerrychiang

照著海綿寶寶給你的 code 去改

至少看的到錯誤訊息

dragonH
不要隨便教偏門的,這種東西他未來會懂。
且你說的也並非是完全正確。

當用到函數名的話就會發生錯誤。
本來就不該這樣寫的。只是mysql嚴格度不強。
有時情況可以過。

不要隨便教新手這樣沒問題。要告訴他正規的做法。

dragonH iT邦超人 6 級 ‧ 2020-04-09 11:03:54 檢舉

情況1

以 mysql 保留字 來命名 table

img

會無法建立

所以也就不會有 因為沒空格

就把 table name 當作函數的問題

因為 table 就已經建不起來了

情況2

有同名stored function的情況下

img

table name 前有空格

img

table name 前沒有空格

img

結果

img

兩者都成功

應該只有這兩種情況吧

我非常同意要加空格的作法

因為我平常也是這樣寫

但是我認為需要建立在實際的情況上

不然現在網路那麼發達

很容易造成不那麼正確的訊息一直傳播下去

(不然我也很想說寫 js 不加 ; 會 error 跟一定要用 eslint XD

/images/emoticon/emoticon48.gif

建立一個sum的表,內有id p1 p2 p3都是int
然後再去試試如下兩個語法試試

INSERT INTO sum(id,p1,p2,p3) VALUES (null,1,2,3);
INSERT INTO sum (id,p1,p2,p3) VALUES (null,1,2,3);
INSERT INTO `sum`(id,p1,p2,p3) VALUES (null,1,2,3);

其實第一個就會掛了。其它兩個都可以正常運行。
或許你會說這是保留字的問題。
但你無法去說為何第二個不會有事。

當然,我的說法不明確也是事實。但這是我故意的。
如果你有注意到。我是說「你"因該"會得到一個錯誤」
其就是代表了,也有可能不會有錯誤。
借此來引導新手來追問更多的問題跟知道他的實作情況。
如果今天是由他來說出來沒錯誤訊息。
這就是代表他有心了解及追求問題的真相。

且我對他說的也並不是不實在的錯誤訊息。
我也用上面的例子來証明我說的沒有錯。

記得一件事
「錯誤的用法可以使用,並不是代表它是對的。只是情況允許沒事而已」

千萬不要有「沒事就這樣用吧」。你會有除不完的bug。

dragonH iT邦超人 6 級 ‧ 2020-04-09 11:57:06 檢舉

既然我們的說法都有漏洞

那就這樣吧

反正他看完我們的討論應該也差不多懂了XD

KYC World iT邦新手 5 級 ‧ 2020-04-10 00:10:38 檢舉

今天有再啃一次資料,確實SQL 對語法表示沒有其他程式語言要求的嚴格,往後這點會再注意的,謝謝二位大大

我要發表回答

立即登入回答