没有isset的$ _POST []工作正常,但......

时间:2014-01-05 17:26:07

标签: php mysql

您好我是php和mysql的新手。但我有一个问题这是我的问题:

我正在尝试使用表单将数据插入数据库。
但是当我这样做时,它会在用户名密码列中返回1。

这是我的Index.php:

<?php

$host = 'localhost';
$dbname= 'akar';
$user = 'akar';
$pass = 'raparen';

$dsn = "mysql:host=$host;dbname=$dbname";
$pdo = new PDO($dsn,$user,$pass);

$username = isset($_POST['username']);
$password = isset($_POST['password']);



    $query = "INSERT INTO users (username,password)  VALUES(:username,:password)";
    $statement = $pdo->prepare($query);
    $statement->execute(array(
        ':username'=> $username,
        ':password'=> $password
    ));

?>

这是我的表格:

<form action='index.php' method='post'>

<input type='text' placeholder='Enter Username here!' name='username' />
<input type='password' placeholder='Enter Password here!' name='password' />
<input type='submit' value='Submit' />

当我这样做时:

$username = $_POST['username'];

它工作正常,但当我这样做时:

$username = isset($_POST['username']);

它在数据库中插入1,而不是输入中的文本。

对不起,如果我组织任何事情,我是新手。

3 个答案:

答案 0 :(得分:5)

isset()返回一个布尔值,该值是要检查的变量的结果。它不能用于从变量中获取值。

$username = isset($_POST['username']);
$password = isset($_POST['password']);

应该是:

$username = $_POST['username'];
$password = $_POST['password'];

或者,如果要在未设置这些变量的情况下分配默认值,则可以这样做:

$username = isset($_POST['username']) ? $_POST['username'] : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';

答案 1 :(得分:4)

这是因为isset如果var存在且返回true并且其值不是NULL,则返回false。文档中的“返回值”:

  

如果var存在并且其值不是NULL,则返回TRUE,FALSE   否则。

通过执行$username = isset($_POST['username']);,您将isset的返回值分配给$username,这将存储在您的数据库中。

你应该做的是:

if (isset($_POST['username'])) {
  $username = $_POST['username'];
}

因此,只有在设置$_POST['username']时才指定$_POST['username']的值。

答案 2 :(得分:0)

try {
  $statement = $pdo->prepare( $query);

  $statement->bindValue( “:username”, $username, PDO::PARAM_STR );
  $statement->bindValue( “:password”, $password, PDO::PARAM_STR );

  $statement->execute();
} catch ( PDOException $e ) {
echo “Query failed: “ . $e->getMessage();
}