-1

我开始用 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 文件中的函数并使表单执行插入的函数,但这似乎不起作用。

4

3 回答 3

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;
    }
?>
于 2013-01-01T12:10:40.610 回答
0

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

<?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>

`

于 2013-01-01T12:44:41.287 回答
-1

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

讨厌的东西也可以作为 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

}
于 2013-01-01T11:36:04.680 回答