【问题标题】:How to use GLOBALS in php to post form data如何在php中使用GLOBALS来发布表单数据
【发布时间】:2017-02-19 10:39:45
【问题描述】:

如何在主 PHP 文件中导入 GLOBALS 变量,这样我就不必每次都在 src 中更改项目名称?

【问题讨论】:

  • 你能把index.php的全部内容贴出来,包括<?php?>标签和include语句吗?
  • @Luke 根据需要发布
  • @Luke 我听从了你的建议,并以某种方式让它发挥了作用。但现在麻烦更大了stackoverflow.com/questions/39984235/…

标签: php html mysql sql globals


【解决方案1】:
name = $GLOBALS['project_name']

这就是问题所在。您在 html 中包含了 php 代码,而没有告诉 php 处理它。你可以这样试试:

<input type = "text" name="<?php echo($GLOBALS['project_name']) ?>" id = "project_name" class = "form-control" placeholder="Enter Project Name"  value = "">

但是,正如您编写的那样,您可能根本不需要使用 $GLOBALS 超全局变量,因为所有内容都在同一范围内执行(您没有函数)。你可以简单地拥有这个:

config.php

<?php
$project_name = 'test';
?>

index.php

<?php
include_once('config.php');
?>
<form action="upload.php" method="post">
  <h3 class="text-center">If Project Name does not exist, add new one below.</h3>     
  <div class = "form-group">
    <label class="control-label col-sm-2" for="project_name">Project Name:</label>
    <div class="col-sm-8">
      <input type = "text" name="<?php echo($project_name) ?>" id="project_name" class="form-control" placeholder="Enter Project Name"  value= "">
    </div>
    <button type="submit">Submit</button>
  </div>
</form>

上传.php

<?php
include_once('config.php');

$project_name = $_POST[$project_name];
$version = $_POST['version'];
$description = $_POST['description'];
$data = "INSERT INTO demo VALUES(NULL, '$project_name', '$version', '$description', '$path')";

$download_data = "SELECT demo_id, demo_name, demo_version, demo_details, file 
                      FROM demo
                      WHERE demo_name = '$project_name'
                      AND demo_version = '$version'";

?>

注意:upload.php 的最后一部分对于生产环境来说是危险的,如果你想在 sql server 上实际运行这段代码,你应该阅读“sql injection”和“prepared statements”。

$GLOBALS 的解释

我不确定你对这个超全球做了什么研究,但我建议阅读 php.net 范围内的页面:http://php.net/manual/en/language.variables.scope.php

这段代码 sn-p 演示了正确的用法:

<?php
$a = 1;
$b = 2;

function Sum()
{
    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
} 

Sum();
echo $b;
?>

在这种情况下,输出将为 3。如果代码是在不使用 $GLOBALS 的情况下编写的:

<?php
$a = 1;
$b = 2;

function Sum()
{
    $b = $a + $b;
} 

Sum();
echo $b;
?>

输出将是 1。本例中 sum() 函数中的变量 $a 和 $b 是“局部变量” - 它们仅在 sum() 函数的 范围 中,并且是不同的内存位置(尽管名称相同)到 $a 和 $b 变量,它们分别分配了 1 和 2 的值。所以 sum 操作发生了,但它不会改变 echo 语句输出的 $b 变量的值(因为 sum() 中的 $b 与函数外部的 $b 不同)。

【讨论】:

  • 嗨,这仍然发送项目名称为空
  • 我实际上忘了把表单/提交元素放进去,所以你甚至不能提交它(现在已经编辑了 index.php)。您确实需要将所有文件保存在同一目录中。如果 index.php 的 HTML 输出中的项目名称为空,则包含必须失败,否则找不到 config.php 文件。下面是一个 index.php 示例,显示 HTML 表单中的“name”属性不为空:ideone.com/wcev5c
【解决方案2】:

所以我创建了一个 config.php 文件并声明了 GLOBALS['project_name'] = 'project_name';在里面。

调用它时,我只使用 $project_name;

【讨论】:

    【解决方案3】:

    如果您声明一个全局变量,您可以轻松地将其用作变量,如下所示:

    $GLOBALS['project_name'] = 'test';
    echo $project_name; //test
    

    在你的情况下:

    <?php    
    global $project_name; 
    ?>   
        <div class = "form-group">
            <label class="control-label col-sm-2" for ="<?php echo $project_name; ?>">Project Name:</label>
            <div class="col-sm-8"><input type = "text" name ="<?php echo $project_name;?>" id ="<?php echo $project_name; ?>" class = "form-control" placeholder="Enter Project Name"  value = ""></div></div>
    

    上次更新您的 PHP 代码:

    global $project_name;
    $project = $_POST[$project_name];
    

    希望这会有所帮助!

    【讨论】:

    • 您永远不会在第二个代码 sn-p 中设置 $GLOBALS['project_name'] 或 $project_name 的值 - 您需要在第二个代码中包含第一个 sn-p 中的代码。换句话说:$GLOBALS 值不会在对单独脚本的调用中保持不变。
    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 2018-05-04
    • 2023-02-09
    • 2011-05-05
    • 1970-01-01
    • 2015-05-05
    • 2020-06-06
    • 2021-02-04
    相关资源
    最近更新 更多