1

好的,我正在制作一个多功能 php 文件。该文件名为functions.php 并具有switch - case。

起初,我只有一个简单的 register.php 文件,它发送到 functions.php。这是我得到的错误:-

Notice: Undefined index: action in C:\Program Files (x86)\EasyPHP-DevServer-13.1VC9\data\localweb\transfer\functions.php on line 5

functions.php?username=223&password=223&action=register

这是非常不安全的..我只想展示动作..like functions.php?action=register

我要对脚本进行哪些更改?这是代码:-

注册.php

<form action="functions.php" name="post">
    <table>
        <tr>
            <td>Username : </td>
            <td><input type="text" name="username"/></td>
        </tr>
        <tr>
            <td>Password : </td>
            <td><input type="password" name="password"/></td>
        </tr>
        <tr>
            <td><input type="submit" name="action" value="register"></td>
        </tr>
    </table>
</form>

函数.php

<?php
session_start();
$db = mysql_connect('127.0.0.1', 'root', 'akshay!@#') or die (mysql_error($db));
mysql_select_db('transfer', $db);
switch($_POST['action'])
{
case 'register':
        $username = (isset($_POST['username'])) ? $_POST['username'] : '';
        $password=(isset($_POST['password'])) ? $_POST['password'] : '';
        $username=mysql_real_escape_string($username, $db);
        $password = md5($password);
        $password = mysql_real_escape_string($password);
        $query = "select * from users where user_name = '" . $username . "'";
        $result = mysql_query($query, $db) or die (mysql_error($db));
        if(mysql_num_rows($result) > 0)
        {
                    echo "Username already exists, redirecting";
                    header('Refresh: 3; URL=register.php');
                    die();
                }

                if(empty($username) || empty($password))
                {
                    echo "Fields cannot be empty, redirecting";
                    header('Refresh: 3; URL=register.php');
                }
                else
                {
                    $query2 = "insert into users(user_id, user_name, user_pass)
                              values
                              (NULL, '" . $username . "', '" . $password . "')";
                    $result2 = mysql_query($query2, $db) or die (mysql_error($db));
                    if($result2)
                    {
                        echo "Registration successful";
                    }
                    else
                    {
                        echo "Cannot register";
                    }
                }
                break;
    }           

 ?>
4

2 回答 2

0

这意味着$_POST['action']没有设置。

在您的示例中,您在 URL 中传递它,因此应该使用它$_GET['action']

于 2013-08-06T16:35:51.870 回答
0

根据查询字符串(“functions.php?username=223&password=223&action=register”),看起来您正在使用它GET来发送数据,而不是POST.

你应该寻找$_GET['action']相反,你应该使用

isset($_GET['action'])

检查是否设置了操作。

编辑

如果您打算使用POST,您确实应该使用这种类型的应用程序,那么您需要更改您的表单:

<form action="functions.php" name="post" method="post">

此外,您需要为参数使用隐藏字段action,而不是使用提交按钮:

<td>
    <input type="hidden" name="action" value="register" />
    <input type="submit" name="submit" value="Submit" />
</td>

method="POST"属性确保您的数据将传输到functions.php使用POST. 这样数据就不会显示在 URL 中。

然后,您functions.php可以包含:

if (isset($_POST['action'])) {
    switch($_POST['action']) {
        case 'register':
            $username = (isset($_POST['username'])) ? $_POST['username'] : '';
            // And so on
    }
}
else {
    echo "No action specified.";
}
于 2013-08-06T16:36:38.337 回答