Afbeelding uploaden in database en daarna tonen
Ik heb een vraag, ik ben bezig met een paneel waar gebruikers informatie in kan worden bewerkt, nu wil ik dat gebruikers ook hun afbeelding kunnen bewerken. Is dit mogelijk? En zoja, hoe? Ik had al wat tutorials gevonden op internet maar ik kom er niet uit hoe ik dit moet implenteren in mijn systeem.
Dit is een stukje van mij code
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
112
113
114
115
116
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
112
113
114
115
116
<div class="box-body">
<?php
if(isset($_GET['action'])){
if($_GET['action'] == "bewerk"){
if(trim($_POST['naam']) == ""){
$_POST['naam'] = $mdFetch['naam'];
}
if(trim($_POST['email']) == ""){
$_POST['email'] = $mdFetch['email'];
}
if(isset($_POST['admin'])){
$admin = 1;
}else{
$admin = 0;
}
if(trim($_POST['afbeelding']) == ""){
$_POST['afbeelding'] = $mdFetch['afbeelding'];
}
$passerror = false;
if(trim($_POST['pass1']) == ""){
$password = $mdFetch['wachtwoord'];
}else{
if(trim($_POST['pass2']) == ""){
$passerror = true;
}else{
if($_POST['pass1'] == $_POST['pass2']){
$password = sha1($_POST['pass1']);
}else{
$passerror = true;
}
}
}
if(!$passerror){
if($db->query("UPDATE gebruikers SET naam='".$db->real_escape_string($_POST['naam'])."',
email='".$db->real_escape_string($_POST['email'])."',
wachtwoord='".$password."',
admin='".$admin."',
WHERE id='".$db->real_escape_string($mdFetch['id'])."'")){
?>
<div class="callout callout-info">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>Gelukt!</strong> Je gegevens zijn bijgewerkt!
</div><?php
}else{
?>
<div class="callout callout-danger">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>Mislukt!</strong> Je gegevens zijn niet bijgewerkt!
</div>
<?php
}
}else{
?>
<div class="callout callout-danger">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>Mislukt!</strong> Je gegevens zijn niet bijgewerkt, de wachtwoorden zijn niet ingevuld of niet gelijk aan elkaar!
</div>
<?php
}
}elseif($_GET['action'] == "verwijder"){
if($db->query("DELETE FROM gebruikers WHERE id='".$db->real_escape_string($_GET['id'])."'")){
?>
<div class="callout callout-info">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>Gelukt!</strong> Je hebt je account verwijderd!
</div>
<?php
}else{
?>
<div class="callout callout-danger">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>Mislukt!</strong> Je hebt je account niet verwijderd!
</div>
<?php
}
}
}else{
?>
<?php include ("afbeelding/filter.php"); ?>
<form action="?id=<?php echo $mdFetch['id']; ?>&action=bewerk" enctype="multipart/form-data" method="post">
<div class="form-group">
<label for="id">Medewerker ID</label>
<input type="text" class="form-control" disabled="" name="id" value="<?php echo $mdFetch['id']; ?>">
<p class="help-block">Het ID kan niet worden bewerkt.</p>
</div>
<div class="form-group">
<label for="naam">Gebruikersnaam</label>
<input type="text" class="form-control" name="naam" value="<?php echo $mdFetch['naam']; ?>">
</div>
<div class="form-group">
<label for="email">Emailadres</label>
<input type="text" class="form-control" name="email" value="<?php echo $mdFetch['email']; ?>">
</div>
<div class="form-group">
<label for="email">Wachtwoord</label>
<input type="password" class="form-control" name="pass1">
</label>
<label>Bevestig wachtwoord </label>
<input type="password" class="form-control" name="pass2"/>
<p class="help-block">Laat deze velden leeg als het wachtwoord niet gewijzigd hoeft te worden.</p>
</div>
<div class="form-group">
<input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50"/>
</div>
<?php if($userFetch['admin'] == 1){ ?>
<div class="form-group">
<label>Rang</label> <br>
<input type="radio" name="admin"> Administrator
<input type="radio" name="medewerker"> Medewerker <br><br>
<?php } ?>
<input type="submit" id="submit" class="btn btn-primary btn-flat" value="Bewerk!">
</form>
<?php } ?>
</div>
</div>
<?php
if(isset($_GET['action'])){
if($_GET['action'] == "bewerk"){
if(trim($_POST['naam']) == ""){
$_POST['naam'] = $mdFetch['naam'];
}
if(trim($_POST['email']) == ""){
$_POST['email'] = $mdFetch['email'];
}
if(isset($_POST['admin'])){
$admin = 1;
}else{
$admin = 0;
}
if(trim($_POST['afbeelding']) == ""){
$_POST['afbeelding'] = $mdFetch['afbeelding'];
}
$passerror = false;
if(trim($_POST['pass1']) == ""){
$password = $mdFetch['wachtwoord'];
}else{
if(trim($_POST['pass2']) == ""){
$passerror = true;
}else{
if($_POST['pass1'] == $_POST['pass2']){
$password = sha1($_POST['pass1']);
}else{
$passerror = true;
}
}
}
if(!$passerror){
if($db->query("UPDATE gebruikers SET naam='".$db->real_escape_string($_POST['naam'])."',
email='".$db->real_escape_string($_POST['email'])."',
wachtwoord='".$password."',
admin='".$admin."',
WHERE id='".$db->real_escape_string($mdFetch['id'])."'")){
?>
<div class="callout callout-info">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>Gelukt!</strong> Je gegevens zijn bijgewerkt!
</div><?php
}else{
?>
<div class="callout callout-danger">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>Mislukt!</strong> Je gegevens zijn niet bijgewerkt!
</div>
<?php
}
}else{
?>
<div class="callout callout-danger">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>Mislukt!</strong> Je gegevens zijn niet bijgewerkt, de wachtwoorden zijn niet ingevuld of niet gelijk aan elkaar!
</div>
<?php
}
}elseif($_GET['action'] == "verwijder"){
if($db->query("DELETE FROM gebruikers WHERE id='".$db->real_escape_string($_GET['id'])."'")){
?>
<div class="callout callout-info">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>Gelukt!</strong> Je hebt je account verwijderd!
</div>
<?php
}else{
?>
<div class="callout callout-danger">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>Mislukt!</strong> Je hebt je account niet verwijderd!
</div>
<?php
}
}
}else{
?>
<?php include ("afbeelding/filter.php"); ?>
<form action="?id=<?php echo $mdFetch['id']; ?>&action=bewerk" enctype="multipart/form-data" method="post">
<div class="form-group">
<label for="id">Medewerker ID</label>
<input type="text" class="form-control" disabled="" name="id" value="<?php echo $mdFetch['id']; ?>">
<p class="help-block">Het ID kan niet worden bewerkt.</p>
</div>
<div class="form-group">
<label for="naam">Gebruikersnaam</label>
<input type="text" class="form-control" name="naam" value="<?php echo $mdFetch['naam']; ?>">
</div>
<div class="form-group">
<label for="email">Emailadres</label>
<input type="text" class="form-control" name="email" value="<?php echo $mdFetch['email']; ?>">
</div>
<div class="form-group">
<label for="email">Wachtwoord</label>
<input type="password" class="form-control" name="pass1">
</label>
<label>Bevestig wachtwoord </label>
<input type="password" class="form-control" name="pass2"/>
<p class="help-block">Laat deze velden leeg als het wachtwoord niet gewijzigd hoeft te worden.</p>
</div>
<div class="form-group">
<input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50"/>
</div>
<?php if($userFetch['admin'] == 1){ ?>
<div class="form-group">
<label>Rang</label> <br>
<input type="radio" name="admin"> Administrator
<input type="radio" name="medewerker"> Medewerker <br><br>
<?php } ?>
<input type="submit" id="submit" class="btn btn-primary btn-flat" value="Bewerk!">
</form>
<?php } ?>
</div>
</div>
Kan iemand mij op weg helpen?
Met vriendelijke groet,
Branco Rensen
Er worden hier heel veel dingen gedaan die niet hoeven denk ik. Probeer eerst de dingen op te geven die fout kunnen gaan/zijn en daar je afhandeling op te maken.
Verder raadt ik je aan om admin gerelateerde dingen in een aparte "handle" te plaatsen.
user_handle.php
user_admin_handle.php
Daarna moet je ook even uitleggen wat er precies niet lukt in deze spaghetti code.
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
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
<?php
if(isset($_GET['action'])){
if($_GET['action'] == "bewerk"){
if(trim($_POST['naam']) == ""){
$_POST['naam'] = $mdFetch['naam'];
}
if(trim($_POST['email']) == ""){
$_POST['email'] = $mdFetch['email'];
}
if(isset($_POST['admin'])){
$admin = 1;
}else{
$admin = 0;
}
if(trim($_POST['afbeelding']) == ""){
$_POST['afbeelding'] = $mdFetch['afbeelding'];
}
$passerror = false;
if(trim($_POST['pass1']) == ""){
$password = $mdFetch['wachtwoord'];
}else{
if(trim($_POST['pass2']) == ""){
$passerror = true;
}else{
if($_POST['pass1'] == $_POST['pass2']){
$password = sha1($_POST['pass1']);
}else{
$passerror = true;
}
}
?>
if(isset($_GET['action'])){
if($_GET['action'] == "bewerk"){
if(trim($_POST['naam']) == ""){
$_POST['naam'] = $mdFetch['naam'];
}
if(trim($_POST['email']) == ""){
$_POST['email'] = $mdFetch['email'];
}
if(isset($_POST['admin'])){
$admin = 1;
}else{
$admin = 0;
}
if(trim($_POST['afbeelding']) == ""){
$_POST['afbeelding'] = $mdFetch['afbeelding'];
}
$passerror = false;
if(trim($_POST['pass1']) == ""){
$password = $mdFetch['wachtwoord'];
}else{
if(trim($_POST['pass2']) == ""){
$passerror = true;
}else{
if($_POST['pass1'] == $_POST['pass2']){
$password = sha1($_POST['pass1']);
}else{
$passerror = true;
}
}
?>
Wat er fout is gegaan? Ik krijg het script wel zo ver om de naam van de afbeelding te posten, maar niet het bestand ergens te droppen, en ik wil graag weten hoe ik dat moet doen?
http://www.sitepoint.com/handle-file-uploads-php/
Ik zou eerst echt even naar de opbouw van het script kijken. Er zijn teveel ifjes e.d
We wachten op een 2e verbeterde versie van het script en natuurlijk mag je ons lastigvallen hoe het beter kan.
Toevoeging op 21/01/2015 12:52:56:
De link die je stuurde kom ik niet uit, sorry, heb je misschien wat meer voorbeelden? Ik heb zelf op google ook al gezocht maar het lukt me niet echt.
Je zal hier nog wat dingetjes bij moeten zetten natuurlijk en het uitbreiden. Maar dit is een goede opzet van het verwerken van formulier data.
De upload van de afbeelding zal op de plek moeten komen waar ik de comment heb neergezet in de user_handle.php
Je zal ook wat info moeten verkrijgen hoe je een plaatje upload en dit moeten uitzoeken. We kunnen alles voorzeggen maar hier leer je helaas niets van.
Niet gemeen bedoelt, maar ik "leer" meerdere mensen PHP en doe dit altijd zo. Ze weten nu veel beter hoe PHP werkt en hoe dingen afgehandeld moeten worden.
Deel 1: formulier
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
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
<div class="box-body">
<?php include('afbeelding/filter.php'); ?>
<form action="user_handle.php?id=<?= $mdFetch['id']; ?>" enctype="multipart/form-data" method="post">
<div class="form-group">
<label for="id">Medewerker ID</label>
<input type="text" class="form-control" disabled="" name="id" value="<?= $mdFetch['id']; ?>">
<p class="help-block">Het ID kan niet worden bewerkt.</p>
</div>
<div class="form-group">
<label for="naam">Gebruikersnaam</label>
<input type="text" class="form-control" name="naam" value="<?= $mdFetch['naam']; ?>">
</div>
<div class="form-group">
<label for="email">Emailadres</label>
<input type="text" class="form-control" name="email" value="<?= $mdFetch['email']; ?>">
</div>
<div class="form-group">
<label for="email">Wachtwoord</label>
<input type="password" class="form-control" name="pass1">
</label>
<label>Bevestig wachtwoord </label>
<input type="password" class="form-control" name="pass2"/>
<p class="help-block">Laat deze velden leeg als het wachtwoord niet gewijzigd hoeft te worden.</p>
</div>
<div class="form-group">
<input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50"/>
</div>
<?php if ($userFetch['admin'] == 1): ?>
<div class="form-group">
<label>Rang</label> <br>
<input type="radio" name="admin"> Administrator
<input type="radio" name="medewerker"> Medewerker <br><br>
<?php endif; ?>
<input type="submit" id="submit" class="btn btn-primary btn-flat" value="Bewerk!">
</div>
</form>
</div>
<?php include('afbeelding/filter.php'); ?>
<form action="user_handle.php?id=<?= $mdFetch['id']; ?>" enctype="multipart/form-data" method="post">
<div class="form-group">
<label for="id">Medewerker ID</label>
<input type="text" class="form-control" disabled="" name="id" value="<?= $mdFetch['id']; ?>">
<p class="help-block">Het ID kan niet worden bewerkt.</p>
</div>
<div class="form-group">
<label for="naam">Gebruikersnaam</label>
<input type="text" class="form-control" name="naam" value="<?= $mdFetch['naam']; ?>">
</div>
<div class="form-group">
<label for="email">Emailadres</label>
<input type="text" class="form-control" name="email" value="<?= $mdFetch['email']; ?>">
</div>
<div class="form-group">
<label for="email">Wachtwoord</label>
<input type="password" class="form-control" name="pass1">
</label>
<label>Bevestig wachtwoord </label>
<input type="password" class="form-control" name="pass2"/>
<p class="help-block">Laat deze velden leeg als het wachtwoord niet gewijzigd hoeft te worden.</p>
</div>
<div class="form-group">
<input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="50"/>
</div>
<?php if ($userFetch['admin'] == 1): ?>
<div class="form-group">
<label>Rang</label> <br>
<input type="radio" name="admin"> Administrator
<input type="radio" name="medewerker"> Medewerker <br><br>
<?php endif; ?>
<input type="submit" id="submit" class="btn btn-primary btn-flat" value="Bewerk!">
</div>
</form>
</div>
Deel 2: user_handle.php
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
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
<?php
// Kijk of de request method van de server gelijk is een POST, anders redirect naar het formulier terug
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
header('Location: edit.php');
}
// Controlleer of de wachtwoorden niet leeg zijn of niet identiek aan elkaar
if($_POST['pass1'] == '' || $_POST['pass2'] == '' or $_POST['pass1'] != $_POST['pass2'])
{
// Zet hier in een sessie neer wat er fout is gegaan en geef dit weer bij het formulier
// Redirect naar de edit pagina (met het formulier erop)
header('Location: edit.php');
}
// Hier kunnen we dingen gaan controleren van het forumulier
$naam = trim($_POST['naam']);
$email = trim($_POST['email']);
$afbeelding = $_FILE['afbeelding'];
$password = sha1($_POST['pass2']);
// Je zou de admin nu kunnen bepalen, maar ik zou dit liever in de sessie opnemen
// Hier kan je de afbeelding gaan uploaden met, move_uploaded_file()
$db->query("UPDATE gebruikers SET naam='" . $db->real_escape_string($naam) . "',
email='" . $db->real_escape_string($email) . "',
wachtwoord='" . $password . "',
WHERE id='" . $db->real_escape_string($_GET['id']) . "'");
?>
// Kijk of de request method van de server gelijk is een POST, anders redirect naar het formulier terug
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
header('Location: edit.php');
}
// Controlleer of de wachtwoorden niet leeg zijn of niet identiek aan elkaar
if($_POST['pass1'] == '' || $_POST['pass2'] == '' or $_POST['pass1'] != $_POST['pass2'])
{
// Zet hier in een sessie neer wat er fout is gegaan en geef dit weer bij het formulier
// Redirect naar de edit pagina (met het formulier erop)
header('Location: edit.php');
}
// Hier kunnen we dingen gaan controleren van het forumulier
$naam = trim($_POST['naam']);
$email = trim($_POST['email']);
$afbeelding = $_FILE['afbeelding'];
$password = sha1($_POST['pass2']);
// Je zou de admin nu kunnen bepalen, maar ik zou dit liever in de sessie opnemen
// Hier kan je de afbeelding gaan uploaden met, move_uploaded_file()
$db->query("UPDATE gebruikers SET naam='" . $db->real_escape_string($naam) . "',
email='" . $db->real_escape_string($email) . "',
wachtwoord='" . $password . "',
WHERE id='" . $db->real_escape_string($_GET['id']) . "'");
?>
Toevoeging op 21/01/2015 13:53:07:
Het is opgelost! Bedankt voor jullie hulp!
Je moet zo denken dat je nooit of bijna nooit een else wilt schrijven. Er zijn natuurlijk uitzonderingen.