【问题标题】:php $_GET value erased when placed in if(!isset)php $_GET 值在 if(!isset) 中被删除
【发布时间】:2012-10-28 15:32:39
【问题描述】:

这很好用:

$username= $_GET["username"];
$query= "INSERT INTO test (latitude) VALUES ('$username')";
mysql_query($query) or die (mysql_error("error"));
mysql_close();

这不起作用:

if(!isset($_POST['submit']))
{
}
else
{
$username= $_GET["username"];
$query= "INSERT INTO test (latitude) VALUES ('$username')";
mysql_query($query) or die (mysql_error("error"));
mysql_close();
}

如果 $username 设置为 get 以外的值,例如 '7',它会起作用。

从目标 c 中检索值的 GET。如果我不把它放在 if 语句中,它只会在我的数据库中输入数百次。如果我把它放在'if'语句中,它只会输入一次,但值将为零。我完全被难住了。任何帮助都会很棒。

编辑: 我认为由于我得到的答案我没有很好地解释。澄清一下:我正在使用 POST 发布 user_id、answer_body。我使用 GET 作为从核心位置导入纬度和经度的一种方式(即使我将其命名为用户名,它也是纬度)。我希望他们都进入同一个条目,这就是我将 GET 绑定到 isset_POST 的原因。此外,当 GET(username) 单独使用时,使用 INSERT 查询,它将在我的数据库中产生数百个重复项。这是 Objective-C 脚本:

//sends whatever username is set to, to database
float username = location.coordinate.latitude;
NSString *theValue = [NSString stringWithFormat:@"%f", username];
NSString *hostStr =[NSString stringWithFormat:@"http://mysite.com/page.php?username=%@", theValue];
NSData *dataURL =  [NSData dataWithContentsOfURL: [ NSURL URLWithString: hostStr ]];
NSString *serverOutput = [[NSString alloc] initWithData:dataURL encoding: NSUTF8StringEncoding];
NSLog(@"Server output: %@", serverOutput);

表格代码为:

<form action="gpstestertwo.php" method="post"><center>
                $<input type="text" name="answer_body" maxlentgh= "5"  style="height:3em;"/>
                <input type="submit" value="submit" name="submit" style="height:2em; width:5em; font-size:19px " 
                 />
                 </center>
            </form>

【问题讨论】:

  • 小心SQL注入。当您 POST 时,您实际上是将用户名作为 POST 字段还是 GET 字段发送?
  • var_dump($_GET), var_dump($_POST) - 你得到了什么?
  • cbuckley- 我发送的东西与 POST 完全不同,我只使用 if isset POST 以便将 get 变量插入到与表单字段相同的条目中。这有意义吗?
  • jan267- 我有点新,但我认为人们在各地入侵数据库是一个神话。 deceze:当我执行 var_dump(get) 时,它返回 array(0) { },当我执行 var dump post 时,我得到 array(2) { ["answer_body"]=> string(1) "3" ["submit"] => 字符串(6)“提交”}。谢谢大家。
  • 所以URL中没有GET查询参数...?!?!此外,无论是否受到攻击,总是 转义数据。您只是确保您的语法有效! The Great Escapism (Or: What You Need To Know To Work With Text Within Text)

标签: php get


【解决方案1】:
if(isset($_REQUEST['submit']))
{
$username= mysql_real_escape_string($_REQUEST["username"]);
$query= "INSERT INTO test (latitude) VALUES ('$username')";
mysql_query($query) or die (mysql_error("error"));
mysql_close();
}

编辑: 首先,我将 $_GET 和 $_POST 更改为 $_REQUEST,这样它就可以同时接受 $_GET 和 $_POST。

其次,我添加了mysql_real_escape_string函数,它会转义不需要的字符,例如引号,以防止SQL注入。

【讨论】:

    【解决方案2】:

    $_POST['submit']$_GET['username']...为什么不使用$_POST['username']

    您如何发送FORM 数据、POSTGET?或者使用$_REQUEST['username'] 来确定。

    更不用说在查询中使用之前需要对用户名进行转义。

    EDIT(始终在POSTs 上进行处理,而不是GETs):

    if(!strcasecmp($_SERVER['REQUEST_METHOD'], 'POST')){
        // post operation, do your work HERE only
        if(!empty($_POST['username'])){
            // ... do your worst here ...
        }
    }
    

    GETs 是默认请求,您最终可能会在数据库中被轰炸。 POSTs 是特别的。所以在进行POST处理之前确保REQUEST_METHODPOST

    【讨论】:

    • 好吧,我确实尝试了 If ISSET $Get_Username,这使值保持不变,但问题是它插入了一百个重复项。表单正在发送 POST,但一直输入为零的数据是来自目标 c NSURL 的 GET。
    • @Celeste 您只需要在 POST 发生时进行查询。马上查看我的编辑。
    • 嘿克劳德里安,它仍在插入零。虽然,根据你的回答,我能够确认将代码更改为 POST_username 而不是 GET_username 有效,只要它不在 if(isset 语句中。但它仍然插入数百个重复项。问题可能是 php 不能在 if 语句中从目标 c 检索?这有意义吗?
    • @Celeste 我不知道两者如何互操作。帮不了你。我知道 PHP 和 C++ :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多