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