Как использовать Setter и Getter с массивами в php

У меня проблемы с использованием массивов с геттерами и сеттерами в php. Мой класс отлично работает, если не массив. Моя идея состоит в том, чтобы вставить более одного номера телефона из html-формы. Идентификатор пользователя вставлен, но телефон пуст. Любая помощь будет оценена. Заранее спасибо.

HTML:

<input type = "text" id = "form-field-1-1" placeholder = "Text Field" name = "telefone[]" class = "col-xs-10 col-sm-5" />

<input type = "text" id = "form-field-1-1" placeholder = "Text Field" name = "telefone[]" class = "col-xs-10 col-sm-5" />     

--------------PHP КЛАСС----------

class Telefone {
    private $telefone = array();
    public function getTelefone() {
        return $this->telefone;
    }
    public function setTelefone($telefone) {
        $this->telefone[] = $telefone;
    }
}

-------ВНЕДРЕНИЕ КОНТРОЛЛЕРА---------

$inserirDados = new AgendaEventoDAO();

$tlfn = new Telefone();

$tlfn->setTelefone($_POST['telefone'] ? trim($_POST['telefone']) : '');

if ($inserirDados->inserirTelefone($tlfn,$usuario)){

    print "Telefone do Agendamento Inserido com sucesso!";

}

--------ДАО------------------------------

public function inserirTelefone(Telefone $tlfn, SiteUserInfo $usuario) {

    $connection = new cnx();
    $connection->connect();
    $telefon = $tlfn->getTelefone();
    $ce_usuario = $usuario->getUser_id();


    foreach ($telefon as $telefone) {
        $stmt = $connection->myconn->prepare("INSERT INTO tbltelefone_agenda (telefone_agenda,ce_agenda_evento) VALUES (?,?)");            
        $stmt->bind_param("ii", $telefone,$ce_usuario);
        $stmt->execute();
        $stmt->close();
        $connection->close();
        echo("<script>console.info('PHP: Telefone inserido com sucesso!');</script>");
        return $stmt;

    }

}

Вы должны внести исправления, отредактировав свой вопрос, а не добавляя код в комментариях. Нажмите на ссылку редактировать под своим вопросом. Кроме того, сделайте отступ в блоках кода на четыре пробела и убедитесь, что перед ними есть пустая строка, чтобы полностью отформатировать их как код.

Don't Panic 05.02.2019 01:10

Похоже, вы ссылаетесь на $_POST['telefone'] как на строку в своем PHP-коде, но name = "telefone[]" в HTML-форме означает, что его значение в $_POST будет массивом, а не строкой.

Don't Panic 05.02.2019 01:13

чтобы добавить к комментарию @Don'tPanic, eve_descri находится в текстовом поле, и вы пытаетесь связать его как целое число в bind_param. На самом деле вы так и не показали нам, откуда взялась переменная $usuario.

Richard Tyler Miles 05.02.2019 01:18

извините, но мне трудно публиковать html-теги <div> <input type = "text" id = "form-field-1-1" placeholder = "Text Field" name = "telefone[]" class = "col- xs-10 col-sm-5" /> <input type = "text" id = "form-field-1-1" placeholder = "Text Field" name = "telefone[]" class = "col-xs-10 col-sm-5" /> </div>

lea.co.ao 05.02.2019 01:35

так как же мне тогда сделать массив вместо строки?

lea.co.ao 05.02.2019 01:37

текстовое поле было моей ошибкой новичка, оно должно было быть текстом

lea.co.ao 05.02.2019 01:39

кстати... $usuario происходит из другого класса

lea.co.ao 05.02.2019 01:49

К вашему сведению, вам не нужно вызывать prepare и bind_param в цикле. Подготовьте оператор один раз, затем вызовите execute() в цикле.

Barmar 05.02.2019 02:34

Поместите HTML в вопрос так же, как и PHP. Вставьте его, затем используйте Control-k, чтобы пометить его как код, и он будет отображаться правильно.

Barmar 05.02.2019 02:36

как удалить prepare и bind_param, если в нем есть поля таблицы? если я уберу вылетает

lea.co.ao 05.02.2019 23:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
10
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

$_POST['telefone'] - это массив, поэтому вам нужно перебрать его, вызвав сеттер.

foreach ($_POST['telefone'] as $tel) {
    if ($tel) {
        $tlfn->setTelefone(trim($tel));
    }
}

Спасибо, Бармар, мой контроллер работает с вашим изменением... однако мой DAO повторяет первый элемент цикла дважды. Я сделал это изменение -> foreach ($tlfn->getTelefone() as $telefone) { /*мой код, как указано выше*/ }, где я ошибаюсь? или я должен использовать for(){} вместо

lea.co.ao 05.02.2019 06:27

Я не вижу ничего, что могло бы вызвать дублирование. Что var_dump($tlfn) показывает в свойстве telefone?

Barmar 05.02.2019 18:01

это то, что я получаю object(Telefone)#3 (1) {["telefone":"Telefone":private]=> array(2) {[0]=> string(9) "333555444" [1]=> string(9) "777333999" } } хорошо... два разных числа.

lea.co.ao 05.02.2019 22:37

Другие вопросы по теме