PHP 不提交没有回显语句的表单数据?
PHP not submitting form data without echo statement?
在测试我的数据库是否会通过表单字段接收用户名时,代码将无法运行,除非我回显错误消息。为什么是这样?我的目标是通过表单字段发送用户名,并在表单字段下方的同一页面上检索用户名列表。
我的 html 用于提交用户名,
<section id="banner">
<div class="content">
<header>
<h2>Add Usernames Here</h2>
<form method="post">
<br><input type="text" name="user_name"><br>
<input type="submit" value="Submit">
</form>
</header>
</div>
用于显示用户名:
<section id="five" class="wrapper style2 special fade">
<div class="container">
<header>
<h2>Added Usernames</h2>
<?php require 'post.php'; ?>
</header>
</div>
</section>
还有我的post.php代码
<?php
//connection
$url = parse_url(getenv("CLEARDB_DATABASE_URL"));
$server = $url["host"];
$username = $url["user"];
$password = $url["pass"];
$db = substr($url["path"], 1);
$conn = new mysqli($server, $username, $password, $db);
//test connection
if(!$conn)
{
echo 'not connected';
}
if(!mysqli_select_db($conn,'heroku_cd6b3866e127c21'))
{
echo 'database not selected';
}
//insert username
$user_name = $_POST['user_name'];
$sql = "INSERT INTO store (user_name) VALUES ('$user_name')";
//test query
if(!mysqli_query($conn,$sql))
{
echo 'not inserted';
}
else {
echo 'inserted';
}
//echo all usernames
mysqli_select_db($db,$conn);
$sql2 = "SELECT * FROM store";
$mydata = mysqli_query('$sql2,$conn');
while($record = mysqli_fetch_array($mydata)){
echo "<br>";
echo $record['user_name'];
}
?>
在我删除 if 语句、检查连接之前,此代码一直有效。
这是一个简单的例子,只有一个页面名为 index.php:
<form action="index.php" method="post">
<br><input type="text" name="user_name">
<br><input type="submit" value="Submit">
</form>
<?php
$username = $_POST["user_name"];
$link = mysqli_connect("127.0.0.1", "root", "", "db12");
mysqli_query($link, "INSERT INTO users (username) values ('$username')");
echo $username;
$query = "SELECT username FROM users";
$result = mysqli_query($link, $query);
/* fetch associative array */
while ($row = mysqli_fetch_array($result)) {
echo $row['username'] . "<br>";
}
/* close connection */
mysqli_close($link);
?>
在生产应用中,始终为插入编写单独的页面,并始终使用准备 http://php.net/manual/en/mysqli.prepare.php
除了那些 if 语句之外,您不是 运行 其他任何地方的查询。
尝试在 $sql
的声明下方添加 $mysqli->query($sql)
您还需要调用这些函数:
mysqli_select_db($conn,'heroku_cd6b3866e127c21')
和
mysqli_query($conn,$sql)
即使它们是否包含在 if 语句中,您仍然需要 select 数据库并向其发送查询。但我不想这样做,我会研究 PDO。
http://php.net/manual/en/book.pdo.php
这些方法因存在 SQLi 漏洞而闻名。
编辑
这行也有错误:
$mydata = mysqli_query('$sql2,$conn');
我认为应该是:
$mydata = mysqli_query($conn,$sql2);
在测试我的数据库是否会通过表单字段接收用户名时,代码将无法运行,除非我回显错误消息。为什么是这样?我的目标是通过表单字段发送用户名,并在表单字段下方的同一页面上检索用户名列表。
我的 html 用于提交用户名,
<section id="banner">
<div class="content">
<header>
<h2>Add Usernames Here</h2>
<form method="post">
<br><input type="text" name="user_name"><br>
<input type="submit" value="Submit">
</form>
</header>
</div>
用于显示用户名:
<section id="five" class="wrapper style2 special fade">
<div class="container">
<header>
<h2>Added Usernames</h2>
<?php require 'post.php'; ?>
</header>
</div>
</section>
还有我的post.php代码
<?php
//connection
$url = parse_url(getenv("CLEARDB_DATABASE_URL"));
$server = $url["host"];
$username = $url["user"];
$password = $url["pass"];
$db = substr($url["path"], 1);
$conn = new mysqli($server, $username, $password, $db);
//test connection
if(!$conn)
{
echo 'not connected';
}
if(!mysqli_select_db($conn,'heroku_cd6b3866e127c21'))
{
echo 'database not selected';
}
//insert username
$user_name = $_POST['user_name'];
$sql = "INSERT INTO store (user_name) VALUES ('$user_name')";
//test query
if(!mysqli_query($conn,$sql))
{
echo 'not inserted';
}
else {
echo 'inserted';
}
//echo all usernames
mysqli_select_db($db,$conn);
$sql2 = "SELECT * FROM store";
$mydata = mysqli_query('$sql2,$conn');
while($record = mysqli_fetch_array($mydata)){
echo "<br>";
echo $record['user_name'];
}
?>
在我删除 if 语句、检查连接之前,此代码一直有效。
这是一个简单的例子,只有一个页面名为 index.php:
<form action="index.php" method="post">
<br><input type="text" name="user_name">
<br><input type="submit" value="Submit">
</form>
<?php
$username = $_POST["user_name"];
$link = mysqli_connect("127.0.0.1", "root", "", "db12");
mysqli_query($link, "INSERT INTO users (username) values ('$username')");
echo $username;
$query = "SELECT username FROM users";
$result = mysqli_query($link, $query);
/* fetch associative array */
while ($row = mysqli_fetch_array($result)) {
echo $row['username'] . "<br>";
}
/* close connection */
mysqli_close($link);
?>
在生产应用中,始终为插入编写单独的页面,并始终使用准备 http://php.net/manual/en/mysqli.prepare.php
除了那些 if 语句之外,您不是 运行 其他任何地方的查询。
尝试在 $sql
$mysqli->query($sql)
您还需要调用这些函数:
mysqli_select_db($conn,'heroku_cd6b3866e127c21')
和
mysqli_query($conn,$sql)
即使它们是否包含在 if 语句中,您仍然需要 select 数据库并向其发送查询。但我不想这样做,我会研究 PDO。
http://php.net/manual/en/book.pdo.php
这些方法因存在 SQLi 漏洞而闻名。
编辑
这行也有错误:
$mydata = mysqli_query('$sql2,$conn');
我认为应该是:
$mydata = mysqli_query($conn,$sql2);