У меня проблемы с использованием массивов с геттерами и сеттерами в 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;
}
}
Похоже, вы ссылаетесь на $_POST['telefone'] как на строку в своем PHP-коде, но name = "telefone[]" в HTML-форме означает, что его значение в $_POST будет массивом, а не строкой.
чтобы добавить к комментарию @Don'tPanic, eve_descri находится в текстовом поле, и вы пытаетесь связать его как целое число в bind_param. На самом деле вы так и не показали нам, откуда взялась переменная $usuario.
извините, но мне трудно публиковать 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>
так как же мне тогда сделать массив вместо строки?
текстовое поле было моей ошибкой новичка, оно должно было быть текстом
кстати... $usuario происходит из другого класса
К вашему сведению, вам не нужно вызывать prepare и bind_param в цикле. Подготовьте оператор один раз, затем вызовите execute() в цикле.
Поместите HTML в вопрос так же, как и PHP. Вставьте его, затем используйте Control-k, чтобы пометить его как код, и он будет отображаться правильно.
как удалить prepare и bind_param, если в нем есть поля таблицы? если я уберу вылетает






$_POST['telefone'] - это массив, поэтому вам нужно перебрать его, вызвав сеттер.
foreach ($_POST['telefone'] as $tel) {
if ($tel) {
$tlfn->setTelefone(trim($tel));
}
}
Спасибо, Бармар, мой контроллер работает с вашим изменением... однако мой DAO повторяет первый элемент цикла дважды. Я сделал это изменение -> foreach ($tlfn->getTelefone() as $telefone) { /*мой код, как указано выше*/ }, где я ошибаюсь? или я должен использовать for(){} вместо
Я не вижу ничего, что могло бы вызвать дублирование. Что var_dump($tlfn) показывает в свойстве telefone?
это то, что я получаю object(Telefone)#3 (1) {["telefone":"Telefone":private]=> array(2) {[0]=> string(9) "333555444" [1]=> string(9) "777333999" } } хорошо... два разных числа.
Вы должны внести исправления, отредактировав свой вопрос, а не добавляя код в комментариях. Нажмите на ссылку редактировать под своим вопросом. Кроме того, сделайте отступ в блоках кода на четыре пробела и убедитесь, что перед ними есть пустая строка, чтобы полностью отформатировать их как код.