artiand
@artiand
Начинающий веб-программист

Как создать функцию добавления объявления?

Цель: создать функцию добавления объявлений с возможностью загружать несколько фотографий сразу и выводить изображения с данными на определенной странице?

Есть ли примеры, шаблоны? Заранее спасибо
  • Вопрос задан
  • 685 просмотров
Решения вопроса 1
twobomb
@twobomb
Ну вот крч. Делай точно так как у меня и все будет работать.
БАЗА ДАННЫХ

Логин root
Пароль 123456
Хост localhost
Порт 3306
Имя: my_data
Настраивается в data.php

Таблица 1
Имя: images
Поля
id int autoincrement
url varchar 255
post_id int

Таблица 2
Имя: posts
Поля
id int autoincrement
title varchar 50
description text


ФАЙЛ posts.php
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            background: #333333;
        }
        .post{
            color:aliceblue;
            width:60%;
            margin: auto;
            border: 5px solid #FFF;
            margin-top:25px;
        }
        .post .title{
            font-size:1.4em;
            padding: 15px;
            background:#660099;
        }
        .post .description{
            padding: 15px;
            background:#330099;
        }
        .post .images img{
            border-radius: 20px;
            margin: 20px auto;
            width: 50%;
            display: block;
            
        }
        .post .images{
            padding: 15px;
            max-height: 500px;
            overflow: overlay;
            background:#660099;
        }
    </style>
</head>
<body>
<?PHP
    require_once "data.php";
    $con = sql_connect();
    $sql = "SELECT id,title,description FROM posts LIMIT 20";
    $res = $con->query($sql);
    $bar = "";
    while($row = $res->fetch_assoc()){
$bar .= "<div class='post' data-postid={$row["id"]}'>
        <div class='title'>{$row["title"]}</div>
        <div class='description'>{$row["description"]}</div>
        <div class='images'>"; 
    $sql = "SELECT url FROM images WHERE post_id=$row[id]";
    $imgs = $con->query($sql);
        while($img = $imgs->fetch_row())
            $bar .= "<img src=\"$img[0]\">";
        $bar .= "
        </div>
    </div>"; 
    }
    echo $bar;
    ?>
</body>
</html>

ФАЙЛ data.php
<?PHP

define("DB_LOGIN","root");
define("DB_PASS","123456");
define("DB_HOST","localhost");
define("DB_NAME","my_data");
define("DB_PORT","3306");

function sql_connect(){
    $con = new mysqli(DB_HOST, DB_LOGIN, DB_PASS, DB_NAME,DB_PORT);
    if ($con->connect_errno) {
        echo "Нет доступа к БД! Ошибка: " . $con->connect_error;
        return false;
    }
    return $con;
}
?>

ФАЙЛ index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<script>
    document.addEventListener("DOMContentLoaded",function(){
	document.all.addFoto.addEventListener("click",function(){
     var el = document.createElement("input");
     el.name = "foto[]";
     el.type = "file";
     el.accept="image/*";
  	document.all.addBtn.appendChild(el)
  });
});
    </script>    
    <style>
    label,input{
  display:block;
  margin-top:10px;
}
    </style>
<body>
    <form action="addScript.php" method="post" enctype="multipart/form-data">
  <label >Заголовок<input type="text" name="title"></label>
  <label >Описание<input type="text" name="description"></label>
  <input type="button" id="addFoto" value="Добавить фото">
  <div id="addBtn"></div>
  <input type="submit" value="Отправить" />
</form>
</body>
</html>

ФАЙЛ addScript.php
<?PHP
    require_once "data.php";

$arr = [];
if(isset($_FILES["foto"])){
    $dir = "upload/images";
    if(!is_dir($dir))
        mkdir($dir,0777,true);
    for($i = 0; $i < count($_FILES["foto"]["name"]);$i++){
        if($_FILES["foto"]["error"][$i] == 0 && preg_match("/^image/",$_FILES["foto"]["type"][$i])){
            array_push($arr,$dir."/".time()."_".preg_replace("/[а-яА-Я\s]/i", '', $_FILES["foto"]["name"][$i]));
            move_uploaded_file($_FILES["foto"]["tmp_name"][$i],end($arr));
        }
    }
}
$title = trim(htmlspecialchars($_POST["title"]));
$description = trim(htmlspecialchars($_POST["description"]));

if($title && $description && $con = sql_connect()){
    $sql = "INSERT INTO posts(title,description) VALUES('$title','$description')";
    $con->query($sql);
    $sql = "SELECT MAX(id) FROM posts";
    $res = $con->query($sql);
    $row = $res->fetch_row();
    for($i = 0; $i < count($arr);$i++){
        $sql = "INSERT INTO images(url,post_id) VALUES('$arr[$i]','$row[0]')";
        $con->query($sql);
    }
}
else 
    echo "Error: no data!";
$con->close();

?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Идите от простого с сложному.
Как минимум,
"добавления объявлений с возможностью загружать несколько фотографий сразу" и "выводить изображения с данными" - это уже две разные "функции".
Попробуйте начать со второй - она проще.
Далее:
"добавления объявлений" и " несколько фотографий сразу" - тоже можно разбить на шаги "добавить только объявление", "добавить с 1 фото".
Но вообще, сейчас обычно требуется, тем более для нескольких изображений, асинхронная загрузка, с этим не любой крепкий "середнячок" грамотно справится "с лёту".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы