2017-12-27 7 views
0

私はブログ投稿を投稿するためのタイトル/エントリーフォームを持っています。送信時には、dbの同じタイトル(これは許可されていません)を確認し、エラーを返してタイトルを変更するように指示します。私は、POSTの後に両方のフィールドを埋めるようにしておきたいと思います。なぜなら、ユーザはエントリ全体を書き直す必要がないからです。ただし、タイトルのみを保持します。 session_startはheader.phpに存在します。 SQLインジェクションの脆弱なセクションは無視してください。POST後に複数のフィールドを保持する方法は?

<?php 
require("connect.php"); 
require("header.php"); 
if(isset($_POST['post'])){ 
$title = $_POST['blogtitle']; 
$entry = $_POST['blogentry']; 
$author = $_SESSION['username']; 
$newBlogPostQuery = "SELECT * FROM contents WHERE title='$title'"; 
$newBlogPostResult = mysqli_query($conn, $newBlogPostQuery) or die("Error:".mysqli_error($conn)); 
$newBlogPostRow = mysqli_fetch_array($newBlogPostResult, MYSQLI_ASSOC); 

if(mysqli_num_rows($newBlogPostResult) ==1){ 
    $blogPostExists = TRUE; 
} 
else{ 
    $blogQuery = mysqli_query($conn, "INSERT INTO contents (timestamp, title, entry, authorName) VALUES (now(), '$title', '$entry', '$author')"); 
    if($blogQuery){ 
     header("Location: index.php"); 
    } 
} 
} 

?> 
<div class="flex-enable flex-center blog-body"> 
<?php if(isset($blogPostExists)&&$blogPostExists){ 
       echo '<div class="exception" style="margin: 0;"><span class="small-white-subtitle">Please use a different title.</div>'; 
      } 
      ?> 
    <form class="flex-enable flex-column" method="POST"> 
     <label for="blogtitle"><span class="blog-insert-title">Title</span></label> 
     <input class="blog-input-text small-white-title" id="blogtitle" type="text" name="blogtitle" placeholder="Your title" value="<?php echo isset($_POST['blogtitle']) ? $_POST['blogtitle']:''; ?>"> 
     <label for="blogentry"><span class="blog-insert-title">Blog post</span></label> 
     <textarea class="blog-input-text blog-insert-entry" id="blogentry" type="text" rows="20" name="blogentry" placeholder="Write something amazing here..." value="<?php echo isset($_POST['blogentry']) ? $_POST['blogentry']:''; ?>"></textarea> 
     <input class="form-button small-white-title" type="submit" name="post" value="Post"> 
    </form> 
</div> 
+2

* *任意のSQLインジェクション脆弱セクションを無視してください - それらは無視すべきではありません! – Philipp

+0

私はユニ・アサインをしており、それらを解決することは必須条件ではありません(これまでのところ)。私はすべて、良いコーディングのためのものですが、必要な機能が達成された後でなければなりません。 – mechanicarts

+0

私はあなたが講師であれば、私は仕事を解決するためにこれを必要とするでしょう - あなたが安全でないWebアプリケーションを構築するよう教えるようです。 – Philipp

答えて

6

Textarea何を持っていないvalue属性は、コンテンツが<textarea></textarea>の間にあります。

<textarea class="blog-input-text blog-insert-entry" id="blogentry" type="text" rows="20" name="blogentry" placeholder="Write something amazing here..."><?php echo isset($_POST['blogentry']) ? htmlentities($_POST['blogentry']) : ''; ?></textarea> 
+0

はそれに加えて、あなたは 'htmlentities' – Philipp

+0

@Philipp使用する必要があります。要点はエスケープではなく、HTMLと 'textarea'のための無効な' value'属性です。 – panther

+0

私はtextarea属性を調べることは決して考えなかったでしょう。そのhtmlを更新する必要があるかもしれません。ありがとう! – mechanicarts

4

は、あなたがのtextareaタグbeetween値を入れshoul、それは

<textarea class="blog-input-text blog-insert-entry" id="blogentry" type="text" rows="20" name="blogentry" placeholder="Write something amazing here..."><?php echo isset($_POST['blogentry']) ? $_POST['blogentry']:''; ?></textarea> 
3

になりますあなたのケースでのtextarea開始タグと終了タグの間で使用値

を値を配置する必要があり

<textarea class="blog-input-text blog-insert-entry" id="blogentry" type="text" rows="20" name="blogentry" placeholder="Write something amazing here..." ><?php echo isset($_POST['blogentry']) ? $_POST['blogentry']:''; ?></textarea> 
2

テキストエリアに値の属性はありません

<form class="flex-enable flex-column" method="POST"> 
    <label for="blogtitle"><span class="blog-insert-title">Title</span></label> 
    <input class="blog-input-text small-white-title" id="blogtitle" type="text" name="blogtitle" placeholder="Your title" value="<?php if(isset($_POST['post'])){ echo $_POST['blogtitle']; } ?>"> 
    <label for="blogentry"><span class="blog-insert-title">Blog post</span></label> 
    <textarea class="blog-input-text blog-insert-entry" id="blogentry" type="text" rows="20" name="blogentry" placeholder="Write something amazing here..." value="<?php if(isset($_POST['post'])){ echo $_POST['blogentry']; } ?>"></textarea> 
    <input class="form-button small-white-title" type="submit" name="post" value="Post"> 

関連する問題