无法使用PHP将数据插入我的MySQL数据库

时间:2016-05-02 06:44:53

标签: php mysql database insert-into

我正在创建一个音乐网站,用户应该能够将艺术家,专辑和歌曲添加到数据库并进行讨论。但是,我无法将用户输入的数据输入到注册表单中以转移到我的"用户"我的数据库中的表。我不确定是什么问题,但我怀疑这是我的语法问题,因为我没有任何数据库连接问题。我一直在寻找几个小时,但我还没有找到解决方案。任何人都可以帮助我吗?

澄清一下:错误是在用户点击"提交"

后,注册表单中的所有信息都没有输入到我的数据库中

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');

 ?>

4 个答案:

答案 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中,应在标题调用后立即调用exitdie,以防止脚本的其余部分执行。例如,在正确的脚本中,它仍将运行执行插入代码,因为在发送标头时,页面的其余部分仍在执行。

答案 3 :(得分:-1)

在查询后使用 die(mysql_error()); ,而不是找到解决方案

$stmt = $conn->prepare("INSERT INTO users (firstName, lastName, email, 
username, password, age) VALUES (?, ?, ?, ?, ?, ?)") or die(mysql_error());