我正在创建一个音乐网站,用户应该能够将艺术家,专辑和歌曲添加到数据库并进行讨论。但是,我无法将用户输入的数据输入到注册表单中以转移到我的"用户"我的数据库中的表。我不确定是什么问题,但我怀疑这是我的语法问题,因为我没有任何数据库连接问题。我一直在寻找几个小时,但我还没有找到解决方案。任何人都可以帮助我吗?
澄清一下:错误是在用户点击"提交"
后,注册表单中的所有信息都没有输入到我的数据库中signup.php:
<!DOCTYPE html>
<html>
<head>
<title>Share QR</title>
<meta name="viewport" content="width=device-width,height=device-height,minimum-scale=1,maximum-scale=1"/>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css" />
<!--<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>-->
<script src="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script>
</head>
<body>
<div data-role="page" id="article1">
<div data-role="header" data-theme="b" data-position="fixed" data-id="footer">
<h1>Articles</h1>
</div>
<div data-role="content">
<p>Article 1</p>
</div>
</div>
<div data-role="page" id="article2">
<div data-role="header" data-theme="b" data-position="fixed" data-id="footer">
<a href="#article1" data-icon="home" data-iconpos="notext">Home</a>
<h1>Articles</h1>
</div>
<div data-role="content">
<p>Article 2</p>
</div>
</div>
<div data-role="page" id="article3">
<div data-role="header" data-theme="b" data-position="fixed" data-id="footer">
<a href="#article1" data-icon="home" data-iconpos="notext">Home</a>
<h1>Articles</h1>
</div>
<div data-role="content">
<p>Article 3</p>
</div>
</div>
<script>
$(document).on
(
'swipeleft',
'.ui-page',
function(event)
{
if(event.handled !== true) // This will prevent event triggering more then once
{
var nextpage = $.mobile.activePage.next('[data-role="page"]');
// swipe using id of next page if exists
if (nextpage.length > 0)
{
$.mobile.changePage
(
nextpage,
{transition: "slide", reverse: false},
true,
true
);
}
event.handled = true;
}
return false;
}
);
$(document).on
(
'swiperight',
'.ui-page',
function(event)
{
if(event.handled !== true) // This will prevent event triggering more then once
{
var prevpage = $(this).prev('[data-role="page"]');
if (prevpage.length > 0)
{
$.mobile.changePage(prevpage, {transition: "slide", reverse: true}, true, true);
}
event.handled = true;
}
return false;
}
);
</script>
</body>
</html>
register.php:
<?php include 'header.php'; ?>
<form class="form" action="register.php" method="POST">
<fieldset>
<label for="firstName">First Name:</label>
<input type="text" name="firstName" placeholder="John Smith">
<br>
<label for="lastName">Last Name:</label>
<input type="text" name="lastName" placeholder="John Smith">
<br>
<label for="email">Email:</label>
<input type="email" name="email" value="some@one.com">
<br>
<label for="username">Username:</label>
<input type="text" name="username" value="helloitsme">
<br>
<label for="password">Password:</label>
<input type="password" name="password">
<br>
<label for="confirmPassword">Confirm Password:</label>
<input type="password" name="confirmPassword">
<br>
<label for="age">Age:</label>
<input type="number" name="age">
<br>
</fieldset>
<fieldset>
<input type="submit" name="submit" value="Register">
</fieldset>
</form>
和db.php:
<?php
session_start();
if ($_POST["password"] != $_POST["confirmPassword"]) {
$_SESSION['signUpBadPassword'] = true;
header('Location: signup.php');
}
// Re use connection stuffs
include "db.php";
// get connection
$conn = DB::connect();
$stmt = $conn->prepare("INSERT INTO users (firstName, lastName, email, username, password, age) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->bind_param(
"sssssi",
$_POST["firstName"],
$_POST["lastName"],
$_POST["email"],
$_POST["username"],
$_POST["password"],
$_POST["age"]
);
$stmt->execute();
// Close the connection
$conn->close();
header('Location: index.php');
?>
答案 0 :(得分:2)
在绑定参数时请检查是否设置了帖子值,即检查以下代码:
formatting_steps(3, 4);
答案 1 :(得分:1)
很抱歉,我无法发表评论......这6个字段是&#39;用户&#39;中唯一的字段。桌子?问题可能来自“非空”。表中的字段没有插入数据且没有默认值。也许我们可以看到表结构?
答案 2 :(得分:1)
$_POST
值始终属于“字符串”类型,因此$_POST["age"]
始终为:
$_POST['age'] !== (int)$_POST['age']
然而,您的类型声明(ssssi
位)声明$_POST["age"]
属于"i"nteger
类型。
因此,要修复您的->bind_param
以反映这一点。最简单的方法是建立:
$_POST['age'] = (int)$_POST['age'];
在您的PHP中,应在标题调用后立即调用exit
或die
,以防止脚本的其余部分执行。例如,在正确的脚本中,它仍将运行执行插入代码,因为在发送标头时,页面的其余部分仍在执行。
另一个重要的注意事项是,您无法阻止表单上的Cross Site Request Forgeries。
如果上述方法无法解决您的问题,请向我们展示您的MySQLi表,以更好地确定插入失败的原因。
答案 3 :(得分:-1)
在查询后使用 die(mysql_error()); ,而不是找到解决方案
$stmt = $conn->prepare("INSERT INTO users (firstName, lastName, email,
username, password, age) VALUES (?, ?, ?, ?, ?, ?)") or die(mysql_error());