我花了几天时间试图计算如何在我的网页上获取表单数据以插入到forklift数据库mssql上的employee表中。当我单击表单上的提交时,它会刷新页面并建立连接,但数据库中没有数据。
<?php
/* Connect using Windows Authentication. */
$serverName = "EXAMPLE";
$connectionOptions = array("Database"=>"FORKLIFT");
/* Connect using Windows Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionOptions);
if($conn)
{
echo "Connection established.<br />";
}
else
{
echo "Connection could not be established.<br />";
die(print_r(sqlsrv_errors(), true));
}
if(empty($_POST) === false && empty($errors)=== true)
{
//assign form input to variables
$FIRSTNAME = $_POST["FIRSTNAME"];
$LASTNAME = $_POST["LASTNAME"];
$DATEOFBIRTH = $_POST["DATEOFBIRTH"];
$PHONENUMBER = $_POST["PHONENUMBER"];
$ADDRESS = $_POST["ADDRESS"];
/*Insert data.*/
$INSERT_ROW = $query = "INSERT INTO
EMPLOYEE(FIRSTNAME,LASTNAME,DATEOFBIRTH,PHONENUMBER,ADDRESS)
VALUES ('$FIRSTNAME','$LASTNAME','$DATEOFBIRTH','$PHONENUMBER','$ADDRESS')";
$result = sqlsrv_prepare($conn,$query)or die('Error querying MSSQL
database');
sqlsrv_execute($result);
}
?>
HTML
<form name="submit" action="employee.php" method="POST" >
<h2>Register New Member</h2>
<table border="0">
<tr>
<td>FIRSTNAME</td>
<td>
<input type="text" name="FIRSTNAME" id="FIRSTNAME"/>
</td>
</tr>
<tr>
<td>LASTNAME</td>
<td>
<input type="text" name="LASTNAME" id="LASTNAME"/>
</td>
</tr>
<tr>
<td>DATE_OF_BIRTH</td>
<td>
<input type="date" name="DATE_OF_BIRTH" id="DATE_OF_BIRTH"/>
</td>
</tr>
<tr>
<td>PHONENUMBER</td>
<td>
<input type="text" name="PHONENUMBER" id="PHONENUMBER"/>
</td>
</tr>
<tr>
<td>ADDRESS</td>
<td>
<input type="text" name="ADDRESS" id="ADDRESS"/>
</td>
</tr>
<tr>
<td></td>
<td align="right"><input type="submit" name="submit" value="REGISTER"/></td>
</tr>
</table>
答案 0 :(得分:1)
我进行了一些小的改动,但无法测试看 - 运行它,看看结果sql语句是什么样的。我希望它有所帮助。
<?php
if( !empty( $_POST ) && isset( $_POST["FIRSTNAME"], $_POST["LASTNAME"], $_POST["DATE_OF_BIRTH"], $_POST["PHONENUMBER"], $_POST["ADDRESS"] ) ) {
/*
There is no point creating a db connection if a later condition fails
so create the db conn after testing key variables are set
*/
$server = "EXAMPLE";
$options = array( "Database"=>"FORKLIFT" );
$conn = sqlsrv_connect( $server, $options );
/* In production environment do not display actual errors! */
if( !$conn ) die( print_r( sqlsrv_errors(), true ) );
/* as pointed out by @Daniel Rutter, the field is actually called `DATE_OF_BIRTH` */
$FIRSTNAME = $_POST["FIRSTNAME"];
$LASTNAME = $_POST["LASTNAME"];
$DATEOFBIRTH = $_POST["DATE_OF_BIRTH"];
$PHONENUMBER = $_POST["PHONENUMBER"];
$ADDRESS = $_POST["ADDRESS"];
$sql = "INSERT INTO EMPLOYEE
( FIRSTNAME,LASTNAME,DATEOFBIRTH,PHONENUMBER,ADDRESS )
VALUES
( '$FIRSTNAME','$LASTNAME','$DATEOFBIRTH','$PHONENUMBER','$ADDRESS' )";
/* Comment out the following line after running the script and observing the output here */
exit( $sql );
/* I assume that `sqlsrv_prepare` returns either true or false */
$stmt = sqlsrv_prepare( $conn, $sql ) or die( 'Error querying MSSQL database' );
if( $stmt ) sqlsrv_execute( $stmt );
/* debug post vars */
} else { echo 'Error::' . print_r($_POST,true ); }
?>
简要介绍一下各种sqlsrv_*
命令的在线PHP手册,或许你应该尝试这些方法 - 它与给出的一个例子紧密相关 - 尽管它没有经过测试,因为没有要使用的mssql服务器实例。
<?php
if( !empty( $_POST ) && isset( $_POST["FIRSTNAME"], $_POST["LASTNAME"], $_POST["DATE_OF_BIRTH"], $_POST["PHONENUMBER"], $_POST["ADDRESS"] ) ) {
/*
There is no point creating a db connection if a later condition fails
so create the db conn after testing key variables are set
*/
$server = "EXAMPLE";
$options = array( "Database"=>"FORKLIFT" );
$conn = sqlsrv_connect( $server, $options );
/* In production environment do not display actual errors! */
if( !$conn ) die( print_r( sqlsrv_errors(), true ) );
$FIRSTNAME = $_POST["FIRSTNAME"];
$LASTNAME = $_POST["LASTNAME"];
$DATEOFBIRTH = $_POST["DATE_OF_BIRTH"];
$PHONENUMBER = $_POST["PHONENUMBER"];
$ADDRESS = $_POST["ADDRESS"];
$sql = "INSERT INTO EMPLOYEE
( FIRSTNAME, LASTNAME, DATEOFBIRTH, PHONENUMBER, ADDRESS )
VALUES
( ?,?,?,?,? )";
$params=array(
&$FIRSTNAME,
&$LASTNAME,
&$DATEOFBIRTH,
&$PHONENUMBER,
&$ADDRESS
);
/* add the posted variables as an array here as the third arg */
$stmt = sqlsrv_prepare( $conn, $sql, $params ) or die( 'Error querying MSSQL database' );
if( $stmt ) sqlsrv_execute( $stmt );
/* debug post vars */
} else {
echo 'Error::' . print_r( $_POST, true );
}
?>
关于sqlsrc_prepare
的PHP在线手册:
准备执行查询。此功能非常适合准备 将使用不同参数多次执行的查询 值。
和
当您准备一个使用变量作为参数的语句时, 变量绑定到语句。这意味着如果您更新 下次执行语句时变量的值 它将使用更新的参数值运行。对于你的陈述 计划只执行一次,使用sqlsrv_query()。
答案 1 :(得分:1)
我注意到你试图将数据发布到数据库,这实际上并没有在PHP端正确命名,这只会导致与你的DATE OF BIRTH相关的信息首先没有发布,因为它当您声明要检索发布的数据时,必须完全匹配PHP方面。我非常肯定,从内存中你只需要将客户端表单中的名称更改为DATEOFBIRTH,否则你必须将PHP端更改为DATE_OF_BIRTH而不是此,同时将客户端保持为DATE_OF_BIRTH
<input type="date" name="DATE_OF_BIRTH" id="DATE_OF_BIRTH"/>
需要:
<input type="date" name="DATEOFBIRTH" id="DATEOFBIRTH"/>