这是我的代码:
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = "INSERT INTO together (`First Name`,`Last Name`, `Email id`,'Password')
VALUES ( '$_POST[First name]', '$_POST[Last name]', '$_POST[Email_id]','$_POST[Password]')";
mysql_select_db('test');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not enter data: ' . mysql_error());
}
echo "You have successfully singed up for together \n";
mysql_close($conn);
?>
但是当我运行它时,我收到以下错误:
( Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting ']' in C:\wamp\www\MyProjects\Sign_up.php on line 11)
请帮我修理一下。
答案 0 :(得分:1)
在INSERT查询中将'Password'
更改为“密码”。此外,$_POST[First name]
无法使用 - 您需要致电:$_POST['First name']
(带引号)
此外,不建议使用mysql_*
函数 - 它已过时(请参阅 red box )并且不安全。请改用PDO或MySQLi。
以下是使用PDO的示例:
$dbh = new PDO("mysql:host=$hostname;dbname=test", $username, $password);
$stmt = $dbh->prepare("INSERT INTO together (`First Name`,`Last Name`, `Email id`,'Password')
VALUES (:fname, :lname, :email_id, :pwd)") ;
/*** bind the paramaters ***/
$stmt->bindParam(':fname', $fname, PDO::PARAM_STR);
$stmt->bindParam(':lname', $lname, PDO::PARAM_STR);
$stmt->bindParam(':email_id', $email_id, PDO::PARAM_INT);
$stmt->bindParam(':pwd', $pwd, PDO::PARAM_STR);
/*** execute the prepared statement ***/
$stmt->execute();
/*** fetch the results ***/
$result = $stmt->fetchAll();
/*** loop of the results ***/
foreach($result as $row)
{
echo $row['`First Name`'].'<br />';
...
答案 1 :(得分:1)
伙计,你需要在数组中执行此操作:
$_POST["Email_id"]
此外,查询sql中的字段不需要“`”。就好像你真的用名字中的空格创建了字段
答案 2 :(得分:1)
你不只是忘记了[]
之间的引用吗?在:( '$_POST[First name]', '$_POST[Last name]', '$_POST[Email_id]','$_POST[Password]')
答案 3 :(得分:0)
变量替换不适用于数组值,正如您在此处输入的那样。如果您不想使用连接,则需要使用{ }
包装每个数组值,如下所示:
$sql = "INSERT INTO together (`First Name`,`Last Name`, `Email id`,'Password')
VALUES ( '{$_POST[First name]}', '{$_POST[Last name]}', '{$_POST[Email_id]}','{$_POST[Password]}')";
请参阅http://php.net/manual/en/language.types.string.php
但是,您的代码存在多个问题。对于初学者,mysql_*
函数已被弃用,因此您不应在新代码中使用它们。已有替代品,即MySQLi和PDO库。您还应永远在查询中使用原始表单输入;谷歌“SQL注入”了解原因。 PHP有一个过滤器库,可用于清理输入:http://www.php.net/manual/en/filter.filters.sanitize.php
答案 4 :(得分:0)
应该是:
$sql = "INSERT INTO together (`First Name`,`Last Name`, `Email id`,`Password`)
VALUES ( '$_POST[First name]', '{$_POST['Last name']}', '$_POST[Email_id]','$_POST[Password]')";
由于数组键包含空格,因此不能使用简单插值,需要将其放在引号中,这意味着必须在变量周围使用{...}
。
或者如果输入字段的实际名称是name="Last_name"
,那么您需要包含下划线:
$sql = "INSERT INTO together (`First Name`,`Last Name`, `Email id`,`Password`)
VALUES ( '$_POST[First name]', '$_POST['Last_name']', '$_POST[Email_id]','$_POST[Password]')";