【问题标题】:Add form action [closed]添加表单操作[关闭]
【发布时间】:2014-12-02 17:51:01
【问题描述】:

我试图在提交时再次转到 index.php?page=servers 但是当我提交表单时重定向是 index.php?但实际上是 index.php?page=servers 我该如何解决这个问题?

<form class="form-horizontal" action="index.php?page=servers">
<fieldset>
<legend>Add server</legend>
<div class="form-group">
<label for="inputEmail" class="col-lg-2 control-label">IP</label>
<div class="col-lg-10">
<input type="text" class="form-control" id="ipserver" placeholder="IP Adress">
</div>
</div>
<div class="form-group">
<label for="inputPassword" class="col-lg-2 control-label">Port</label>
<div class="col-lg-10">
<input type="text" class="form-control" id="portserver" placeholder="Port">
</div>
</div>
<div class="form-group">
<label for="select" class="col-lg-2 control-label">Type</label>
<div class="col-lg-10">
<select class="form-control" id="select">
<option>Half-Life (Counter-Stricke)</option>
<option>Minecraft</option>
</select>
</div>
</div>
<div class="form-group">
<div class="col-lg-10 col-lg-offset-2">
<button class="btn btn-default">Cancel</button>
<button type="submit" id="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</fieldset>
</form>

还有php

if(!empty($_POST['submit'])){
$ip_server = $_POST['ipserver'];
$port_server = $_POST['portserver'];
if ($ip_server == NULL || $port_server == NULL){
echo 'Моля попълнете всички полета.';
}else{
$type = "halflife";
$zone = 0;
$disabled = 0;
$status = 1;
$sql = ("INSERT INTO `lgsl` (type, ip, c_port, q_port, zone, disabled, status) VALUES ('$type', '$ip_server', '$port_server', '$port_server', '$zone', '$disabled', '$status')");
$result = mysql_query($sql);
echo 'Сървъра е успешно добавен!';
}
}

【问题讨论】:

  • 警告您的代码极易受到 sql 注入攻击!
  • 我知道我会修复它,但首先我希望代码能够正常工作:)。
  • 您这里没有可以将您带到 index.php 的代码?你能提供你的 .htaccess 文件的内容吗?
  • 我没有 .htaccess。

标签: php html forms action


【解决方案1】:

What is the default form HTTP method?

您需要在表单标签中添加一个属性,以根据您的代码将其转换为 POST。

<form method="POST">

$_POST vs. $_SERVER['REQUEST_METHOD'] == 'POST'

要验证请求,请使用:

if( $_SERVER["REQUEST_METHOD"] == "POST" ) // or GET, if appropriate

如果您打算使用 GET,则可以添加一个名为“page”且值为“servers”的隐藏元素。

 <input type="hidden" name="page" value="servers" />

【讨论】:

  • 我的错我忘记了,但是当我提交时,如果输入为空,我看不到我的回声?
  • 使用服务端请求方式进行验证。我编辑了答案。
  • 感谢这解决了我的问题 :)
【解决方案2】:
if(isset($_POST['submit'])){
  $ip_server = mysql_real_escape_string($_POST['ipserver']);
  $port_server = mysql_real_escape_string($_POST['portserver']);
  if ($ip_server == NULL || $port_server == NULL){
    echo 'Моля попълнете всички полета.';
  } else {
    $type = "halflife";
    $zone = 0;
    $disabled = 0;
    $status = 1;
    $sql = "INSERT INTO `lgsl` (type, ip, c_port, q_port, zone, disabled, status) VALUES ('$type', '$ip_server', '$port_server', '$port_server', '$zone', '$disabled', '$status')";
    $result = mysql_query($sql);
    echo 'Сървъра е успешно добавен!';
  }
}

我添加了mysql_real_escape_string 以防止代码注入。

也可以在你的表单标签中使用method="post",像这样&lt;form method="post"&gt;

【讨论】:

    【解决方案3】:

    您可能有您想要的操作值,如以下 HTML 所示:

    <form name="myform" action="testform.php?query=string" method="POST">
    <input name="data" type="text">
    <input type="submit">
    </form>
    

    您的表单当前的设置方式,默认情况下,它会产生一个 GET 请求。但是,您的 PHP 测试作为 POST 请求提交的表单!如果您确实打算将表单作为 POST 请求提交,那么您必须在 action 属性中将其指定为 action="POST"。然后,改变你对提交表单的测试,检查 POST 是否有值,如下:

    <?php
    if (isset($_POST) && $_POST != null){
       echo ( htmlentities( $_SERVER['QUERY_STRING'] ) );  // adding more security
    }
    ?>
    

    注意:当方法为 POST 时,?query=string 部分反映 GET 变量,而是反映 QUERY_STRING。提交此表单后,它会重定向到testform.php?query=string

    顺便说一句,解析结果查询字符串的一个方便的函数是 parse_str,您可以使用它来创建包含“字符串”值的变量或关联数组,如下所示:

    <?php
    $qs = htmlentities( $_SERVER['QUERY_STRING'] );
    $str = substr( $qs, 1 ); // remove the '?'
    
    // array option
    parse_str( $str ,$arr);
    echo $arr['query'],"\n";  
    
    // variable option
    parse_str( $str );
    echo $query;  
    

    http://3v4l.org/DC27Y

    【讨论】:

      猜你喜欢
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      相关资源
      最近更新 更多