我一直试图将数据插入数据库,但有一个愚蠢的错误,我看不到。用户表和tilaus表之间还应该有一个连接"INNER JOIN"。然而,我不知道在尝试将一些数据插入tilaus表时是否必须始终添加用户id。
表结构:
CREATE TABLE `tilaus` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tilaaja` varchar(120) NOT NULL,
`kuvaus` date NOT NULL,
`tilauspvm` date DEFAULT NULL,
`aloituspvm` date DEFAULT NULL,
`valmistumispvm` date DEFAULT NULL,
`hyvaksymispvm` date DEFAULT NULL,
`tehtytyo` date DEFAULT NULL,
`tunti` int(3) DEFAULT NULL,
`tarvikkeet` varchar(200) DEFAULT NULL,
`kustannukset` int(5) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`),
KEY `user_id` (`user_id`),
CONSTRAINT `tilaus_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
php代码:
<?php
session_start();
if(!isset($_SESSION['sess_user_id']) || (trim($_SESSION['sess_user_id']) == ''))
{
header('Location: login.html');
exit;
}
//settings
$username = "root";
$password = "";
$hostname = "localhost";
$dbhandle = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL"); //checking connection
echo "Connected to MySQL<br>"; // connection established
$tilaaja = $_GET['tilaaja'];
$tyonkuvaus = $_GET['tyonkuvaus'];
$time = now();
$userid = $_SESSION['sess_user_id'];
echo $tilaaja; //JUST A DUMB TEST.. NOTHING TO WORRY ABOUT
echo $tyonkuvaus; // TESTING IF VAIRABLES ARE GETTING THE DATA ALREADEY OR NOT.
$result = mysql_query("INSERT INTO `tilaus`(`tilaaja`, `kuvaus`, `tilauspvm`, `user_id`)
VALUES ('$tilaaja','$tyonkuvaus','$time','$userid')");
?>
谢谢。
php没有now((函数,它是mysql的函数
所以使用date("Y-m-d H:i:s")
或将NOW()
直接放入查询
像低于
$time = date("Y-m-d H:i:s");
(或(
VALUES ('$tilaaja','$tyonkuvaus',NOW(),'$userid')"
如何使字段tilauspvm
仅为类型date
,您应该使用:
$time = date("Y-m-d");
您的php代码:
<?php
session_start();
if(!isset($_SESSION['sess_user_id']) || (trim($_SESSION['sess_user_id']) == ''))
{
header('Location: login.html');
exit;
}
//settings
$username = "root";
$password = "";
$hostname = "localhost";
$dbhandle = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL"); //checking connection
$tilaaja = $_GET['tilaaja'];
$tyonkuvaus = $_GET['tyonkuvaus'];
$time = date("Y-m-d");
$userid = $_SESSION['sess_user_id'];
$result = mysql_query("INSERT INTO `tilaus`(`tilaaja`, `kuvaus`, `tilauspvm`, `user_id`)
VALUES ('$tilaaja','$tyonkuvaus','$time','$userid')");
?>
将错误报告添加到文件的顶部
error_reporting(E_ALL);
ini_set('display_errors', 1);
。
mysql_*函数从PHP 5.5.0开始就被弃用,不建议用于编写新代码,因为它将来会被删除。相反,应该使用mysqli或PDO_MySQL扩展。
您的表格有:
CONSTRAINT `tilaus_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
这意味着,在tilaus
表中添加记录时,您正在添加user_id
字段。该user_id
是对users
表中的id
字段的引用。这意味着,例如,如果user_id = 5
,则id = 5
应该存在于users
表中。
您正在使用mysql
,它已被弃用,将来将不可用。
此外,谷歌"MySQL注入">以及如何防止它,因为有人现在可以侵入你的数据库并更改或删除任何东西。
试着使用echo mysql_error();
来找出到底出了什么问题。
另外,您可以在插入查询中将UserId
设置为NULL
,只要在该列上设置了主自动递增键,它就会为您创建。
在您的表中,您有默认为null的user_id
,因此答案是"是"。您可以添加不带user_id
的记录,但您需要在user_id
字段中设置null,或者只是避免在查询中提及它。
在您的代码中,如果user_id==null,您将在插入查询中放入一个空字符串(如"(,因此它会将错误作为无效值,因为空字符串与null不同。