LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 652|回复: 2

变量不能传递

[复制链接]
发表于 2004-8-30 16:25:50 | 显示全部楼层 |阅读模式

  1. <?php
  2.         // modify.php
  3.         require "global.php";
  4.         include "jm.php";

  5.         $rowid=$_GET['rowid'];
  6.         $selectStmt = "select * from pa_address_book where rowid=$rowid";
  7. //      $selectStmt = "select * from pa_address_book where rowid={$_GET['rowid']}" ;

  8.         // connect to the database
  9.         if (!($link = mysql_pconnect("localhost", "root", "test")))
  10.         {
  11.                         DisplayErrMsg(sprintf("error connecting to host %s, by user %s", $hostname, $username));
  12.                         exit();
  13.         }
  14.         // select the database
  15.         if (!mysql_select_db("article20", $link))
  16.         {
  17.                 DisplayErrMsg(sprintf("Error in selecting %s database", $databaseName));
  18.                 DisplayErrMsg(sprintf("error: %d %s", mysql_errno($link), mysql_error($link)));
  19.                 exit();
  20.         }
  21.         //execute the statement
  22.         if (!($result = mysql_query($selectStmt, $link)))
  23.         {
  24.                 DisplayErrMsg(sprintf("Error in executing %s stmt", $selectStmt));
  25.                 DisplayErrMsg(sprintf("error: %d %s", mysql_errno($link), mysql_error($link)));
  26.                 exit();
  27.         }
  28.         GenerateHTMLHeader("Please modify fields");
  29.         if (!($row = mysql_fetch_object ($result)))
  30.         {
  31.                 DisplayErrMsg("Internal error: the entry does not exist");
  32.                 exit();
  33.         }
  34.         $resultEntry['user'] = $row->pa_user;
  35.         $resultEntry['ip'] = $row->pa_user_ip;
  36.         $resultEntry['company'] = $row->pa_user_company;
  37.         $resultEntry['department'] = $row->pa_user_department;
  38.         $resultEntry['job'] = $row->pa_user_job;
  39.         GenerateHTMLForm($resultEntry, "update.php?rowid=$rowid", "modify");
  40.         mysql_free_result($result);
复制代码


  1. <?php
  2.         // main.php
  3.         require "global.php";
  4.         include "jm.php";
  5.         // Check if at least one search criteria is entered
  6.         if (!$pa_user && !$pa_user_ip && !$pa_user_company && !$pa_user_department && !$pa_user_job)
  7.         {
  8.                 DisplayErrMsg("Error: At least one search criteria should be present\n");

  9.                 exit();
  10.         }
  11.         //Generate the sql command for doing a select from the Database
  12.         $searchStmt = "select * from pa_address_book where " ;

  13.         if ($pa_user)
  14.                 $searchStmt .="pa_user like '%$pa_user%' and ";
  15.         if ($pa_user_ip)
  16.                 $searchStmt .="pa_user_ip like '%$pa_user_ip%' and ";
  17.         if ($pa_user_company)
  18.                 $searchStmt .="pa_user_company like '%$pa_user_company%' and ";
  19.         if ($pa_user_department)
  20.                 $searchStmt .="pa_user_department like '%$pa_user_department%' and ";
  21.         if ($pa_user_job)
  22.                 $searchStmt .="pa_user_job like '%$pa_user_job%' and ";

  23.         $stmt = substr($searchStmt, 0, strlen($searchStmt)-4);

  24.         // connect to the database
  25.         if (!($link=mysql_pconnect ("localhost", "root", "test")))
  26.         {
  27.                 DisplayErrMsg(sprintf("error connectint to host %s, by user %s", $hostName, $userName));
  28.                 exit();
  29.         }
  30.         //select the database
  31.         if (!mysql_select_db("article20", $link))
  32.         {
  33.                 DisplayErrMsg(sprintf("Error in selecting %s database", $databaseName));
  34.                 DispalyErrMsg(sprintf("error:%d %s", mysql_errno($link), mysql_error($link)));
  35.                 exit();
  36.         }
  37.         echo "$stmt";
  38.         // execute the statement
  39.         if (!($result = mysql_query($stmt, $link)))
  40.         {
  41.                 DisplayErrMsg(sprintf("Error in executing %s stmt", $stmt));
  42.                 DisplayErrMsg(sprintf("error: %d %s", mysql_errno($link), mysql_error($link)));
  43.                 exit();
  44.         }
  45.         // display the result of the search
  46.         printf("<table border with="100%%" bgcolor="#dcdcdc" nosave>\n");
  47.         printf("<tr>
  48.                         <td><b>pa_user</b></td>
  49.                         <td><b>pa_user_ip</b></td>
  50.                         <td><b>pa_user_company</b></td>
  51.                         <td><b>pa_user_department</b></td>
  52.                         <td><b>pa_user_job</b></td>
  53.                         <td><b>modify/delete</b></td>
  54.                         </tr>\n");
  55.         while (($row = mysql_fetch_object($result)))
  56.         {

  57.                 printf( "<tr>
  58.                                         <td>%s</td>
  59.                                         <td>%s</td>
  60.                                         <td>%s</td>
  61.                                         <td>%s</td>
  62.                                         <td>%s</td>
  63.                 <td><a href="modify.php?rowid=%s"><i>Modify</i></a>/
  64.                      <a href="delete.php?rowid=%s"><i>delete</i></a></td>
  65.                                                 </tr>\n",
  66. $row->pa_user,$row->pa_user_ip,$row->pa_user_company,$row->pa_user_department,$row->pa_user_job,$row->rowid,$row->rowid);

  67.         }
  68.         printf("</table>\n");
  69.         mysql_free_result($result);
  70.         echo "$rowid";

  71. ?>
复制代码

错误是这个
Error in executing select * from pa_address_book where rowid= stmt
error: 1064 You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
发表于 2004-9-4 12:50:22 | 显示全部楼层
$rowid 没有获取到。

PHP 中,早期 php.ini 会自动打开 register_globals,此时所有相关到请求变量都会自动编成全局。所以可以直接使用,包括 $_GET, $_POST, $_COOKIE (早期是 $HTTP_GET_VARS, $HTTP_POST_VARS ...)

而这个是被看做 PHP 到一个 BUG, 所以极少服务器会开 register_globals 的。

解决办法:
1, 在获取这些变量的时候从 $_GET, $_POST 等中获取: $rowid = &$_GET['rowid']。
2, 不想改变原有的模式,可以变通来使这些变量看似全局变量:

[php]
// global variables parsing

if (function_exists('ini_get'))

        $onOff = ini_get('register_globals');

else if (function_exists('get_cfg_var'))

        $onOff = get_cfg_var('register_globals');

if ($onOff != 1)

{

        @extract($_GET, EXTR_SKIP);

        @extract($_POST, EXTR_SKIP);

        // 我不推荐 $_COOKIE 之类的作为全局用。 $_GET 和 $_POST 足够了。
}



function stripSlashesArray($arr)

{

        while (list($key,$val) = each($arr))

        {

                if (is_string($val) and $key != 'argv' and (strtoupper($key) != $key or (''.intval($key) == '$key')))

                        $arr[$key] = stripslashes($val);

                else if (is_array($val) and ($key == '_POST' or $key == '_GET' or strtoupper($key) != $key))

                        $arr[$key] = stripSlashesArray($val);

        }

        return $arr;

}
[/php]

上面的代码放到全局文件中, 然后其他文件 require_once 就是了。
使用的时候就跟 register_globals 开启了一样。
发表于 2004-9-6 23:13:22 | 显示全部楼层
还是按照手册上推荐的写法吧
$info=$_POST["info"];
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表