【问题标题】:PHP syntax error “unexpected $end”PHP 语法错误“意外的 $end”
【发布时间】:2011-02-09 08:04:30
【问题描述】:

我有 3 个文件 1) show_createtable.html 2) do_showfielddef.php 3) do_showtble.php

1) 第一个文件用于为数据库创建一个新表,它是一个有 2 个输入的表格,表名和字段数。这很好用!

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<h1>Step 1: Name and Number</h1>
<form method="post" action="do_showfielddef.php" />
<p><strong>Table Name:</strong><br />
<input type="text" name="table_name" size="30" /></p>
<p><strong>Number of fields:</strong><br />
<input type="text" name="num_fields" size="30" /></p>
<p><input type="submit" name="submit" value="go to step2" /></p>
</form>


</body>
</html>

2) 此脚本验证字段并创建另一个表单以输入所有表格行。 这也可以正常工作!

<?php
//validate important input
if ((!$_POST[table_name]) || (!$_POST[num_fields])) {
    header( "location: show_createtable.html");
           exit;
}

//begin creating form for display
$form_block = "
<form action=\"do_createtable.php\" method=\"post\">
<input name=\"table_name\" type=\"hidden\" value=\"$_POST[table_name]\">
<table cellspacing=\"5\" cellpadding=\"5\">
  <tr>
    <th>Field Name</th><th>Field Type</th><th>Table Length</th>
  </tr>";

//count from 0 until you reach the number fo fields
for ($i = 0; $i <$_POST[num_fields]; $i++) {
  $form_block .="
  <tr>
  <td align=center><input type=\"texr\" name=\"field name[]\"
  size=\"30\"></td>
  <td align=center>
    <select name=\"field_type[]\">
        <option value=\"char\">char</option>
        <option value=\"date\">date</option>
        <option value=\"float\">float</option>
        <option value=\"int\">int</option>
        <option value=\"text\">text</option>
        <option value=\"varchar\">varchar</option>
        </select>
  </td>
  <td align=center><input type=\"text\" name=\"field_length[]\" size=\"5\">
  </td>
</tr>";
}

//finish up the form 
$form_block .= "
<tr>
    <td align=center colspan=3><input type =\"submit\" value=\"create table\">
    </td>
</tr>
</table>
</form>";

?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Create a database table: Step 2</title>
</head>

<body>
<h1>defnie fields for <? echo "$_POST[table_name]"; ?> 
</h1>
<? echo "$form_block"; ?>

</body>
</html>

问题就在这里 3) 此表单创建表并将它们输入数据库。 我在第 37 行收到错误“解析错误:语法错误,第 37 行 /home/admin/domains/domaina.com.au/public_html/do_createtable.php 中的意外 $end”

<?
$db_name = "testDB";

$connection = @mysql_connect("localhost", "admin_user", "pass")
    or die(mysql_error());

$db = @mysql_select_db($db_name, $connection)
    or die(mysql_error());

$sql = "CREATE TABLE $_POST[table_name](";
    for ($i = 0; $i < count($_POST[field_name]); $i++) {
        $sql .= $_POST[field_name][$i]." ".$_POST[field_type][$i];
    if ($_POST[field_length][$i] !="") {
        $sql .=" (".$_POST[field_length][$i]."),";
        } else {
            $sql .=",";
        }
$sql = substr($sql, 0, -1);
$sql .= ")";

$result = mysql_query($sql, $connection) or die(mysql_error());
if ($result) {
    $msg = "<p>" .$_POST[table_name]." has been created!</p>";

?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Create A Database Table: Step 3</title>
</head>

<body>
<h1>Adding table to <? echo "$db_name"; ?>...</h1>
<? echo "$msg"; ?>
</body>
</html>

【问题讨论】:

  • 只是一个旁注(正如@Gumbo 已经回答了你的问题),只回显一个变量,不需要用 ": echo "$db_name"; echo $db_name; 包围它而且效率更高;)

标签: php syntax syntax-error


【解决方案1】:

此错误消息表示控制结构块未正确关闭。在您的情况下,您的某些控制结构(如 for 循环或最后一个 if)的关闭 } 丢失。

您应该使用适当的缩进和突出显示括号对的编辑器来获得视觉帮助以避免此类错误。

【讨论】:

    【解决方案2】:

    您必须关闭 for 表达式块:

    for ($i = 0; $i < count($_POST[field_name]); $i++) {
        $sql .= $_POST[field_name][$i]." ".$_POST[field_type][$i];
        // ...
    }
    

    【讨论】:

      【解决方案3】:
      $result = mysql_query($sql, $connection) or die(mysql_error());
      if ($result) {
          $msg = "<p>" .$_POST[table_name]." has been created!</p>";
      }
      

      您在最后一个 if 语句中缺少 },而您的 for 循环也缺少 }

      for ($i = 0; $i < count($_POST[field_name]); $i++) {
          $sql .= $_POST[field_name][$i]." ".$_POST[field_type][$i];
          if ($_POST[field_length][$i] !="") {
            $sql .=" (".$_POST[field_length][$i]."),";
          } else {
              $sql .=",";
          }
      } 
      

      【讨论】:

        【解决方案4】:

        您的for 循环未终止。你错过了}

        for ($i = 0; $i < count($_POST[field_name]); $i++) {
          $sql .= $_POST[field_name][$i]." ".$_POST[field_type][$i];
        }

        正如其他人所指出的,最后一个 if 语句也缺少 }

        if ($result) {
          $msg = "< p>" .$_POST[table_name]." has been created!< /p>";
        }

        【讨论】:

          【解决方案5】:

          风格提示:使用HEREDOCs 将文本块分配给变量,而不是您正在使用的可怕的多行反斜杠构造。如果/当您碰巧在某处忘记了 \ 并因解析错误而中断脚本时,它们会更容易阅读且不易出错。

          【讨论】:

            【解决方案6】:

            我刚刚解决了这个错误,检查我的代码后,我没有打开的标签/大括号。
            对我来说,我在移动到亚马逊服务器时遇到了这个错误。
            原来我需要在我的php.ini 中启用short_open_tag = On
            这为我解决了这个错误。

            【讨论】:

              【解决方案7】:

              在您的php.ini(php 配置)更改:

              short_open_tag = 关闭


              您在第 1 行不久打开了 php 标签
              只需找到所有 并将其替换为

              【讨论】:

                猜你喜欢
                • 2012-05-16
                • 2014-12-18
                • 2012-08-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-08-08
                相关资源
                最近更新 更多