PHP POST和一个函数,我做错了

时间:2012-12-17 17:05:52

标签: php function post

我不确定POST是否无效或功能是否正常。 所以继承了一页的代码:

<?php require_once("includes/Functions.php"); ?>
<?php include("includes/front.php"); ?>
<div id="register"> 
<form action="Includes/Functions.php" method="post" name="createUser"> 
Username: <input type="text" name="user" maxlength="16"/><br />
Password: <input type="password" name="pass" maxlength="30"/><br />
Repeat password: <input type="password"/><br />
E-mail: <input type="email" name="mail"/><br />             
<input type="submit" value="Next" />            
</form>
<a href="/login.php">Log in</a>  
</div>
</body>
</html>
<?php include("includes/footer.php"); ?>

这是functions.php的开头:

<?php require_once("connect.php"); ?>
<?php
if(isset($_POST["createUser"]) && isset($_POST["user"], $_POST["pass"],    $_POST["mail"])){
call_user_func_array("createUser", array($_POST("user"), $_POST("pass"), $_POST("mail")));
} 

使用echo方法进行故障排除我发现echo在代码中无处不在,但在我需要的函数中却没有。

这是功能:

function createUser ($username, $password, $email){
//Get from form
$username = $_POST["user"];
$password = $_POST["pass"];
$email = $_POST["mail"];
$hashedPassword = sha1($password);
//Submit to database
//make query
$query = ("INSERT INTO users ( username , email , hashPass ) VALUES ( '$username' ,  '$email' , '$hashedPassword')");
//use query
if (mysql_query($query, $connection)) {
//userMade.php
header("Location: ../userMade.php");
exit;
} else {
echo "<p>I suck!</p>";
echo "<p>".mysql_error()."</p>";
} 
}

没有报告任何PHP或MySQL错误,我只看到一个空白页。

3 个答案:

答案 0 :(得分:1)

call_user_func_array("createUser", array($_POST("user"), $_POST("pass"), $_POST("mail")));

应该是

call_user_func_array("createUser", array($_POST["user"], $_POST["pass"], $_POST["mail"]));

createUser($_POST["user"], $_POST["pass"], $_POST["mail"]);

你不必:

$username = $_POST["user"];
$password = $_POST["pass"];
$email = $_POST["mail"];

createUser函数中。

答案 1 :(得分:0)

<?php require_once("includes/Functions.php"); ?>
<form action="Includes/Functions.php" method="post" name="createUser"> 

这两行是否指向同一个文件?我会这么认为,但情况不正确。我会从这里开始。我会保留一个标准的命名约定,因为有些文件是Caps,有些则不是。

我还建议在散列之前对您的密码进行腌制。

对于您的SQL,我建议使用PDO,因为您的代码现在受到SQL注入攻击,可能会泄露未加密的密码。

答案 2 :(得分:0)

functions.php中,您正在检查if(isset($_POST["createUser"])...

表单name属性is not submitted during the post,因此if语句将始终失败。

您需要使用提交按钮的名称/值属性或隐藏的输入字段才能满足此条件