2017-12-27 21 views
0

Ich habe einen Titel/ein Anmeldeformular zum Einreichen eines Blogposts. Beim Senden sucht es nach dem gleichen Titel in der Datenbank (was nicht erlaubt ist) und gibt dann einen Fehler zurück, um Ihnen zu sagen, dass Sie Ihren Titel ändern müssen. Ich möchte, dass beide Felder nach dem POST gefüllt bleiben, denn duh, ein Benutzer sollte nicht den ganzen Eintrag neu schreiben müssen. Es behält jedoch nur den Titel. session_start existiert in der header.php. Bitte ignorieren Sie alle anfälligen SQL-Injektionen.Wie behalten Sie mehrere Felder nach dem POST gefüllt?

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

* ignorieren Sie bitte jede mögliche SQL-Injection-gefährdeten * - sie ignoriert nie werden sollte! – Philipp

+0

Ich mache eine Uni-Aufgabe, und diese zu lösen, ist (bisher) keine Voraussetzung. Ich bin alles für gute Programmierpraktiken, aber nur wenn die notwendige Funktionalität erreicht ist. – mechanicarts

+0

Wenn ich Sie Dozent bin, würde ich dies eine Voraussetzung machen, um die Aufgabe zu lösen - scheint, wie sie Ihnen beibringen, unsichere Web-Anwendungen zu bauen .. – Philipp

Antwort

6

Textarea hat keine value Attribut ist der Gehalt zwischen <textarea> und </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

Zusätzlich sollten Sie 'htmlentities' – Philipp

+0

@Philipp verwenden: Sie haben Recht, ich habe es dort hinzugefügt. Der Hauptpunkt war nicht das Entweichen, sondern HTML und ungültiges Attribut "value" für "textarea". – panther

+0

Ich hätte nie gedacht, Textattribute nachzuschlagen. Möglicherweise müssen Sie auf diesem HTML auffrischen. Vielen Dank! – mechanicarts

4

Sie benötigen Wert zwischen TextArea- Start setzen und End-Tag Ihr Wert

in Ihrem Fall, wird es

<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

Sie sich shoul den Wert beetween Textarea-Tags setzen

<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

Textarea hat kein Wertattribut

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

Verwandte Themen