### PHP部分常见问题总结 #### 1. 为什么我得不到变量? 问题描述:在尝试从一个网页向另一个网页POST数据(比如变量`name`),但在第二个网页中输出`$name`时却得不到任何值。 解决方案: 1. **注册全局变量**: - 在PHP 4.2及以后的版本中,默认情况下`register_globals`设置为`off`。 - 若要取得从另一页面提交的变量,可以采取以下几种方法: - 方法一:在`php.ini`文件中将`register_globals`设置为`on`。 - 方法二:在接收页面最前面使用`extract($_POST); extract($_GET);`来提取全局变量(注意,在使用`extract($_SESSION)`之前必须先调用`session_start()`)。 - 方法三:手动读取变量,例如`$a = $_GET["a"]; $b = $_POST["b"];`等,这种方法虽然相对繁琐但更安全。 #### 2. 调试你的程序 问题描述:在运行时需要知道某个变量的实际值。 解决方案:创建一个名为`debug.php`的文件,其中包含以下代码: ```php <?php ob_start(); session_start(); echo "<pre>"; echo "本页得到的_GET变量有:"; print_r($_GET); echo "本页得到的_POST变量有:"; print_r($_POST); echo "本页得到的_COOKIE变量有:"; print_r($_COOKIE); echo "本页得到的_SESSION变量有:"; print_r($_SESSION); echo "</pre>"; ?> ``` 接着在`php.ini`文件中设置`include_path="c:/php"`,并将`debug.php`文件放置于此路径下。之后可以在每个网页中包含此文件,以便查看获取到的各种变量名称及其值。 #### 3. 如何使用session 问题描述:如何在PHP中使用session来存储数据。 解决方案: 1. **初始化Session**: - 在使用任何与session相关的功能之前,必须首先调用`session_start();`函数。 2. **设置Session变量**: - 在PHP 4.2之前的版本中,可以使用`session_register`函数来注册一个会话变量: ```php <?php session_start(); $name = "这是一个Session例子"; session_register("name"); // 注意不要写成 `session_register("$name")` echo $_SESSION["name"]; ?> ``` - 在PHP 4.2及更高版本中,可以直接为session变量赋值: ```php <?php session_start(); $_SESSION["name"] = "这是一个Session例子"; echo $_SESSION["name"]; ?> ``` 以上是针对标题“php部分常见问题总结”及其描述中的部分内容进行的详细解答。接下来我们将继续分析其他列出的问题点。 #### 4. 为什么我向另一网页传送变量时,只得到前半部分,以空格开头的则全部丢失 问题描述:在尝试向另一个网页传送变量时,如果变量值以空格开头,则该变量会被截断或丢失。 解决方案:确保在传送变量时正确处理了空格。可以考虑使用`urlencode()`函数对变量进行编码,然后在接收端使用`urldecode()`解码。 #### 5. 如何截取指定长度汉字而不会出现以"?>"结尾,超出部分以""代替 问题描述:需要截取指定长度的汉字文本,但不能以特殊字符"?>"结尾,超出部分以空字符串代替。 解决方案:使用`mb_substr()`函数来截取多字节字符,例如汉字。可以通过设置适当的参数来避免出现特定的结尾字符,并使用空字符串替代超出的部分。 ```php <?php function safe_substring($str, $len) { $result = mb_substr($str, 0, $len, 'UTF-8'); if (substr($result, -2) == "?>") { $result = mb_substr($str, 0, $len - 2, 'UTF-8'); } return $result; } ?> ``` #### 6. 规范你的SQL语句 问题描述:如何编写规范且安全的SQL语句。 解决方案:使用预处理语句(prepared statements)和参数化查询可以有效防止SQL注入攻击。例如,使用PDO扩展: ```php <?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // 创建连接 $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // 设置PDO错误模式为异常 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 预处理语句 $stmt = $conn->prepare("SELECT id, name FROM users WHERE name = :name"); $stmt->bindParam(':name', $name); // 执行预处理语句 $name = 'John Doe'; $stmt->execute(); // 获取结果 $result = $stmt->fetchAll(); ?> ``` 以上示例展示了如何使用PDO扩展的安全特性来编写规范的SQL语句。后续章节将继续围绕其他问题展开深入讨论。
剩余12页未读,继续阅读
- 粉丝: 6
- 资源: 949
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助