文本显示无论($ _POST ['提交'])

时间:2018-05-24 19:03:19

标签: php mysqli

我对PHP和编码非常陌生,我正在努力学习 - 但我被困住了,希望有人可以指出错误的原因 -

我的代码显示文字"失败"一打开我的页面。我的目标是让"失败"仅在用户输入信息时显示,并且无法连接到数据库。

我正在使用WAMP,我的数据库服务器在MySQL中。另外,当我点击"注册"我没有在我的数据库中获得任何结果 - 并且没有错误消息来指示原因。

php

<?php
require('connect.php');


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


if(isset($_POST['submit']))     

    {
    if($query = mysqli_query("INSERT INTO users (`id`, `username`, `password`, `email`) VALUES ('', '".$username."', '".$password."', '".$Email."')"))

        echo "Success";
}else{
    echo "Failure";
    }   
?>

database

<?php

$connect = mysqli_connect("localhost", "root", "") or die("Couldn't connect to server");
    mysqli_select_db($connect, "php_forum") or die("Couldn't connect to database");


?>

请帮忙!如果我没有解释发生的事情,请告诉我

3 个答案:

答案 0 :(得分:1)

回答您的具体问题:

你看到的原因&#34;失败&#34;访问该页面是这样的:

echo "Failure";

isset($_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";
    }
} 

答案 1 :(得分:0)

一般建议

  • 删除@。 &符号抑制错误消息。使用它999/1000次是一个坏主意。
  • 删除?>,除非您在此之后实际发布非PHP数据(例如HTML)
  • 仅使用PHP password_hash存储密码的哈希值。 从不在您的数据库中存储明文密码。永远。不,甚至没有测试。 (Ok, How do I do this?
  • 使用PHP Prepared Statements保护自己免受SQL Injection attacks最佳实践的影响。 (How?
  • 从不将不合格的用户提交的数据插入您的数据库。如果您使用Prepared Statements,这只能是可接受的(但仍然不是明智的)。 始终检查任何HTML <form>中提供的数据是否有效(Rough guide to Prepard Statements)。
  • 深入使用PHP,非常有帮助Error Logging system,并使用它来为您feedback on your scripts
  • 养成向浏览器输出详细错误的习惯(例如使用die()语句)。
  • 使用a proper IDE可以帮助您极大地使用语法和编码样式。
  • 检查您的HTML表单是POST数据而不是GET数据。 (关于Stack Overflow的问题很多关于此竞技场中的可能错误)。
  • AUTO_INCREMENT MySQL列值(id)可以在PHP SQL代码中被忽略,它们将由MySQL自己插入。
  • 了解PHP运作的基本原理;它如何与您的HTML以及事情发生的逻辑流程顺序进行交互。

学习的好方法:

我的个人观点

你的代码很糟糕,但没关系。您需要的是一致。即使是一贯可怕的,也比抽象的可怕更好。

您需要始终如一地形成if语句。有时它们有括号{...},有时它们没有。isset。这使得正确读取代码变得更加困难。

我个人认为<?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. 是一个可怕的功能。 我也认为你应养成使用(和检查)CSRF token的习惯。

您的代码:

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

function drawChart () {
      $.ajax({
          url: 'Temp.ESP',
          type: 'get',
          success: function (txt) {
              var dataArray = [['Name', 'Date']];
              var txtArray = txt.split('\n');
              for (var i = 0; i < txtArray.length; i++) {
                  var tmpData = txtArray[i].split(/\s+/);
                  dataArray.push([tmpData[0], parseInt(tmpData[1])]);
              }
              var data = google.visualization.arrayToDataTable(dataArray);
              var chart = new google.visualization.LineChart(document.querySelector('#chart_div'));
              var options = {width: '100%',
							 height: '40%',
							 legend: 'none',
							 colors: ['red'],
							 hAxis: {
									textStyle:{color: 'white'}},
							vAxis: {
									textStyle:{color: 'white'}},
							 backgroundColor: { fill:'transparent' }};
							 
							 chart.draw(data,options); //forgot this call
							 
              $(window).resize(function(){
				chart.draw(data,options);
			  });
          }
      });

答案 2 :(得分:-1)

您的连接缺少参数,应该是 $connect = mysqli_connect("HostName","UserName","password","DBName") or die("Some error occurred during connection " . mysqli_error($con));这将包括错误检查。

为什么你的变量前面有@符号和查询语句中所有变量之前的句号(可能是个愚蠢的问题,如果对不起)?