2013-07-16 81 views
1

首先,我需要透露一下我是一个主要的noob,但我认为我越来越好了! (在很大程度上得益于堆栈溢出社区的帮助:-D)使用mysql保存的数据填充表格

我为项目里程碑创建了一个动态生成的菜单。它使用一个表格,允许用户输入每个里程碑的日期和描述,并将它们保存到数据库中。每次用户想要输入一个新的里程碑时,他们都会点击一个按钮来动态生成一个新行。 (请参见图片以便澄清:https://dl.dropboxusercontent.com/u/11993667/milestones_ex.png注意:复选框仅用于现在删除行)

到目前为止,这一切都很好。问题是,一旦用户保存里程碑,我希望他们能够重新访问页面并修改里程碑或添加更多里程碑。显然,这需要脚本查询数据库并相应地生成/填充行。

我拼凑在一起的下面的代码来从数据库中生成表单,但由于某种原因它崩溃了页面。我检查了错误日志,并注意到相关似乎出现了。我想知道是否有人会看到我所拥有的或者能够推荐替代方法的明显错误。万一它有帮助,我写这将被部署为WordPress的插件。

任何帮助,非常感谢。

function upsmart_create_milestones_form() { 
     global $wpdb; 
     $data = $wpdb->get_results($wpdb->prepare("SELECT * FROM upsmart_milestones WHERE wordpress_id=%d",get_current_user_id()),ARRAY_A); 
     $months = array('January','February','March','April','May','June','July ','August','September','October','November','December'); 
     echo <<<EOHTML 
     <form method='post'> 
      <h3>Project Milestones</h3> 
      <script type="text/javascript" src="http://upsmart.com/wp-content/plugins/upsmart_sitemanager/js/create_business_milestone.js"></script> 
      <input type="button" value="Add Row" onclick="addRow('dataTable')" /> 
      <input type="button" value="Delete Row" onclick="deleteRow('dataTable')" /> 

      <table id="dataTable" width="350px" border="1"> 
EOHTML; 
     foreach($data as $milestone){ 
      echo <<<EOHTML 
      <tr> 
       <td><input type="checkbox" name="chk[]"/></td>\ 
       <td> 
        <select name="month[]"> 
EOHTML; 
       foreach ($months as $month) { 
        if($month == $milestone->month){ 
         echo <<<EOHTML 
         <option value="{$month}" selected>$month</option> 
EOHTML; 
        continue; 
        } 
        echo <<<EOHTML 
        <option value="{$month}">$month</option> 
EOHTML; 
       } 
       echo <<<EOHTML 
       </select> 
       <select name="day[]"> 
EOHTML; 
       foreach (range(1, 31) as $day) { 
        if($month == $milestone->day){ 
         echo <<<EOHTML 
         <option value="{$day}" selected>$day</option> 
EOHTML; 
        } 
        echo <<<EOHTML 
        <option value="{$day}">{$day}</option> 
EOHTML; 
       } 
       echo <<<EOHTML 
       </select> 
       <select name="year[]"> 
EOHTML; 
       foreach (range(2013, 1990, -1) as $year) { 
        if($month == $milestone->year){ 
         echo <<<EOHTML 
         <option value="{$year}" selected>$year</option> 
EOHTML; 
        } 
        echo <<<EOHTML 
        <option value="{$year}">{$year}</option> 
EOHTML; 
       } 
       echo <<<EOHTML 
        </select> 
       </td> 
       <td> <input type="text" name="txt[]"/>$milestone->description</td> 
      </tr> 
EOHTML; 
     } /* END FOR EACH LOOP ON MILESTONES */ 

    echo <<<EOHTML 
     </table> 
     <input type='submit' value='Save'/> 
     </form> 
EOHTML; 
    }/* END FUNCTION */ 
+0

只是一个建议。考虑一个PHP框架。我更喜欢[CodeIgniter](http://ellislab.com/codeigniter),因为它是内置的帮助,在工作时总是很容易访问。 –

+0

@ChibuezeOpata OP似乎在使用WordPress。 – jeroen

+0

@ jeroen啊,是的,我正在使用wordpress。认为在这种情况下披露会很重要吗? – neanderslob

回答

0

您的脚本语法错误:

  foreach ($months as $month) { 
       if($month == $milestone->month){ 
        echo <<<EOHTML 
        <option value="{$month}" selected>$month</option> 
EOHTML; 
       continue: 
         ^This should be ; and not : 
       } 
       echo <<<EOHTML 
       <option value="{$month}">$month</option> 
EOHTML; 
      } 
+0

那真是令人尴尬;感谢您指出了这一点。我修好了,但还是不高兴。鉴于这个错误,我猜我可能会发现更多,如果我看起来够硬。总的来说,我的代码的结构看起来相对合理吗?我仍然在搞清楚这个完整的PHP事情。再次感谢! – neanderslob

+0

@Sam很难说,我总是发现WordPress代码有点混乱。我可能会使用一个变量来设置'选择'值,以避免代码重复,我肯定会摆脱内联的JavaScript和样式,但这是更多的HTML相关的PHP相关。 – jeroen

+1

原来你的答案就是我所需要的。我将代码格式化为使用我的文本编辑器将其输入到这篇文章中,并忘记将其设置回原来的位置。一旦我做到了这一点,并实施了你的语法建议,我就确定了。非常感谢你的帮助。 – neanderslob