Php 文本显示不考虑($#u POST[';submit';]))

Php 文本显示不考虑($#u POST[';submit';])),php,mysqli,Php,Mysqli,我对PHP和编码非常陌生,正在努力学习-但我被卡住了,希望有人能指出问题所在- 当我打开我的页面时,我的代码显示文本“Failure”。我的目标是让“Failure”仅在用户输入信息且无法连接到数据库时显示 我使用的是WAMP,我的数据库服务器是MySQL。此外,当我单击“注册”时,我在数据库中没有得到任何结果,也没有错误消息来说明原因 您的连接缺少参数,应该 $connect=mysqli_connect(“主机名”、“用户名”、“密码”、“数据库名”)或die(“连接过程中发生了一些错误”

我对PHP和编码非常陌生,正在努力学习-但我被卡住了,希望有人能指出问题所在-

当我打开我的页面时,我的代码显示文本“Failure”。我的目标是让“Failure”仅在用户输入信息且无法连接到数据库时显示

我使用的是WAMP,我的数据库服务器是MySQL。此外,当我单击“注册”时,我在数据库中没有得到任何结果,也没有错误消息来说明原因


您的连接缺少参数,应该
$connect=mysqli_connect(“主机名”、“用户名”、“密码”、“数据库名”)或die(“连接过程中发生了一些错误”)。mysqli_错误($con))这将包括错误检查

为什么在查询语句中变量前面有@符号,所有变量前面有句点(可能是个愚蠢的问题,如果很抱歉的话)?

一般建议
  • 删除您的
    @
    。符号符号将抑制错误消息。使用它999/1000次是个坏主意
  • 删除您的
    ?>
    ,除非您在此之后实际发布非PHP数据(如HTML)
  • 仅使用PHP存储密码的哈希值从不在数据库中存储明文密码。曾经不,连测试都没有。()
  • 使用PHP
    准备好的语句
    保护自己不受最佳实践的影响并保持最佳实践。 ()
  • 绝不将不合格用户提交的数据插入数据库。如果您使用的是
    准备好的语句
    ,则这只能被接受(但仍然不是明智的imho)始终检查任何HTML
    中给出的数据是否有效()
  • 使用PHP的深入和非常有用的,并使用它给你
  • 不要养成向浏览器输出详细错误的习惯(例如使用
    die()
    语句)
  • 使用它可以在语法和编码风格方面为您提供极大的帮助
  • 检查您的HTML表单是否是
    POST
    ing数据,而不是
    GET
    ting数据。(在堆栈溢出上有大量关于此竞技场中可能出现错误的问题)
  • AUTO_INCREMENT
    MySQL列值(
    id
    )可以在PHP-SQL代码中忽略,它们将由MySQL自己插入
  • 了解PHP操作的基本原理;它如何与HTML交互以及事情发生的逻辑过程顺序

学习的好方法:

我个人的看法 你的代码很糟糕,但没关系。你需要的是一致性。即使是一贯的可怕,也比抽象的可怕要好

您需要一致地形成
if
语句。有时它们有方括号
{…}
,有时没有。这使得正确阅读代码变得更加困难

我个人认为,
isset
是一个糟糕的函数。 我还认为你应该养成使用(和检查)a的习惯


您的代码: 请原谅我没有花费大量的时间和精力将准备好的语句应用于此代码块。这将模糊OP的预期变更,因为它们没有很好地用于准备好的报表


要回答您的具体问题:

访问页面时看到“失败”的原因如下:

echo "Failure";
isset($\u POST['submit'])
为false时,将运行它

你可以更新你的代码,使其看起来像这样,这样你就更接近了,但仍然需要处理与注册相关的其他问题

if (isset($_POST['submit'])) {
    if ($query = mysqli_query("INSERT INTO users (`id`, `username`, `password`, `email`) VALUES ('', '" . $username . "', '" . $password . "', '" . $Email . "')")) {
        echo "Success";
    } else {
        echo "Failure";
    }
} 

当您最初调用该脚本时,很可能没有按下submit按钮,或者是按下了?如果没有,那么请确定,您将输入
else
分支。如果按钮已按下,则需要检查为什么未在
$\u POST
变量中设置该按钮。这取决于您的表单实现,您没有向我们展示……还有一句旁白:您永远不会在服务器端的数据库中存储用户密码。从未。而是使用一个好的散列算法存储密码的散列。然后,在身份验证时,再次对提供的密码进行散列,并比较两个散列是否相等。这样,即使自己的服务器被入侵,用户也不会泄露密码。OP编写的代码没有任何问题。第四个参数是可选的,在代码道歉的下一行中给出,这是在所有4个参数都是必需的情况下给出的。
<?php
require('connect.php');

$username = $_POST['username'];
$password = $_POST['password'];
$repass = $_POST['repassword'];
$Email = $_POST['email'];

if($_POST['CSRF_token'] == $_SESSION['token_value'])     
    {
    /***
     * Check Password values are equal.
     ***/
    if($password == $repass){
        $pwd = password_hash($password,PASSWORD_DEFAULT); 
    }
    else {
        echo "passwords do not match! Nothing saved!";
        die();
    }
    /***
     * Likewise you can also check the Emal is a valid format, etc. etc.
     ***/

    /***
     * Try and insert using procedural MySQLi. 
     * Note if statement brackets.
     ***/
    if($query = mysqli_query("INSERT INTO users ( `username`, `password`, `email`) VALUES ( '".$username."', '".$pwd."', '".$Email."')")){
        echo "Success"; //only echoed if the INSERT succeeds
    }
    else{
        /***
         * Only echoed if the insert failed 
         * AND the form WAS submitted. 
         ***/
        echo "Failure"; 
    }   
} // close your outer if block. 
echo "Failure";
if (isset($_POST['submit'])) {
    if ($query = mysqli_query("INSERT INTO users (`id`, `username`, `password`, `email`) VALUES ('', '" . $username . "', '" . $password . "', '" . $Email . "')")) {
        echo "Success";
    } else {
        echo "Failure";
    }
}