为PHP cms创建计划

时间:2013-01-01 10:27:04

标签: php forms content-management-system

我开始在PHP中创建一个cms,在安全性和整体设计方面我有点迷失。这是非常基本的 - 它将能够添加和删除帖子/文章。

我想保持紧凑,尽可能少的文件。现在我正在处理插入函数的简单形式:

<form action="" method="POST">
  Title: <input type="text" name="title"></input>
  <br>
  Body:
  <br>
  <textarea cols="50" rows="5" name="body"></textarea>
  <br>
  <input type="submit" name="insert" value="Insert data into db" />
</form>

我故意将动作留空,因为我知道如何使用插入脚本执行此操作,但正如我所说,我想将其全部保存在1个文件中。我的插入功能有效,但要将其链接到表单,我必须将其放在一个我不想做的单独文件中。

我在想某种方式链接到我的cms文件中的一个函数,并让表单执行插入的函数,但这似乎不起作用。

3 个答案:

答案 0 :(得分:1)

请访问此网站http://www.ksoft.is-great.org/blog/view/create-blog-with-php,这将有助于您自己创建高级安全的博客和cms。她是我找到的一个例子

<?php
    require('db.php');
    function html_form($title='',$html='',$id='')
    {
        echo '
        <pre>
            <form method="post" id="form">
                <input value="'.$id.'" name="id" type="hidden">
                TITLE : <input value="'.$title.'" name="title" type="text">
                HTML : <textarea style="width:350px;" name="html" placeholder="Put your html     here..">'.$html.'
                </textarea>
                <input value="submit" type="submit">
            </form>
        </pre>';
    }

    function create_blog($title,$html)
    {
        $date = date('d.m.Y');
        $html = mysql_real_escape_string($html);
        $sql = "INSERT INTO blog (title, html, date) VALUES ('$title','$html','$date');";
        $q = mysql_query($sql);
        if($q) return true;
        else return false;
        echo mysql_error();
        mysql_close();
    }

    function get_title_id($title)
    {
        $sql = "select * from blog where title='$title'";
        $q = mysql_query($sql);
        while($ks = mysql_fetch_array($q))
        {
            return $ks['id'];
        }
        echo mysql_error();
    }

    function edit_blog($title,$html,$id)
    {
        $date = date('d.m.Y');
        $html = mysql_real_escape_string($html);
        $sql = "UPDATE blog SET title = '$title', html = '$html', date = '$date' WHERE id = '$id'";
        $q = mysql_query($sql);
        if($q) return true;
        else return false;
        mysql_close();
    }

    function delete_blog($id)
    {
        $sql= "delete from blog where id='$id'";
        $q = mysql_query($sql);
        if($q) return true;
        else return false;
        mysql_close();
    }

    function menu()
    {
        $sql = "SELECT * FROM blog ORDER BY id DESC LIMIT 0 , 8 ";
        $q = mysql_query($sql);
        while($data = mysql_fetch_array($q))
        {
            echo '<a id="left_menu" href="?id=%27.$data[%27id%27].%27"> '.$data['title'].'</a><br>';
        }
        mysql_close();
    }

    function blog_list()
    {
        $sql = "select * from blog";
        $q = mysql_query($sql);
        echo '<form method="post"><select name="id">';
        while($data = mysql_fetch_array($q)){
            echo '<option value=".$data[" id'].'"=""> '.$data['title'].'</option>';
        }
        echo '</select><br><input value="submit" type="submit"></form>';
    }

    function get_title($id)
    {
        $sql = "select * from blog where id='$id'";
        $q = mysql_query($sql);
        while($data = mysql_fetch_array($q)){
            return $data['title'];
        }
    }

    function get_html($id)
    {
        $sql = "select * from blog where id='$id'";
        $q = mysql_query($sql);
        while($data = mysql_fetch_array($q)){
            return $data['html'];
        }
    }

    function check_id($id)
    {
        $sql = "select * from blog where id='$id'";
        $q = mysql_query($sql);
        if(mysql_num_rows($q)>0) return true;
        else return false;
    }
?>

答案 1 :(得分:0)

只有在提交表单时才需要调用insert函数,否则执行其余操作。所以这应该是你问题的答案:

<?php 

if($_POST){
   // This part is executed only when form is submitted. 
  // insert code will come here.
}

?>

<form action="" method="POST">
  Title: <input type="text" name="title"></input>
  <br>
  Body:
  <br>
  <textarea cols="50" rows="5" name="body"></textarea>
  <br>
  <input type="submit" name="insert" value="Insert data into db" />
</form>

`

答案 2 :(得分:-1)

对于表单操作,使用$_SERVER['PHP_SELF'];这将使用当前网址填充表单操作字段,因此您不必定位另一个文件...它具有与将其留空相同的效果,但更安全

讨厌的东西也可以放在表单字段中作为SQL注入等值...这里有一个非常好的函数 mysql_real_escape_string ,它会使任何注入的SQL查询无法使用。

此外,您应该尝试尽可能多地验证所有字段。

我为此创造了一些东西:

checkForm($formData = array()) {

 foreach ($formData as $key=>$element) {

  $elementType = explode('-',$key);

  siwtch ($elementType[0]) {

    case 'textarea':
      //validate text area
    break;

    case 'textfield':
      //validate text field
    break;

    case 'numbers':
      //validate numbers
    break;

    case 'submit':
     //skip
    break;

    default:
      //validate everything
    break;
  }

 }

}

对于退货选项,这取决于您。在我的例子中,此函数返回一组经过验证和清理的值。

此表格应如下所示:

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
   <input type="text" name="textfield-title" placeholder="title" /><br />
   <textarea name="textarea-body" placeholder="body"></textarea>
   <input type="submit" name="submit-blogEntry" value="Submit" />
</form>

为了触发整个事情我可以推荐这样的事情:

form.php   

if (isset($_POST['submit-blogEntry'])) {

  checkForm();

} else {

  //display form

}