-1

嗨,你们能帮我分解一下这个 Dreamweaver 插入代码向导,尤其是if (!function_exists("GetSQLValueString")) { ....}代码的一部分:

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "",$theNotDefinedValue = "") 
{


$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
case "int":
  $theValue = ($theValue != "") ? intval($theValue) : "NULL";
  break;
case "double":
  $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
  break;
case "date":
  $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  break;
case "defined":
  $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
  break;


 }
  return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
  $insertSQL = sprintf("INSERT INTO feedback (name, email, phone, service, message) VALUES (%s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['name'], "text"),
                       GetSQLValueString($_POST['email'], "text"),
                       GetSQLValueString($_POST['phone'], "text"),
                       GetSQLValueString($_POST['service'], "text"),
                       GetSQLValueString($_POST['message'], "text"));

  mysql_select_db($database_kojexconsult, $kojexconsult);
  $Result1 = mysql_query($insertSQL, $kojexconsult) or die(mysql_error());

  $insertGoTo = "success.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
?>
4

1 回答 1

1

我看看能不能给你分解一下。

初始 if 检查函数是否尚未定义 (http://php.net/manual/en/function.function-exists.php)。然后它遍历并定义函数 GetSQLValueString。

函数 GetSQLValueString 执行以下操作:

  • 它使用 get_magic_quotes_gpc 执行三元 if 检查(获取 magic_quotes_gpc 的当前配置设置)。如果它通过,它会删除 $theValue,否则它只返回 $theValue。
  • 在执行 mysql_real_escape_string 或 mysql_escape_string 之前,另一个三元 if 检查是否执行以查看“mysql_real_escape_string”是否存在。
  • 它选择与 $theType 变量匹配的情况,并将 $theValue 设置为适当的值。
  • 最后,它返回值,因此它可以用于代码中的任何用途。

其余代码是非常简单的数据库插入片段。

$editFormAction 由 php 运行的任何脚本设置,例如 insert.php。一个 if 检查以确认有一个查询字符串。如果有查询字符串,它会附加到 $editForm 操作的末尾。使用上面的 PHP_SELF,这可能是 insert.php?name=Tim&email=hello@world.com&phone=8675309。

下一部分是向数据库中插入信息的神奇之处。

if 检查是否设置了 MM_insert 并且它的值是 form 在继续数据库插入之前。它本质上是一个健全性检查。在那之后,它为变量 $insertSQL 提供来自格式化字符串的值以及从表单传递的信息。您将看到它使用前面的函数 GetSQLValueString 来确保数据已准备好进入数据库。一旦 $insertSQL 获得所有值,它就会选择数据库然后执行查询。

之后,为 $insertGoTo 设置了 success.php。if 检查 QUERY_STRING 是否已传递到此页面。如果有 QUERY_STRING,它会将其附加到 success.php (success.php?name=Tim&email=hello@world.com&phone=8675309)。在 if 检查之后,它通过调用 header 来重定向页面。

我希望这些信息可以帮助您了解脚本的细分。

----- 个人备注 -----

Dreamweaver 不是用于开发 PHP 代码的出色应用程序。如果您想要一个出色的 IDE 用于 PHP,我推荐 PHPStorm(http://www.jetbrains.com/phpstorm/)。我已经使用它两年多了,并且喜欢它。我将它与一个出色的文本编辑器 SublimeText2 (http://www.sublimetext.com/2) 结合使用。

于 2012-06-13T16:22:36.047 回答