3

我在这里运行 jQuery Ajax 教程:

http://www.charlieperrins.com/2011/03/ajax-jquery-101/

一切正常,但我对这段代码有疑问:

<?php if ($_POST['user']) : ?>

<?php

$user_id = $_POST['user'];

if (isset($db_data[$user_id]))  {
    $data = $db_data[$user_id];
} else {
    echo 'Sorry, no user data matched your request - please try again';
    die;    
}
?>

我最关心的是第一行。那条线有什么作用?我试图将所有代码保留在一组 php 标签中,但我不知道该怎么做。如果我知道第一行的作用,我可能会弄清楚。任何帮助表示赞赏。我正在尝试对其进行逆向工程以使其适合我的应用程序,但在不知道该顶线的作用的情况下无法做到。

谢谢。

4

5 回答 5

2

所有这一切都是继续 if 块直到endif

没有endif,所以这个脚本中的任何内容都不会运行,除非其中有数据$_POST['user']不评估为false

我会写这个有点不同:

<?php 
if (isset($_POST['user'])) {
    $user_id = $_POST['user'];
    if (isset($db_data[$user_id]))  {
        $data = $db_data[$user_id];
    } else {
        echo 'Sorry, no user data matched your request - please try again';
        die;    
    }
}
?>
于 2012-08-10T02:29:28.237 回答
1

<?php if ($_POST['user']) : ?>表示如果$_POST['user']计算结果为true,则执行以下代码。

可以压缩成这样:

<?php if ($_POST['user']) :
$user_id = $_POST['user'];
....

还,

if ($_POST['user']) :

应该

if (isset($_POST['user']) && !empty(trim($_POST['user']))) :

这样可以确保$_POST['user']已设置(通常$_POST包含来自表单的变量),并且即使删除了空格也不会为空。

于 2012-08-10T02:30:03.450 回答
1

第一行测试$_POST数组是否有一个 key user,并且该 key 包含一个“真实”(非空,除其他外)值,表明表单已发布到此脚本。如果没有发布表单数据,则脚本的其余部分将不会执行,例如如果有人直接浏览到此 PHP 脚本而没有使用预期的表单发布到它。当表单回发到同一个 PHP 脚本时,这是一种经常使用的技术。在第一次到达脚本时,$_POST将是空的。当表单回发到同一个脚本时,当它包含值时可以采取不同的操作。

只需要一个<?php标签:

<?php 

if ($_POST['user']) {

  $user_id = $_POST['user'];

  if (isset($db_data[$user_id]))  {
    $data = $db_data[$user_id];
  } else {
    echo 'Sorry, no user data matched your request - please try again';
    die;    
  }
}
?>
于 2012-08-10T02:30:16.413 回答
1

这是控制结构的替代语法

于 2012-08-10T02:30:42.210 回答
0

if ($_POST['user'])条线是这样说的:

如果变量$_POST['user']存在并且设置为非假值。

$_POST['user']如果是0false''(空字符串) ,则上述条件失败。

它也没有安全地检查该值。

你最好使用:

if (isset($_POST['user'])) && $_POST['user'] != '')

这样,当 PHPdisplay_errors开启和通知时,不会输出警告。

于 2012-08-10T02:30:41.873 回答