Blog maken maar krijg foutmelding
Ik ben een beginner met php en loop vast bij het maken van een blog.
De pagina's werken prima, tot het moment dat ik een blogpost schrijf en deze wil submitten.
Wanneer ik het blog heb geschreven en op de knop maak post klik krijg ik de volgende foutmelding:
Quote:
Could not insert data into the database. Incorrect integer value: '' for column 'post_id' at row 1
Ik kan niet ondekken waar ik een fout heb gemaakt, hopelijk kan iemand mij hierbij helpen.
De code die ik geschreven heb is als volgt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
include_once 'inc/header.inc';
$message = "";
$titleError ="";
$blogpostError = "";
$errors = array("empty" => array("title" => "Geef uw post een titel.",
"blogpost" => "Schrijf iets in uw blogpost."));
if (isset($_POST['submit'])) {
//Strip slashes en trim input voor de controle op leeg, zonder het gebruik van $_POST['submit']
foreach($_POST as $key => $input) {
if ($key!="submit") {
$stripTrim[$key] = stripslashes(trim($input));
}
}
//Controleer of de userinputs leeg zijn
foreach($stripTrim as $key => $input) {
if(empty($input)){
$error[$key] = $errors['empty'][$key];
} else {
$error[$key] = "";
}
}
$error = array_filter($error);
if (empty($error)) {
if ($_POST['submit'] == 'Maak post'){
if (create_post($connect, NULL, $_SESSION['user_id'], $stripTrim['title'], $stripTrim['blogpost'], False)) {
unset($_POST);
header("Location: index.php?page=editposts");
exit();
}
} elseif ($_POST['submit'] == 'Wijzig post') {
if(create_post($connect, $_SESSION['postID'], $_SESSION['user_id'], $stripTrim['title'], $stripTrim['blogpost'], True)) {
unset($_POST);
header("Location: index.php?page=editposts");
exit();
}
}
}
}
if (isset($_GET['editPID']) && isset($_SESSION['user_id'])) {
$postID = $_SESSION['postID'] = $_GET['editPID'];
//Ophalen post titel en inhoud
$retrieveQuery = "SELECT * FROM posts WHERE post_id = $postID";
$retrieveResult = mysqli_query($connect, $retrieveQuery) or die("Kon geen toegang tot de database krijgen " . mysqli_error($connect));
if (mysqli_num_rows($retrieveResult) == 1) {
$retrieveData = mysqli_fetch_assoc($retrieveResult);
$postTitle = $retrieveData['post_title'];
$postContent = $retrieveData['post_content'];
}
}
if (isset($_POST['reset']) && $_POST['reset'] == "Legen") {
unset($_POST);
}
if (isset($_POST['reset']) && $_POST['reset'] == "Wijzigingen ongedaan maken"){
header("Location: post.php?editPID=" . $_SESSION['postID'] ."");
exit();
}
?>
<div class="wrapper">
<div class="side-wrapper">
<div class="small-wrapper">
<div class="panel-head">
<h3>Bloggers</h3>
</div>
<div class="bloggers side-content">
<ul>
<?php
get_bloggers($connect);
?>
</ul>
</div>
</div>
</div>
<div class="main-content">
<?php if (isset($_SESSION['user_id'])) {?>
<span class="message"><?php echo $message;?></span>
<div class="form post">
<h2>Your blogpost</h2>
<form method="POST" action="post.php">
<span class = error><?php if(isset($error['title'])) { echo $error['title'];}?></span>
<label for="form-title">Title:</label>
<input type="text" id="form-title" name="title" value="<?php if(isset($_POST['title'])){echo htmlentities($_POST['title']);}elseif(isset($_GET['editPID'])){echo $postTitle;} else{ echo "";}?>">
<span class = error><?php if(isset($error['blogpost'])){echo $error['blogpost'];}?></span>
<label for="form-blogpost">Blog post:</label>
<textarea rows="15" cols="50" name="blogpost"><?php if(isset($_POST['blogpost'])){ echo htmlentities($_POST['blogpost']);}elseif(isset($_GET['editPID'])){ echo $postContent; }else{ echo "";}?></textarea>
<input class="btn" type="submit" name="submit" <?php if (!isset($_GET['editPID'])){ echo "value=\"Maak post\"";}else{echo "value=\"Wijzig post\"";}?>>
<input class="btn" type="submit" name="reset" <?php if (!isset($_GET['editPID'])){ echo "value=\"Legen\"";}else{echo "value=\"Wijzigingen ongedaan maken\"";}?>>
</form>
</div>
<?php } else {?>
<span class="message">U moet ingelogd zijn om een post te maken!</span>
<?php }?>
</div>
</div>
<?php
include_once 'inc/footer.inc';
?>
include_once 'inc/header.inc';
$message = "";
$titleError ="";
$blogpostError = "";
$errors = array("empty" => array("title" => "Geef uw post een titel.",
"blogpost" => "Schrijf iets in uw blogpost."));
if (isset($_POST['submit'])) {
//Strip slashes en trim input voor de controle op leeg, zonder het gebruik van $_POST['submit']
foreach($_POST as $key => $input) {
if ($key!="submit") {
$stripTrim[$key] = stripslashes(trim($input));
}
}
//Controleer of de userinputs leeg zijn
foreach($stripTrim as $key => $input) {
if(empty($input)){
$error[$key] = $errors['empty'][$key];
} else {
$error[$key] = "";
}
}
$error = array_filter($error);
if (empty($error)) {
if ($_POST['submit'] == 'Maak post'){
if (create_post($connect, NULL, $_SESSION['user_id'], $stripTrim['title'], $stripTrim['blogpost'], False)) {
unset($_POST);
header("Location: index.php?page=editposts");
exit();
}
} elseif ($_POST['submit'] == 'Wijzig post') {
if(create_post($connect, $_SESSION['postID'], $_SESSION['user_id'], $stripTrim['title'], $stripTrim['blogpost'], True)) {
unset($_POST);
header("Location: index.php?page=editposts");
exit();
}
}
}
}
if (isset($_GET['editPID']) && isset($_SESSION['user_id'])) {
$postID = $_SESSION['postID'] = $_GET['editPID'];
//Ophalen post titel en inhoud
$retrieveQuery = "SELECT * FROM posts WHERE post_id = $postID";
$retrieveResult = mysqli_query($connect, $retrieveQuery) or die("Kon geen toegang tot de database krijgen " . mysqli_error($connect));
if (mysqli_num_rows($retrieveResult) == 1) {
$retrieveData = mysqli_fetch_assoc($retrieveResult);
$postTitle = $retrieveData['post_title'];
$postContent = $retrieveData['post_content'];
}
}
if (isset($_POST['reset']) && $_POST['reset'] == "Legen") {
unset($_POST);
}
if (isset($_POST['reset']) && $_POST['reset'] == "Wijzigingen ongedaan maken"){
header("Location: post.php?editPID=" . $_SESSION['postID'] ."");
exit();
}
?>
<div class="wrapper">
<div class="side-wrapper">
<div class="small-wrapper">
<div class="panel-head">
<h3>Bloggers</h3>
</div>
<div class="bloggers side-content">
<ul>
<?php
get_bloggers($connect);
?>
</ul>
</div>
</div>
</div>
<div class="main-content">
<?php if (isset($_SESSION['user_id'])) {?>
<span class="message"><?php echo $message;?></span>
<div class="form post">
<h2>Your blogpost</h2>
<form method="POST" action="post.php">
<span class = error><?php if(isset($error['title'])) { echo $error['title'];}?></span>
<label for="form-title">Title:</label>
<input type="text" id="form-title" name="title" value="<?php if(isset($_POST['title'])){echo htmlentities($_POST['title']);}elseif(isset($_GET['editPID'])){echo $postTitle;} else{ echo "";}?>">
<span class = error><?php if(isset($error['blogpost'])){echo $error['blogpost'];}?></span>
<label for="form-blogpost">Blog post:</label>
<textarea rows="15" cols="50" name="blogpost"><?php if(isset($_POST['blogpost'])){ echo htmlentities($_POST['blogpost']);}elseif(isset($_GET['editPID'])){ echo $postContent; }else{ echo "";}?></textarea>
<input class="btn" type="submit" name="submit" <?php if (!isset($_GET['editPID'])){ echo "value=\"Maak post\"";}else{echo "value=\"Wijzig post\"";}?>>
<input class="btn" type="submit" name="reset" <?php if (!isset($_GET['editPID'])){ echo "value=\"Legen\"";}else{echo "value=\"Wijzigingen ongedaan maken\"";}?>>
</form>
</div>
<?php } else {?>
<span class="message">U moet ingelogd zijn om een post te maken!</span>
<?php }?>
</div>
</div>
<?php
include_once 'inc/footer.inc';
?>
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 23/05/2017 21:34:32 door - Ariën -
Je moet vast een ander script hebben.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
function create_post($connect, $postID, $authorID, $title, $content, $edited) {
$author = $authorID;
$postTitle = mysqli_real_escape_string($connect, $title);
$postContent = mysqli_real_escape_string($connect, $content);
$date = mysqli_real_escape_string($connect, date('Y-m-d H:i:s'));
//Controleer of de blog post is gewijzigd of niet
if (!$edited) {
$insertQuery = "INSERT INTO posts (post_id,
post_author,
post_title,
post_content,
post_date,
post_edited)
VALUES ('$postID',
'$author',
'$postTitle',
'$postContent',
'$date',
'0')";
} else {
$insertQuery = "UPDATE posts SET post_title = '$postTitle',
post_content = '$postContent',
post_date = '$date',
post_edited = '1'
WHERE post_id = '$postID'";
}
$insertResult = mysqli_query($connect, $insertQuery) or die("Kon de data niet in de database zetten. " . mysqli_error($connect));
// if (mysqli_affected_rows($connect) == 1 && !$edited) {
// return "Your blogpost has been created!";
// } else {
// return "Your blogpost has been edited!";
// }
if (mysqli_affected_rows($connect) == 1) {
return true;
}
}
$author = $authorID;
$postTitle = mysqli_real_escape_string($connect, $title);
$postContent = mysqli_real_escape_string($connect, $content);
$date = mysqli_real_escape_string($connect, date('Y-m-d H:i:s'));
//Controleer of de blog post is gewijzigd of niet
if (!$edited) {
$insertQuery = "INSERT INTO posts (post_id,
post_author,
post_title,
post_content,
post_date,
post_edited)
VALUES ('$postID',
'$author',
'$postTitle',
'$postContent',
'$date',
'0')";
} else {
$insertQuery = "UPDATE posts SET post_title = '$postTitle',
post_content = '$postContent',
post_date = '$date',
post_edited = '1'
WHERE post_id = '$postID'";
}
$insertResult = mysqli_query($connect, $insertQuery) or die("Kon de data niet in de database zetten. " . mysqli_error($connect));
// if (mysqli_affected_rows($connect) == 1 && !$edited) {
// return "Your blogpost has been created!";
// } else {
// return "Your blogpost has been edited!";
// }
if (mysqli_affected_rows($connect) == 1) {
return true;
}
}
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 23/05/2017 21:34:48 door - Ariën -
Waarom insert je een NULL als een ID? Ik heb een vermoeden dat het datatype die je gebruikt dit niet toestaat.
Eigenlijk best logisch "bloos" $postID was helemaal niet gedeclareerd, en wordt er automatisch toegewezen. Thanks voor de feedback!
Toevoeging op 24/05/2017 11:43:57:
Hoe kan ik er nu voor zorgen dat mijn admin account alle blogs kan aanpassen of verwijderen?! Dat moet waarschijnlijk op de index.php pagina komen maar ik kom er nog niet uit
Gewijzigd op 23/05/2017 21:50:32 door Michel Bak
Het ligt er aan hoe je dit wilt integreren in je site. Je kan een apart beheerpaneel maken die alleen toegankelijk is als men bepaalde rechten heeft, maar je kan ook bij het reguliere bewerk- en verwijderproces als extraatje controleren op een bepaald recht, naast de controle op je UserID.
Dat laatste is de bedoeling voor nu. Ik heb nl al voor iedere gebruiker dat ze hun eigen posts kunnen wijzigen of verwijderen, nu wil ik dat ik in hetzelfde soort menu de admin dit voor iedereen kan
En waar loop je nu op vast?
Ik krijg het voor elkaar om voor iedere gebruiker zijn eigen blog aan te kunnen passen (inclusief) admin, maar om admin ook de andere posts te laten wijzigen of verwijderen lukt me niet
Wat lukt er niet aan?
Michel Bak op 26/05/2017 19:33:33:
Ik krijg het voor elkaar om voor iedere gebruiker zijn eigen blog aan te kunnen passen (inclusief) admin, maar om admin ook de andere posts te laten wijzigen of verwijderen lukt me niet
De admin die iedere blog mag aanpassen is dan ook wel iets anders dan een ingelogde gebruiker die alleen zijn eigen blogs mag aanpassen.
De admin zou dit via het admin menu kunnen doen en in de url het blog_id kunnen meegeven:
http://example.org/admin/blog/edit?id=123
Een normale ingelogde gebruiker daarvan hebben we het user_id in de sessie staan dus
http://example.org/my-blogs/edit?id=123
Nu hebben we hier wel een groot beveiliging issue: Als id 123 van een andere gebruiker is dan moet er wel een dikke 403 forbidden foutmelding teruggegeven worden.
Ik ga er naar kijken, ben even afwezig geweest. Bedankt voor de informatie!