这是我的表格:
<html>
<head>
<title>Stats</title>
</head>
<body>
<h2>Member Information Form</h2>
<form action="submit_mbr_nfo.php" method="post">
Member ID <input type ="text" name= "mbrid"/><br>
Member Name <input type="text" name="mbrnm"/><br>
Actual Name <input type="text" name="atlnm"/><br>
<input type="submit" value="Save"/>
</form>
</body>
</html>
这是我的PHP文件:
<?php
//Define database properties in global variables
define('DB_NAME', 'STATS');
define('DB_USER', 'root');
define('DB_PASSWORD', 'Test');
define('DB_HOST', 'localhost');
//store connection props in var
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
//check connection
if (!$link) {
die ('Could not connect to the Database: ' . mysql_error());
}
//map $_POST to vars
$mbr_id = mysql_real_escape_string($link, $_POST['mbrid']);
$mbr_nm = mysql_real_escape_string($link, $_POST['mbrnm']);
$atl_nm = mysql_real_escape_string($link, $_POST['atlnm']);
$sql = 'INSERT INTO MBR_NFO '.'(MBR_ID,MBR_NM,ATL_NM) '.'VALUES ('$mbr_id', '$mbr_nm','$atl_nm')';
mysql_select_db('STATS');
$exe_query = mysql_query( $sql, $link);
?>
这是我的php错误日志:
PHP Parse error: syntax error, unexpected '$mbr_id' (T_VARIABLE) in /Applications/MAMP/htdocs/stats/submit_mbr_nfo.php on line 21
我很新,学习PHP和HTML,我尝试了几种在线解决方案,但到目前为止还没有任何工作。如果我不使用$ _POST,我可以插入数据库,即手动输入php代码中的值,但这不是目标,目标是使用Form填充MySQL DB。感谢任何帮助,谢谢。
答案 0 :(得分:2)
尝试以下查询
$sql = "INSERT INTO MBR_NFO (MBR_ID,MBR_NM,ATL_NM) VALUES ('$mbr_id', '$mbr_nm','$atl_nm')";
答案 1 :(得分:0)
您遇到字符串连接和引号问题。请尝试以下查询:
$sql = "INSERT INTO MBR_NFO (MBR_ID,MBR_NM,ATL_NM) VALUES('$mbr_id', '$mbr_nm','$atl_nm')";
答案 2 :(得分:0)
如果在数据库中为成员标识设置主键和自动增量 所以很容易。你不是在查询中写mbr_id
$ query =&#34; INSERT INTO MBR_NFO(MBR_NM,ATL_NM)VALUES(&#39; $ mbr_nm&#39;,&#39; $ atl_nm&#39;)&#34 ;;
它的简单方法
如果您不想设置主键和自动增量并尝试此代码
$ query =&#34; INSERT INTO MBR_NFO(MBR_ID,MBR_NM,ATL_NM)。价值观(&#39; $ mbr_id&#39;,&#39; $ mbr_nm&#39;,&#39; $ atl_nm&#39;)&#34 ;;
答案 3 :(得分:0)
您应该使用预准备语句(请参阅下文),而不是手动查询查询字符串。但是,既然你是PHP的新手,那么我们首先修复你的代码。这条线
$sql = 'INSERT INTO MBR_NFO '.'(MBR_ID,MBR_NM,ATL_NM) '.'VALUES ('$mbr_id', '$mbr_nm','$atl_nm')';
有几个缺陷。在PHP中,字符串连接是通过点.
运算符完成的,您只使用了一部分运算符。为了构造查询字符串$sql
,您必须添加几个点:
$sql = 'INSERT INTO MBR_NFO (MBR_ID,MBR_NM,ATL_NM) VALUES (' . $mbr_id . ', ' . $mbr_nm . ',' . $atl_nm . ')';
虽然这是有效的 PHP 语法,但它仍无效 SQL 。如果您的用户输入为$mbr_id = 42
,$mbr_nm = 'amit'
,$atl_nm = 'Amit Kumar'
,则在连接后,$sql
看起来像
INSERT INTO MBR_NFO (MBR_ID,MBR_NM,ATL_NM) VALUES (1, amit, Amit Kumar)
并且字符串amit
和Amit Kumar
周围缺少引号。充其量,这会使您的查询无效;最糟糕的是,它会使您的查询prone to injection attacks。因此,使用
$sql = 'INSERT INTO MBR_NFO (MBR_ID,MBR_NM,ATL_NM) VALUES ("' . $mbr_id . '", "' . $mbr_nm . '","' . $atl_nm . '")';
或者,因为在PHP中,strings that are quoted with double quotes中的变量 - 例如评估"my name is $name"
,但不评估'my name is $name'
:
$sql = "INSERT INTO MBR_NFO (MBR_ID,MBR_NM,ATL_NM) VALUES ('$mbr_id', '$mbr_nm,'$atl_nm')";
到目前为止,最佳做法是using prepared statements and parameterized queries:
$con = new PDO('mysql:host=localhost;dbname=STATS', 'root', 'Test');
$stmt = $con->prepare('INSERT INTO MBR_NFO (MBR_ID,MBR_NM,ATL_NM) VALUES (:mbr_id, :mbr_nm, :atl_nm)');
$stmt->bindValue(':id', $mbr_id);
$stmt->bindValue(':mbr_nm', $mbr_nm);
$stmt->bindValue(':atl_nm', $atl_nm);
$stmt->execute();