php $ _GET问题 - 更新

时间:2011-09-02 19:53:32

标签: php get

谢谢我现在有一个错误代码HY093使用renameit SUBMIT按钮后参数号无效。知道为什么吗?感谢

任何帮助将不胜感激。非常感谢。

<?php 
// init
include("db_con1.php");
require("menu.php");

// modify distribution list name
if(is_numeric($_GET['gid'])) {
  $g_id=$_GET['gid'];
  $one = $pdo->prepare('SELECT * FROM contactgroups WHERE id=:gid');
  $one->bindParam(':gid', $g_id, PDO::PARAM_INT);
  if( $one->execute(array(':gid' => $_GET['gid'])) ) {
   $result = $one->fetch();
  }
}

// distribution list query
$queryl = $pdo->prepare('SELECT id, gr_name FROM contactgroups WHERE status=1 ORDER BY gr_name ASC');
$queryl->execute();

// Members list query
if (isset($_GET['gid'])) {
  $g_id=$_GET['gid'];
  $querym = $pdo->prepare('SELECT STRAIGHT_JOIN gm.linktype, if( gm.linktype = "group", cg.gr_name, cm.contact_sur ) mname FROM groupmembers gm LEFT JOIN contactgroups cg ON gm.link_id = cg.id LEFT JOIN contactmain cm ON gm.link_id = cm.id WHERE gm.group_id =:gid ORDER BY mname ASC');
  $querym->bindParam(':gid', $g_id, PDO::PARAM_INT);
  $querym->execute();
}

// distribution list query
$queryr = $pdo->prepare('SELECT * FROM contactmain WHERE status=1 ORDER BY contact_sur ASC');
$queryr->execute();

这是应该但不起作用的......

if (isset($_POST['renameit'])) {
    $ren = htmlspecialchars($_POST['rename']);
    $g_id = $_GET['gid'];

    if ($g_id !== '' && is_numeric($g_id)) { // Change that first to == if gid != 0 as well
        $sqlren = "UPDATE contactgroups SET gr_name = :rename WHERE id = :gid";
        $sqlren = $pdo->prepare($sqlren);

        $sqlren->bindValue(':rname', $ren); // <<< Is this supposed to be :ren?
        $sqlren->bindValue(':gid', $g_id);

        if ($sqlren->execute()) {
            echo  "<meta http-equiv=\"refresh\" content=\"0;URL=groups.php\">";
        } else {
            //Query failed.
            $errorcode = $sqlren->errorCode();
            echo $errorcode;
        }
    } else {
        echo 'gid not provided'; // Or something
    }
}
?>

这是HTML位:

<form id="group-in" method="post" action="groups.php">
Add new Distribution group: <input type="text" name="newgroup" placeholder="name...">  <input type="submit" name="createit" value="Create new">
Rename groupname: <input type="text" name="rename" value="<?php echo $result['gr_name']; ?>"> <input type="submit" name="renameit" value="Rename">
</form>

<!-- Distribution list  -->
<div id="left"><label class="header">Distribution list</label>
<ul>

 <?php foreach ($queryl as $i => $rowl) { ?>

  <li >
   <?php if ($i)?>
   <input name="checkbox1_add[]" id="dist_<?php echo $i ?>" type="checkbox" value="<? echo $rowl['id']; ?>" />
   <label for="groups_<?php echo $i ?>">
   <a href="groups.php?gid=<?php echo $rowl['id']; ?>" <?php $g_id=$_GET['gid']; if ($g_id==$rowl['id']) echo 'class="bold"'; ?> >
    <?php echo $rowl['gr_name']; ?>
   </a></label>
 </li>
 <?php } ?>
</ul>
</div>

对不起长代码,但我认为在选择分发项目后,我以某种方式放弃了这个$ _GET。

2 个答案:

答案 0 :(得分:2)

你不应该这样做吗?

if (isset($_POST['renameit'])) {
    $ren = htmlspecialchars($_POST['rename']);
    $g_id = $_GET['gid'];

    if ($g_id !== '' && is_numeric($g_id)) { // Change that first to == if gid != 0 as well
        $sqlren = "UPDATE contactgroups SET gr_name = :ren WHERE id = :gid";
        $sqlren = $pdo->prepare($sqlren);

        $sqlren->bindValue(':rname', $ren); // <<< Is this supposed to be :ren?
        $sqlren->bindValue(':gid', $g_id);

        if ($sqlren->execute()) {
            echo  "<meta http-equiv=\"refresh\" content=\"0;URL=groups.php\">";
        } else {
            //Query failed.
            $errorcode = $sqlren->errorCode();
            echo $errorcode;
        }
    } else {
        echo 'gid not provided'; // Or something
    }
}

此外,如果它总是一个整数,你可以使用:

$g_id = (int)$_GET['gid'];

但是你需要注意评估为0的内容并在if声明中检查它:

if ($g_id > 0) {

假设0不是有效的gid值。

修改

看看你的标记和形式,这一切似乎很困惑。

例如,您的PHP代码使用GET,但此处的代码不包括gid属性中的ACTION。 (另外,你真的应该使用两种不同的形式,IMO。)

<form id="group-in" method="post" action="groups.php?gid=<?php echo $g_id;?>">
 Add new Distribution group: 
 <input type="text" name="newgroup" placeholder="name...">
 <input type="submit" name="createit" value="Create new">
</form>
<form id="group-in" method="post" action="groups.php?gid=<?php echo $g_id;?>">
 Rename groupname: 
 <input type="text" name="rename" value="<?php echo $result['gr_name']; ?>">
 <input type="submit" name="renameit" value="Rename">
</form>

但是,您的评论似乎表明可以检查多个复选框以重命名组?但是,你周围没有FORM标签:

<!-- Distribution list  -->
<div id="left"><label class="header">Distribution list</label>
<form id="group-in" method="post" action="groups.php">
<ul>

 <?php foreach ($queryl as $i => $rowl) { ?>

  <li >
   <?php if ($i)?>
   <input name="checkbox1_add[]" id="dist_<?php echo $i ?>" type="checkbox" value="<? echo $rowl['id']; ?>" />
   <label for="groups_<?php echo $i ?>">
   <a href="groups.php?gid=<?php echo $rowl['id']; ?>" <?php $g_id=$_GET['gid']; if ($g_id==$rowl['id']) echo 'class="bold"'; ?> >
    <?php echo $rowl['gr_name']; ?>
   </a></label>
 </li>
 <?php } ?>
</ul>
</form>
</div>

您将要遇到的挑战是,您需要循环遍历$_POST['gid']数组,而第一个单组将重命名为gid中的GET。 }。我建议将代码组织到Group / Groups对象中,并使用模型/视图/控制器(MVC)模式来组织代码。

答案 1 :(得分:0)

您是说在提交$_GET['gid']表单后无法获得group-in

因为如果是这种情况,您需要做的是使用gid值创建隐藏输入,以便$_POST中可以使用它。

如果不考虑您要做的事情,我可以告诉您,您根本无法同时使用$_GET$_POST代码。

更新:我认为你不明白我的意思。但Jared已经在更好地解释你的代码有什么问题,所以我想我不会重复它。