• Как передавать аргументы в функцию в нужном порядке в JS?

    VlasenkoFedor
    @VlasenkoFedor
    Программист: php, js, go
    function myFunc({t = null, c = null, g = null}) {
        console.log(t, c, g)
    }
    
    myFunc({t: 5});
    myFunc({c: 10});
    myFunc({g: 20});

    Вариант передавать объект
    Ответ написан
    Комментировать
  • Как получить левую часть строки и правую? Или как вставить знак после 38 символа?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Вставить - никак. Строки в js изменять нельзя. Можно сделать новую:

    const insert = (str, index, ch) =>
      str.replace(RegExp(`(?<=.{${index}})`), ch);
    
    // или
    
    const insert = (str, index, ch) =>
      str.replace(RegExp(`.{${index}}`), `$&${ch}`);
    
    // или
    
    const insert = (str, index, ch) =>
      str.length >= index ? str.slice(0, index) + ch + str.slice(index) : str;
    Ответ написан
    Комментировать
  • Как улучшить программу с помощью ооп?

    Fzero0
    @Fzero0
    Вечный студент
    Не надо думать что ООП это прям святой грааль, и как только вы начнете все писать через классы у вас прям и кода станет меньше и он будет оптимальный. Единственное назначение ООП - существенно облегчить разработку и последующее сопровождение сложного софта (больших проектов).
    бессмысленный код "типа" ООП
    const datas = [
    {
      description: "new",
      img: "https://www.svgimages.com/svg-image/s8/air-jordan-logo-256x256.png",
      name: "Nike1",
      price: 100
    }, {
      description: "classic",
      img: "https://www.freepnglogos.com/uploads/puma-logo-png-1.png",
      name: "Adidas1",
      price: 120
    },
    {
      description: "new",
      img: "https://www.svgimages.com/svg-image/s8/air-jordan-logo-256x256.png",
      name: "Nike2",
      price: 200
    }, {
      description: "classic",
      img: "https://www.freepnglogos.com/uploads/puma-logo-png-1.png",
      name: "Adidas2",
      price: 320
    }
    ]
    
    class Products {
      constructor(name, price, description, img){
        this.name = name;
        this.price = price;
        this.description = description;
        this.img = img;
     }    
    }
    
    class Manager {
     constructor(selector = '#tables', data = []) {
       this.root = document.querySelector(selector) || document.body;
       this.products = data.length === 0 ? this._demoProducts() : data;
     }
     _demoProducts() {
            let nike = new Products("Nike", 100, "new-shoes","https://www.svgimages.com/svg-image/s8/air-jordan-logo-256x256.png");
            let adidas = new Products("Adidas", 120, "classic-shoes","https://www.freepnglogos.com/uploads/puma-logo-png-1.png");
            return [nike, adidas];
        }
     getHTMLTemplate() {
       return this.products.map(function(product, i) {
         return `<div class="info-goods" data-id='${i}'>
                <div class="img"><img src=${product.img} width="80" height="80" alt='${product.name}'></div>
                <div class="name">${product.name}</div>
                <div class="price">${product.price}</div>
                <div class="description">${product.description}</div>
               </div>`
       });
     } 
     init(){
      this.root.insertAdjacentHTML('beforeend', this.getHTMLTemplate().join('<hr>'));
     }
    }
    
    const manager = new Manager();
          manager.init();
    Ответ написан
    Комментировать
  • Как улучшить программу с помощью ооп?

    Tim-A-2020
    @Tim-A-2020
    Просто отрендерить данные достаточно этого
    Ответ написан
    4 комментария
  • Почему в базу данных попадает путь без слэшей?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    потому что данные в БД надо добавлять по-человечески, а не как пацаны в подворотне показали.

    Данные в БД надо всегда отправлять отдельно от самого запроса. Это непреложное правило, которое надо соблюдать всегда.
    Для этого надо
    • Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
    • Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
    • Привязать переменные к запросу.
    • Выполнить подготовленный ранее запрос с помощью с помощью execute()

    В mysqli это будет так
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->bind_param("sssss", $title, $discription, $date, $path);
    $stmt->execute();

    bind_param() принимает в качестве параметров все переменные, которые должны попасть в запрос, в том же самом порядке, в котором стоят плейсхолдеры в запросе. Но кроме того, сначала в этой функции должны быть указаны типы для всех переменных, в виде строки, где тип переменной обозначается одной буквой. То есть букв в этой строке должно быть ровно столько, сколько дальше будет переменных. К счастью, можно особо не париться с типами и для всех переменных указывать тип "s".

    Но по-хорошему для работы с БД в РНР лучше использовать PDO, Тем более что там колупаться с bind_param не нужно, а можно сразу отправить все данные в execute
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->execute([$title, $discription, $date, $path]);

    И скажи спасибо что у тебя просто слеши пропали, а не всю базу шутники удалили
    Ответ написан
  • А как вы делаете социальные share кнопки?

    iamd503
    @iamd503
    Верстальщик
    Ответ написан
    Комментировать