我正在尝试将新用户插入我的数据库但是php总是失败,issets总是返回false所以它没有插入,我没有ideia为什么,我打赌它是一个基本的东西要修复,我有点frustated ..
HTML PAGE
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="stylesheet" href="./css/bootstrap.min.css" >
<link rel="stylesheet" href="./css/orlando.css" >
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content=" Pagina Inicial ">
</head>
<body>
<div id="wrapper">
<!-- Sidebar -->
<nav class="navbar navbar-inverse navbar-fixed-top" id="sidebar-wrapper" role="navigation">
<ul class="nav sidebar-nav">
<li class="sidebar-brand">
<a href="#">
<img src="./img/logo2.png" alt="">
</a>
</li>
<li>
<a href="index.html">Login</a>
</li>
<li>
<a href="register.html">Register</a>
</li>
<li>
<a href="about.html">About</a>
</li>
<li>
<a href="profile.html">Profile</a>
</li>
<li>
<a href="matchhistory.html">Match History</a>
</li>
<li>
<a href="leaderboard.html">Leaderboard</a>
</li>
<li>
<a href="contacts.html">Contacts</a>
</li>
<li>
<a href="#">Logout</a>
</li>
</ul>
</nav>
<!-- /#sidebar-wrapper -->
<!-- Page Content -->
<div id="page-content-wrapper">
<nav class="navbar navbar-default navbar-static-top">
<div class="container" style="width: 100%;">
<button type="button" class="hamburger is-closed" data-toggle="offcanvas">
<span class="hamb-top"></span>
<span class="hamb-middle"></span>
<span class="hamb-bottom"></span>
</button>
<div class="navbar-header">
<a class="navbar-brand" href="./index.html"target="_self" style="margin-left: 55px;"> <img src="./img/logo.png" alt=""></a>
</div>
</div>
</nav>
<form class="form-signin" action="register.php">
<h2 class="form-signin-heading">Register</h2>
<input type="text" class="form-control" name="name" placeholder="name" required="" autofocus="" />
<input type="text" class="form-control" name="nickname" placeholder="nickname" required="" autofocus="" />
<input type="text" class="form-control" name="email" placeholder="email" required="" autofocus="" />
<input type="password" class="form-control" name="password" placeholder="password" required=""/>
<label class="checkbox">
<input type="checkbox" value="remember-me" id="rememberMe" name="rememberMe"> Remember me
</label>
<button class="btn btn-lg btn-primary btn-block" type="submit">Register</button>
</form>
<!-- /#page-content-wrapper -->
</div>
</div>
<!-- /#wrapper -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="./js/bootstrap.min.js"></script>
<script src="./js/master.js"></script>
</html>
PHP SCRIPT:
<?php
define("DB_HOST", "");
define("DB_USER", "");
define("DB_PASSWORD", "");
define("DB_DATABASE", "");
$con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE) or die('Oops');
//verificar se a ligação foi feita com sucesso
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
if (isset($_POST['name']) && isset($_POST['nickname']) && isset($_POST['email']) && isset($_POST['password'])) {
echo "isset";
$name = $_POST['name'];
$nickname = $_POST['nickname'];
$email = $_POST['email'];
$password = $_POST['password'];
$query = "INSERT INTO users(name, nickname, email, password) VALUES ('$name', '$nickname', '$email', '$password' )";
$insert = mysqli_query($con, $query) or die ('Error');
if ($insert) {
echo "sucess";
} else {
echo "RIP";
}
} else {
echo "error";
}
?>
它回应了&#34;错误&#34;。
感谢。
答案 0 :(得分:2)
您需要在表单中添加method="post"
..
所有条件失败的原因是因为$_POST
为空。由于默认表单方法为GET
,因此您不会发布任何数据。
答案 1 :(得分:0)
您需要使用try {} catch {}以避免在出现错误时泄露密码。
class bd{
static function connexion(){
try{
//LOCAL
$dsn = "mysql:host=localhost;dbname=name";
$usr = "username";
$pass = "password";
$options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO($dsn, $usr, $pass);
$bdd->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $bdd;
}catch(Exception $e){
echo $e->getMessage();
}
}
static function execQuery($bdd, $query){
try{
$req = $bdd->prepare($query);
$req->execute();
$result = $req->fetchAll(PDO::FETCH_ASSOC);
$req->closeCursor();
return $result;
} catch( PDOEXception $e ) {
echo $e->getMessage(); // display bdd error
exit();
}
}
}
$name = $_POST['name'];
$nickname = $_POST['nickname'];
$email = $_POST['email'];
$password = $_POST['password'];
$bdd = bd::connexion();
$req = $bdd->prepare("INSERT INTO users(name, nickname, email, password) VALUES ('$name', '$nickname', '$email',
'$ password');“);
答案 2 :(得分:0)
error
短信表示其未读取isset()
条件。您可以尝试替换并执行单个条件,方法是先在按钮上添加name
属性:
<button class="btn btn-lg btn-primary btn-block" name="register" type="submit">Register</button>
然后条件:
if(isset($_POST['register'])){
做一个正确的error reporting而不是放一个纯文本。
您使用的某些列名称可能是reserved word in MySQL(即name
和password
)。
因此,您可以使用反向标记(`)来封装这些列名称:
$query = "INSERT INTO users(`name`, `nickname`, `email`, `password`) VALUES ('$name', '$nickname', '$email', '$password' )";
mysqli_*
API,因此您不必将原始数据绑定到查询中。method="POST"
代码<form>
属性
答案 3 :(得分:0)
这不是您使用脚本的唯一问题。
首先,您应该尝试使用类并使用PDO,因此如果您需要更改数据库,您的脚本可以非常容易地更新到新数据库,它可以为您的脚本增加灵活性。 The PHP Data Objects (PDO) extension
其次,你应该永远不要插入你从用户那里获得的SQL语句数据,然后再进行sql注入。 你可以用PDO :: prepare
轻松完成PDO ::制备
我更喜欢使用此代码,它更清晰,更易于管理:
if("POST" == $_SERVER['request_method']){
}
并且不要使用你的很长的一行:
if (isset($_POST['name']) && isset($_POST['nickname']) && isset($_POST['email']) && isset($_POST['password'])) {
关于你的问题,你得到一个错误,你忘了把你的表格
method =“POST”