【问题标题】:Unable to INSERT data into MySQL through HTML form using PHP [duplicate]无法使用 PHP 通过 HTML 表单将数据插入 MySQL [重复]
【发布时间】:2015-12-29 18:09:32
【问题描述】:

这是我的表单:

<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,我可以插入 DB,即手动输入 php 代码中的值,但这不是目标,目标是使用 Form 填充 MySQL DB。任何帮助表示赞赏,谢谢。

【问题讨论】:

  • 如果你是新手,正在学习 php,那就开始学习mysqli OR PDO 因为 mysql 已被弃用
  • 你是对的,谢谢

标签: php html mysql forms


【解决方案1】:

试试下面的查询

 $sql = "INSERT INTO MBR_NFO (MBR_ID,MBR_NM,ATL_NM) VALUES ('$mbr_id', '$mbr_nm','$atl_nm')";

【讨论】:

  • 这行得通,但是,它为 MBR_NM 和 ATL_NM 插入了空白值,PK(MBR_ID) 除外。
【解决方案2】:

您在字符串连接和引号方面遇到问题。尝试以下查询:

$sql = "INSERT INTO MBR_NFO (MBR_ID,MBR_NM,ATL_NM) VALUES('$mbr_id', '$mbr_nm','$atl_nm')";

【讨论】:

    【解决方案3】:

    如果您在数据库上为成员 ID 设置主键和自动增量 所以很简单。你不会在查询中写 mbr_id

    $query="INSERT INTO MBR_NFO (MBR_NM,ATL_NM) VALUES('$mbr_nm','$atl_nm')";

    方法很简单

    如果你不想设置主键和自动增量,试试这个代码

    $query ="INSERT INTO MBR_NFO (MBR_ID,MBR_NM,ATL_NM).VALUES('$mbr_id', '$mbr_nm','$atl_nm')";

    【讨论】:

      【解决方案4】:

      您应该使用准备好的语句(见下文)而不是手动连接查询字符串。但是,由于您是 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)
      

      并且在字符串amitAmit 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();
      

      【讨论】:

      • 谢谢,我尝试了以上所有方法,但没有任何效果,我仍然缺少一些东西。感谢您让我知道 Prep 语句和参数查询,我也会研究这些。
      • @AmitKumar 以何种方式不起作用?您是否收到错误(哪个?)或不良行为?
      猜你喜欢
      • 2016-02-16
      • 2017-05-14
      • 2019-05-12
      • 2018-07-30
      • 2023-03-16
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多