我有一个现有的表,我正在尝试从表单提交中向其插入数据。
我想我需要另一双眼睛来查看我的代码。它有一个问题,在这一点上我不确定是什么。
我填写了表格,它似乎提交了,我检查了表格,但我什么也没得到。不插入任何数据。
如果某些值现在未使用,这会阻碍将数据插入到表中吗?无论如何,不应该插入表单上的表单输入吗?我尝试仅使用表单中的值,但这仍然不起作用。
例如,现在表单输入仅用于第一个、最后一个、标题、流派、关于和图片。其余的仅存在于表中。目前无法输入其余字段的数据。
希望有人有解决方案?
$servername = "server";
$username = "user";
$password = "pass";
$dbname = "db";
if (isset($_POST['submit'])){
$conn = mysqli_connect($servername,$username,$password,$dbname);
if (!$conn) {
die("Connection failed: " . mysqli_error());
}
$first = mysqli_real_escape_string($conn, $_POST['First']);
$last = mysqli_real_escape_string($conn, $_POST['Last']);
$title = mysqli_real_escape_string($conn, $_POST['Title']);
$storylink = mysqli_real_escape_string($conn, $_POST['StoryLink']);
$genre = mysqli_real_escape_string($conn, $_POST['Genre']);
$about = mysqli_real_escape_string($conn, $_POST['About']);
$link = mysqli_real_escape_string($conn, $_POST['Link']);
$picture = mysqli_real_escape_string($conn, $_POST['Picture']);
$alt = mysqli_real_escape_string($conn, $_POST['ALT']);
$sql = "INSERT INTO ContrTemp (`First`,`Last`,`Title`,`StoryLink`,`Genre`,`About`,`Link`,`Picture`,`ALT`)
VALUES ('$first','$last','$title','$storylink','$genre','$about','$link','$picture','$alt')";
mysqli_query($conn, $sql) or die('Error: ' . mysqli_error($conn));
mysqli_close($conn);
}
下面是表单中的一个输入字段。其他的几乎相同。
<input type="text" id="ContrTitle" name="Title" placeholder="Title" class="inputFields" style="width:650px;" />
输入中的名称是否有问题?
SQL 表结构:
CREATE TABLE IF NOT EXISTS `ContrTemp` (
`ID` int(5) NOT NULL AUTO_INCREMENT,
`First` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
`Last` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
`Title` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`StoryLink` varchar(140) COLLATE utf8_unicode_ci NOT NULL,
`Genre` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`About` varchar(2000) COLLATE utf8_unicode_ci NOT NULL,
`Link` varchar(125) COLLATE utf8_unicode_ci NOT NULL,
`Picture` varchar(500) COLLATE utf8_unicode_ci NOT NULL,
`ALT` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
现在我实际上正在访问数据库,显示一条记录,但没有插入任何数据。以前,根本没有插入任何记录。
您可以尝试使用此方法来插入数据
$sql = 'INSERT INTO ContrTemp (First,Last,Title,StoryLink,Genre,About,Link,Picture,ALT) VALUES ("'.$first.'","'.$last.'","'.$title.'","'.$storylink.'","'.$genre.'","'.$about.'","'.$link.'","'.$picture.'","'.$alt.'")';
我认为
你做得很好,但最后一次尝试将这些符号 [反引号] ' 放在你的字段周围,以了解 mysql 它们只是字段。
$sql = "INSERT INTO ContrTemp (`First`,`Last`,`Title`,`StoryLink`,`Genre`,`About`,`Link`,`Picture`,`ALT`)
VALUES ('$first','$last','$title','$storylink','$genre','$about','$link','$picture','$alt')";
您的mysqli_error()语法不正确,您需要指定连接,因此mysqli_error($conn)
正确反馈SQL错误。正如Mitkosoft在评论中提到的,您的一些列名是MySQL关键字。养成始终将列名括在反引号中的好习惯。
所以:
$sql = "INSERT INTO ContrTemp (`First`,`Last`,`Title`,`StoryLink`,`Genre`,`About`,`Link`,`Picture`,`ALT`)
VALUES ('$first','$last','$title','$storylink','$genre','$about','$link','$picture','$alt')";
mysqli_query($conn, $sql) or die('Error: ' . mysqli_error($conn));
此外,您不需要选择带有mysqli_select_db($conn,$dbname);
的db,因为数据库是在上面的登录命令mysqli_connect
选择的。
进一步查询:
- 是否允许数据库访问帐户插入到此数据库?
- 您可以使用诸如PHPMyAdmin,MySQL Workbench(或用于查看数据库的任何界面)之类的界面将表单中相同的数据直接插入数据库吗?
我希望这和我上面提供的代码一样简单,因此我没有提到这段代码被用作WordPress模板的一部分。我不认为这会成为一个问题,因为模板非常轻量级。
话虽如此,我只是简单地将处理数据插入的 php 代码块放在模板的顶部。像魅力一样工作..