Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用MySqli/PHP插入表单数据?_Php_Mysql_Forms_Mysqli - Fatal编程技术网

如何使用MySqli/PHP插入表单数据?

如何使用MySqli/PHP插入表单数据?,php,mysql,forms,mysqli,Php,Mysql,Forms,Mysqli,我正在尝试使用mysqli,php插入表单数据。我遇到的问题是,它在表中插入“?”作为表单值,而不是我在表单中键入的内容?我知道我在某个地方出错了,但我没办法弄明白 我的另一个问题是:像这样使用mysqli语句从数据库中插入或选择数据是否安全,因为我猜$\u POST会成为注入攻击的威胁,。现在我在这里写的内容是否足以防止攻击,或者我是否需要添加更多内容 任何建议都会大有帮助 这是我的密码 index.php <?php session_start();

我正在尝试使用mysqli,php插入表单数据。我遇到的问题是,它在表中插入“?”作为表单值,而不是我在表单中键入的内容?我知道我在某个地方出错了,但我没办法弄明白

我的另一个问题是:像这样使用mysqli语句从数据库中插入或选择数据是否安全,因为我猜$\u POST会成为注入攻击的威胁,。现在我在这里写的内容是否足以防止攻击,或者我是否需要添加更多内容

任何建议都会大有帮助

这是我的密码

index.php

<?php

        session_start();
        include('db.php');

?>

<!DOCTYPE html>

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <link rel="stylesheet" type="text/css" href="style.css"/>

</head>

<body>


<?php

    if(isset($_POST['login']) && $_POST['login'] == 'Login') {
        $loginEmail = $_POST['loginEmail'];
        $loginPassword = $_POST['loginPassword'];

        $query = $db->prepare("INSERT INTO dbname(password,email) VALUES ('?','?');");
        $query->bind_param("ss",$loginEmail,$loginPassword);
        $query->execute();

    }         
    ?>

        <div id="login">            
            <strong>Login</strong>

            <br/><br/>

            <form action = "<?php echo $_SERVER['PHP_SELF'];?>" method="POST">
                <table style="width:500px">                        
                    <tr>
                        <td><input type="text" name="loginEmail" placeholder = "Email" required/><br/></td>
                    </tr>                    
                    <tr>
                        <td><input type="password"  name="loginPassword" placeholder = "Password" required/><br/></td>

                    </tr>
                </table>

                <input style="font-weight: bold; width: 70px; height: 25px; border-radius: 5px;" type="submit" name="login" value="Login"/>
            </form>
        </div>       
</body>    
</html>
<?php

        $host = 'host';
        $user = 'user';
        $password = 'password';
        $database = 'dbname';

        $db = new mysqli($host, $user, $password, $database);

        if($db->connect_errno > 0){
            die('Unable to connect to database ['.$db->connect_errno.']');
        }
?>

使用

而不是

$db->prepare("INSERT INTO users(password,email) VALUES ('?','?');");

注:顺序很重要:在您的
bind_param()
中,电子邮件和密码的顺序与查询中的顺序相反。

删除插入查询中的引号

$query = $db->prepare("INSERT INTO dbname(password,email) VALUES (?,?);");
另外,我建议您使用和之类的函数

使用:


准备好的语句中有语法错误,未检查错误。然后你用纯文本作为密码。如果你还活着或者打算继续活着,不要。使用
密码\u hash()
。您不应该在数据库中存储纯文本密码。请参阅和@fred:您的意思是密码\u散列($loginPassword)?请查阅@riggsfully提供给您的链接。都在里面;-)下面你也有一个上浮的答案。(彼得的)。
$query->execute()
=>
如果(!$query->execute()){trigger_error(“有一个错误…)“$db->error,E_USER_WARNING)}
你会看到语法错误,顺便说一句。@BishwaroopChakraborty Ref:
trim()
密码?另外,为什么在使用预先准备好的语句时还要使用额外的无用函数呢!但是trim当然可以使用。看看这个堆栈上的问答,你就会明白我的意思了。另外,如果用户的密码或用户中有\,则您发布的内容可能会失败。无论如何都不应操纵密码数组。
$query = $db->prepare("INSERT INTO dbname(password,email) VALUES (?,?);");
$loginEmail    = trim (stripslashes( $_POST['loginEmail'] ));
$loginPassword = stripslashes( $_POST['loginPassword'] );