【问题标题】:Value of variable is not stored correctly while transfering the value from HTML form to PHP file将值从 HTML 表单传输到 PHP 文件时,变量的值未正确存储
【发布时间】:2013-03-04 00:34:09
【问题描述】:

谢谢 Ben,但现在我面临的另一个问题是,当我将分页添加到代码中时,第一次没有显示结果。请参阅下面代码的后半部分。请帮忙

if(isset($_GET['k'])){ $k1 = $_GET['k']; } else { $k1 = ''; }
echo $k1;
    $term = explode(" ", $k1);

$query = "SELECT * FROM database ";

foreach ($term as $each) 
{
    echo $each;
$i++;
    if($i==1)
    {
        $query .= "WHERE keywords LIKE '%$each%' ";
    }

else {
    $query .= "OR WHERE keywords LIKE '%$each%' ";
}

}

$per_pages=3;
$page_query = mysql_query("SELECT COUNT('title') FROM kcpdatabase");
    $pages = ceil(mysql_result($page_query, 0)/$per_pages)  or die

       ($page_query."<br/><br/>".mysql_error());    
       $page = (isset($_GET['page'])) ? (int) 
       ($_GET['page']) : 1;                             
$start = ($page - 1) * $per_pages;  
$query .= "LIMIT $start, $per_pages";


$ourquery1 = mysql_query ($query);
if(!$ourquery1)
echo "No query found";
$row1 = mysql_num_rows ($ourquery1);

if($pages >= 1 && $page <= $pages){ 

    for($x = 1; $x <= $pages; $x++)
    {

        echo '<a href="?page='.$x.'">'.$x.'</a> ';
    }

if ($row1 > 0)
{

    while($result = mysql_fetch_assoc($ourquery1))
    {
           echo "<tr>";
        echo "<td>";
        $title = $result['title'];
        $link = $result['link'];
        $region = $result['region'];
        $sector = $result['sector'];
        $theme = $result['theme'];      
        echo "<td> <a href=$link><h3>$title<h3></a>";
        echo "<h4>Sector: $sector <br>Theme: $theme <br> Region: $region  
                          </td>  </tr>";
    }
}   

}
echo "</tbody>";

下面是我尝试搜索在文本框中输入的单词/短语的部分代码。当我使用“$k1 = isset($_GET['k']);”从 php 文件中的表单中捕获值时存储在变量“$each”中的值是“1”,而不是用户输入的单词或短语。这会弄乱正在执行搜索功能的查询。请帮我定位错误。

请注意,“k”是文本框的名称,定义在下面的表单代码中。

    <form name="keywordquery" method="get" action="page2.php">
<fieldset class="fieldsetclass"><legend class="legendclass">Search by Keywords</legend>
      <div id="searchbox">
<input type="text" name="k" value="<?php if(isset($_GET['k'])){echo htmlentities($_GET
       ['k']);} ?>" style="border: 1px, thin; width:92%; "/> 
<input type="image" style="margin-bottom: 0; margin-top: 2px;" src="search.png"
      value="submit" />
</div>
</fieldset>
    </form>
    </div>
<table cellpadding="0" cellspacing="0" border="1">

    <tbody>    
<?php

$connection = mysql_connect('', '', '');
if(!$connection)
echo "No database connected";
$dbase = mysql_select_db("", $connection);
if(!$dbase)
echo "No datatable connected";



$k1 = isset($_GET['k']);
echo $k1;
$term = explode(" ", $k1);

$query = "SELECT * FROM datatable ";

foreach ($term as $each) 
{
    echo $each;
$i++;
    if($i==1)
    {
        $query .= "WHERE keywords LIKE '%$each%' ";
    }

else {
    $query .= "OR WHERE keywords LIKE '%$each%' ";
}

}

【问题讨论】:

  • $k1 = isset($_GET['k']);不获取值,只告诉它是否被设置
  • isset 结果为布尔值。所以 $k1 是 0 或 1 而不是 $_GET['k'] 中存储的
  • isset 只是确定是否设置了变量。请阅读 php.net 了解该功能的工作原理 ^^

标签: php html mysql css


【解决方案1】:
$k1 = isset($_GET['k']);

$k1 设置为 1,因为它正在检查是否已设置 - 在本例中已设置,isset() 返回 true 或 1。

你想要的是:

if(isset($_GET['k'])){ $k1 = $_GET['k']; } else { $k1 = ''; }

或类似的。

【讨论】:

  • 也可以,但是教三元运算符可能会导致更多的混乱
  • 你有你的 : 和 ?后记@Jon
  • 呸!固定的。谢谢@ElefantPhace,在我看到评论之前修复了它>True Ben。 =]
【解决方案2】:

那是因为 isset() 是一个布尔函数,请查看以下链接http://php.net/manual/en/function.isset.php

就这样做

if(isset($_GET['k']))
    $k1 = $_GET['k'];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    相关资源
    最近更新 更多