1

问题是我只想插入全名/地址。我创建了一个包含以下列的用户表:id(主)、全名(唯一)、地址(唯一)。

这是代码:

<?php $username = "root";
$password = "artislife23";
$hostname = "localhost"; 

//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password) 
or die("Unable to connect to MySQL");
//select a database to work with
$selected = mysql_select_db("test",$dbhandle) 
or die("Could not select examples");?>
<body>

<div class="container">
<div class="content">
<h1><?php if(($selected!=null)){
echo "Database is on lock.";}
if(($dbhandle!=null)){
echo "Connected to MySQL<br>";
}?></h1>
<form method="post" action="input.php">
<tr><td>Name</td><td><input type="text" name="fullname" size="20"></td></tr>
<tr><td>Address</td><td><input type="text" name="address" size="40"></td></tr>
<tr><td></td><td align="right"><input type="submit" value="Submit"></td>

这是 input.php

<?php
$postr="INSERT INTO users 
(fullname, address) VALUES('$_POST[fullname]','$_POST[address]')";
$result = mysql_query($postr);
echo "$result";?>

我所看到的只是一个空白条目被插入到表中。我在这里做错了吗?我想要的只是在这里成功地将表单数据插入到我的用户表中。

4

2 回答 2

0
$_POST['fullname']

您的帖子中缺少引号。

于 2013-09-11T17:58:58.870 回答
0

它不起作用的原因是 PHP 不会像处理变量一样在字符串中扩展数组,而没有一些我永远记不起的奇怪语法。改变:

$postr="INSERT INTO users (fullname, address) VALUES('$_POST[fullname]','$_POST[address]')";

至:

$postr="INSERT INTO users (fullname, address) VALUES('".$_POST['fullname']."','".$_POST['address']."')";

您还缺少数组键上的引号。

补充说明:

  1. 你的代码对 SQL 注入是开放的,如果我输入我的名字Bobby'; DROP TABLE users;--猜猜会发生什么?
  2. mysql_*()函数已弃用,请花时间学习 PDO 或 MySQLi。它们具有称为“参数化查询”的简洁思路,可以让您轻松避免 SQL 注入,就像我上面提到的那样。
  3. 假设一个人的全名或地址对他们来说是唯一的是一个设计错误,不要在“现实世界”项目中这样做。

编辑

在字符串中嵌入数组的替代语法:

$string = "Fee fie {$foo['bar']}.";
于 2013-09-11T17:59:23.817 回答