iT邦幫忙

0

PHP 資料庫問題

這是index.php

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<form id="form1" name="form1" method="post" action="insert.php">    <!–用一個表單將變數用post傳遞至insert.php–>

name<input type="text"  size="10" name="name" id="textfield" />

age <input type="text" size="10" name="age" id="textfield" />
<input type="submit" name="button" id="button" value="新增" />

</form>

這是insert.php

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?
$link  =mysqli_connect("localhost","jacky","8834") or die("無法連接".mysql_error()); 

mysqli_select_db($link,"ryohin")or die ("無法選擇資料庫".mysql_error()); // 選擇資料庫

mysqli_query($link, 'SET CHARACTER SET utf8');

mysqli_query($link,  "SET collation_connection = 'utf8_general_ci'");

$sql ="INSERT INTO test (name,age)  VALUES ( NULL ,'$_POST[name]','$_POST[age]')";  //新增資料

mysqli_query($link,$sql)or die ("無法新增".mysql_error()); //執行sql語法

mysql_close($link); //關閉資料庫連結

header( "location:index.php");  //回index.php
?>
不明
【**此則訊息已被站方移除**】
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
海綿寶寶
iT邦大神 1 級 ‧ 2015-01-18 15:42:53
最佳解答
<pre class="c" name="code">$sql ="INSERT INTO test (name,age)  VALUES ( NULL ,'$_POST[name]','$_POST[age]')";  //新增資料

改成

<pre class="c" name="code">$sql ="INSERT INTO test (name,age)  VALUES ( '$_POST[name]','$_POST[age]')";  //新增資料

試看看

看更多先前的回應...收起先前的回應...
jacky4976 iT邦新手 5 級 ‧ 2015-01-18 17:29:59 檢舉


可是我想要讓id 會自動排序 1.2.3.4....

jacky4976 iT邦新手 5 級 ‧ 2015-01-18 17:30:50 檢舉

$sql ="INSERT INTO test (id,name,age) VALUES ( NULL ,'$_POST[name]','$_POST[age]')"; //新增資料

所以我加上了id
給你看我的網頁 http://line.ryohinlife.com/insert.php

加個雙引號試試看

<pre class="c" name="code">
$sql ="INSERT INTO test (id,name,age) VALUES ( NULL ,'$_POST["name"]','$_POST["age"]')"; //新增資料
fillano iT邦超人 1 級 ‧ 2015-01-18 18:16:26 檢舉

加雙引號會有字串剖析的問題啦。

既然你用mysql_error()取得錯誤訊息,那錯誤訊息是什麼?

fillano iT邦超人 1 級 ‧ 2015-01-18 18:18:32 檢舉

另外,id欄位如果設定是primary key,而且設定了auto_increment,在insert的時候可以忽略他,不需要再塞一個null給他。

jacky4976 iT邦新手 5 級 ‧ 2015-01-18 18:27:05 檢舉

沒跑出東西來哈哈

我那個id就是編號 1.2.3.4.5這樣一直排續下去

<pre class="c" name="code">
mysqli_query($link,$sql)or die ("無法新增".mysql_error());

改成

<pre class="c" name="code">
mysqli_query($link,$sql)or die ("無法新增".mysqli_error($link));

看看什麼情形。

jacky4976 iT邦新手 5 級 ‧ 2015-01-18 20:56:29 檢舉

沒東西XD

wiseguy iT邦超人 1 級 ‧ 2015-01-19 00:32:53 檢舉

嚇死我了 .... $_POST 變數居然不經任何處理就直接插進字串中 .... 驚
真是駭客好玩物 ... 汗

fillano iT邦超人 1 級 ‧ 2015-01-19 08:05:25 檢舉
<pre class="c" name="code">mysqli_query($link, 'SET CHARACTER SET utf8');

mysqli_query($link,  "SET collation_connection = 'utf8_general_ci'");

這兩行是否有出錯?你可能要先確定問題出在哪一行程式。

fillano iT邦超人 1 級 ‧ 2015-01-19 10:14:58 檢舉

在 php fiddle 上面測試了一下,這兩行應該不會出問題。還是等施主回覆吧。

新手不懂sql injection有啥好驚嚇的?

0
一級屠豬士
iT邦大師 1 級 ‧ 2015-01-18 18:57:05

補充剛剛費大公的部份.
要遞增的話,就是要設成 NOT NULL AUTO_INCREMENT PRIMARY KEY,
寫了段SQL Command.來測試一下.

<pre class="c" name="code">CREATE TABLE ithelp150118(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(10) NOT NULL,
age TINYINT UNSIGNED NOT NULL
);

INSERT INTO ithelp150118(name, age) VALUES
('大毛', 12),
('二毛', 15),
('三毛', 16);

SELECT *
  FROM ithelp150118
 ORDER BY id;

+----+--------+-----+
| id | name   | age |
+----+--------+-----+
|  1 | 大毛   |  12 |
|  2 | 二毛   |  15 |
|  3 | 三毛   |  16 |
+----+--------+-----+

3 rows in set (0.00 sec)

-- 要insert null 會發生何事呢?

INSERT INTO ithelp150118(id, name, age) VALUES
(NULL, '四毛', 18);

SELECT *
  FROM ithelp150118
 ORDER BY id;

+----+--------+-----+
| id | name   | age |
+----+--------+-----+
|  1 | 大毛   |  12 |
|  2 | 二毛   |  15 |
|  3 | 三毛   |  16 |
|  4 | 四毛   |  18 |
+----+--------+-----+
4 rows in set (0.00 sec)

-- 一樣能insert 進去,也沒出現錯誤訊息,但是被修改了,還是遞增.

INSERT NULL,這樣方式並不建議,在其他資料庫產品,不一定會接受.
甚至MySQL版本不同,也可能會出現不同的反應.
這樣做,多打字,又增加了不確定性.
還是依照標準的作法比較好.

0
jocosn
iT邦新手 4 級 ‧ 2015-01-20 02:16:15

錯誤但沒出現錯誤訊息畫面,你 debug 模式有打開嗎?
檢查一下 error_reporting、log_errors 、display_errors 。
使用 ini_set 設定一下。

我要發表回答

立即登入回答