-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 に答える