Foto's per profiel uploaden en met formulier meesturen
Layout en PHP zijn inderdaad door elkaar, we hebben dit systeem een tijdje terug dus ook zo gekocht, zelf aanpassingen gedaan en naar wens gemaakt nu missen we enkel nog het kunnen selecteren en versturen van foto's, dacht eigenlijk dat dit wellicht wel snel op te lossen was door het gedeelte op front af te sluiten en de rest te gebruiken of een nieuw stukje te maken maar blijkbaar is dat niet zo 'easy'. Probeer dit al tijden op te lossen maar hoe u het net aangeef daar heb ik jammer genoeg zelf geen kaas van gegeten.
- Ophalen van foto's voor in een lijst
- Toevoegen van checkboxen
- Afhandeling van de invoer van de checkboxen, als die aangevinkt zijn.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--afbeeldingen halen!-->
<?php
$profile_id = isset($_GET['profile'])?$_GET['profile']:'';
$sql = "SELECT * from user_pictures where user_id = '".$to."'";
$result= $db->query($sql);
$i =1 ;
$main_uri = 'websitelink';
$pre = $main_uri.'controller/images/';
while($row = $result->fetch_object()){
echo '
<img src="'.$pre.$row->big.'" width="50" height="50">
';
$i++;
}
?>
<?php
$profile_id = isset($_GET['profile'])?$_GET['profile']:'';
$sql = "SELECT * from user_pictures where user_id = '".$to."'";
$result= $db->query($sql);
$i =1 ;
$main_uri = 'websitelink';
$pre = $main_uri.'controller/images/';
while($row = $result->fetch_object()){
echo '
<img src="'.$pre.$row->big.'" width="50" height="50">
';
$i++;
}
?>
Haalt nu de images op, dat werkt perfect, nu dus enkel de vraag nog:
hoe kan ik er nu voor zorgen dat ik images kan meesturen?
Hoeft niet eens met een checkbox.. mag ook dat wanneer foto geselecteerd is dat hij dan een kleurtje krijgt of iets.. alles is welkom :)
Gewijzigd op 30/05/2019 16:33:45 door Ray Mond
Checkboxes is het makkelijkst, tenzij je graag een sloot aan Javascript wil gebruiken voor zo een effect.
Nu kan ik natuurlijk er niet zo even een checkbox onder zetten maar moet natuurlijk wel id/afbeelding url halen, toch?
Ja, het unieke pictureID van de afbeelding als value.
Dit is hoe het was:
Code (php)
1
2
3
4
5
2
3
4
5
<form id="myForm1" method="POST" action="../controller/ajax.php">
<textarea style="width:98%; margin-top:3px;" id="msg-box" maxlength="<?php echo $meta['max_char']; ?>" name="message" rows="4"></textarea>
<input id="attachpict" name="attachpict" type="file">
<textarea style="width:98%; margin-top:3px;" id="msg-box" maxlength="<?php echo $meta['max_char']; ?>" name="message" rows="4"></textarea>
<input id="attachpict" name="attachpict" type="file">
en dan in ajax.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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//new upload picture
$allowedExts = array("gif", "jpeg", "jpg", "png");
if (isset($_FILES["attachpict"]) ){
$extension = end(explode(".", $_FILES["attachpict"]["name"]));
if ((($_FILES["attachpict"]["type"] == "image/gif")|| ($_FILES["attachpict"]["type"] == "image/jpeg")|| ($_FILES["attachpict"]["type"] == "image/jpg")|| ($_FILES["attachpict"]["type"] == "image/pjpeg")|| ($_FILES["attachpict"]["type"] == "image/x-png")|| ($_FILES["attachpict"]["type"] == "image/png"))&& ($_FILES["attachpict"]["size"] < 2000000)&& in_array($extension, $allowedExts))
{
if ($_FILES["attachpict"]["error"] > 0){
$r = array('status'=> 'error', 'text'=>"Error: " . $_FILES["attachpict"]["error"]);
}else{
$source_path = $_FILES['attachpict']['tmp_name'];
$unique = 'attachment/'.md5($msg_id.'_arikkeren').'.'.$extension;
move_uploaded_file($source_path,$unique);
$db->query("INSERT INTO message_attachement (`message_id`, `attachment_url`, `mime`) VALUES
('".$msg_id."', '".$db->escape_string($unique)."', '".$db->escape_string($_FILES["attachpict"]["type"])."')");
}
}
}
$allowedExts = array("gif", "jpeg", "jpg", "png");
if (isset($_FILES["attachpict"]) ){
$extension = end(explode(".", $_FILES["attachpict"]["name"]));
if ((($_FILES["attachpict"]["type"] == "image/gif")|| ($_FILES["attachpict"]["type"] == "image/jpeg")|| ($_FILES["attachpict"]["type"] == "image/jpg")|| ($_FILES["attachpict"]["type"] == "image/pjpeg")|| ($_FILES["attachpict"]["type"] == "image/x-png")|| ($_FILES["attachpict"]["type"] == "image/png"))&& ($_FILES["attachpict"]["size"] < 2000000)&& in_array($extension, $allowedExts))
{
if ($_FILES["attachpict"]["error"] > 0){
$r = array('status'=> 'error', 'text'=>"Error: " . $_FILES["attachpict"]["error"]);
}else{
$source_path = $_FILES['attachpict']['tmp_name'];
$unique = 'attachment/'.md5($msg_id.'_arikkeren').'.'.$extension;
move_uploaded_file($source_path,$unique);
$db->query("INSERT INTO message_attachement (`message_id`, `attachment_url`, `mime`) VALUES
('".$msg_id."', '".$db->escape_string($unique)."', '".$db->escape_string($_FILES["attachpict"]["type"])."')");
}
}
}
Het is inderdaad heel logisch dat hij daar de attachpict pakt..
Nu gaat dit vast niet werken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--afbeeldingen halen!-->
<?php
$profile_id = isset($_GET['profile'])?$_GET['profile']:'';
$sql = "SELECT * from user_pictures where user_id = '".$to."'";
$result= $db->query($sql);
$i =1 ;
$main_uri = 'http://website';
$pre = $main_uri.'controller/images/';
while($row = $result->fetch_object()){
echo '
<img img style="width:60px;height:60px"src="'.$pre.$row->big.'"><input type="checkbox" value="1" id="'.$pre.$row->big.'" name="attachpict" />
';
$i++;
}
?>
<?php
$profile_id = isset($_GET['profile'])?$_GET['profile']:'';
$sql = "SELECT * from user_pictures where user_id = '".$to."'";
$result= $db->query($sql);
$i =1 ;
$main_uri = 'http://website';
$pre = $main_uri.'controller/images/';
while($row = $result->fetch_object()){
echo '
<img img style="width:60px;height:60px"src="'.$pre.$row->big.'"><input type="checkbox" value="1" id="'.$pre.$row->big.'" name="attachpict" />
';
$i++;
}
?>
maar alsnog moet natuurlijk een deel anders komen in ajax.php aangezien hij nu nooit iets gaat meesturen.. hoe los ik dit op?
Hij moet het wel blijven invoeren als message attachment ook in de database die meegezonden gaat worden met het bericht anders komt de image niet bij ander profiel..
Gewijzigd op 30/05/2019 20:11:23 door Ray Mond
Verder ben ik ook benieuwd waar $to vandaan komt, en nog belangrijker: Of deze netjes geëscaped wordt tegen (onbedoelde) SQL-injection.
En mocht je nog klikbare afbeeldingen willen hebben, die zich gedragen als checkboxes. Dan heb ik een mooie jQuery plug-in voor gevonden:
https://jcuenod.github.io/imgCheckbox/
Gewijzigd op 30/05/2019 19:09:51 door - Ariën -
We vragen nu de afbeeldingen op en willen diezelfde link meesturen als bijlage zodat men kan klikken en in de lightbox opent de afbeelding. Ik ben al redelijk ver heen moet ik zelf zeggen.
Ik heb nu in ajax.php:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
//afbeelding link meesturen via checkbox
if (isset($_POST["attachpict"]) ){
$db->query("INSERT INTO message_attachement (`message_id`, `attachment_url`, `mime`) VALUES
('".$msg_id."', 'hier-moet-de-link', 'image/jpeg')");
}
if (isset($_POST["attachpict"]) ){
$db->query("INSERT INTO message_attachement (`message_id`, `attachment_url`, `mime`) VALUES
('".$msg_id."', 'hier-moet-de-link', 'image/jpeg')");
}
Waar staat 'hier-moet-de-link' daar moet ik nu alsnog zorgen dat daar de link gepost gaat worden die we aanklikken door middel van de checkbox, daar hang ik op dit moment even vast.
Dit in mijn reply.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!--afbeeldingen halen!-->
<?php
$profile_id = isset($_GET['profile'])?$_GET['profile']:'';
$sql = "SELECT * from user_pictures where user_id = '".$to."'";
$result= $db->query($sql);
$i =1 ;
$main_uri = 'http://website/';
$pre = $main_uri.'controller/images/';
$pre2 = 'controller/images/';
while($row = $result->fetch_object()){
echo '
<img img style="width:60px;height:60px"src="'.$pre.$row->big.'"><input type="checkbox" value="'.$pre2.$row->big.'" name="attachpict" />
';
$i++;
}
?>
<?php
$profile_id = isset($_GET['profile'])?$_GET['profile']:'';
$sql = "SELECT * from user_pictures where user_id = '".$to."'";
$result= $db->query($sql);
$i =1 ;
$main_uri = 'http://website/';
$pre = $main_uri.'controller/images/';
$pre2 = 'controller/images/';
while($row = $result->fetch_object()){
echo '
<img img style="width:60px;height:60px"src="'.$pre.$row->big.'"><input type="checkbox" value="'.$pre2.$row->big.'" name="attachpict" />
';
$i++;
}
?>
Of dit helemaal klopt weet ik eerlijk gezegd niet.. de $to is enkel voor het ophalen van de profiel(id)nr van desbetreffende profiel.
Ik ben er echt bijna maar net niet helemaal jammer genoeg.. wel weer een stukje wat bijgeleerd vandaag :)
Als ik nu op dit moment geen checkbox doe komt er ook geen message_attachement...
Wanneer ik wel een checkbox doe
Code (php)
1
2
2
$db->query("INSERT INTO message_attachement (`message_id`, `attachment_url`, `mime`) VALUES
('".$msg_id."', 'hierdelink....', 'image/jpeg')");
('".$msg_id."', 'hierdelink....', 'image/jpeg')");
Waar dus hierdelink... staat als ik dat verander naar controller/images/bla.jpg als voorbeeld dan krijgt zowel de user op front de image te zien als ik in admin.. nu moet dat enkel nog zelf ingevuld gaan worden bij het verzenden en nu hik ik hier even..
EDIT:
Tot zover lijkt nu eigenlijk alles in principe wel te werken enkel moet hij nu de value van de checkbox nog meesturen.. Dat is nu even zoeken lol
Gewijzigd op 30/05/2019 19:41:34 door Ray Mond
Zoals ik al eerder zei, moet je de unieke ID van de afbeelding in de value meegeven.
Code (php)
1
2
2
$db->query("INSERT INTO message_attachement (`message_id`, `attachment_url`, `mime`) VALUES
('".$msg_id."', '".$_POST['attachpict']."', 'image/jpeg')");
('".$msg_id."', '".$_POST['attachpict']."', 'image/jpeg')");
Meerdere malen getest vanaf verschillende profielen heen en weer en het werk echt super...
Weer wat nieuws geleerd en het toch niet hoeven uitbesteden :-)
Helemaal top!!! Geweldig, dank!!!
Nu nog SQL-injection beveiliging, voordat iemand gaat klooien aan je $_POST['attachpict'] :-)