У меня есть следующая проблема: у меня есть формуляр где, где я избавляю реестр базы данных и кнопки обновления, чтобы издавать реестр в вопросе.
Часть формуляра, где я показываю данные о любом реестре, функционирует хорошо, страница показывает все поля правильно. Он, когда я нажимаю на кнопку, обновлять, что я не могу издать правильно поля, что он делает, состоит в том, чтобы опустошать реестр полностью.
Я провожу некоторое время пытаясь и пытаясь, но не могу видеть, где - ошибка. Я показываю вам то, что у меня есть.
Файл, где я подбираю данные о формуляре в includes/datoscliente.php
То, к чему я стремлюсь с этим, состоит в том, чтобы не быть должным быть когда пишут постоянно переменные полей формуляров.
<?php
$id = $_POST["idcliente"];
$datonombre = $_POST["nombre"];
$datoapellidos = $_POST["apellidos"];
$datoalias = $_POST["alias"];
$datotelefono = $_POST["telefono"];
$datomovil = $_POST["movil"];
$datoemail = $_POST["email"];
$datodireccion = $_POST["direccion"];
$datopoblacion = $_POST["poblacion"];
$datoprovincia = $_POST["provincia"];
$datocodigopostal = $_POST["codigopostal"];
$tratamientocapilar = $_POST["tratamientocapilar"];
$tratamientocorporal = $_POST["tratamientocorporal"];
$observaciones = $_POST["observaciones"];
?>
Формуляр, где я избавляю данные клиента в зависимости от идентификации (editar.php)
Эта часть функционирует хорошо и не дает проблемы. Я использую класс, который называется EditarCliente
что содержит решение mysql, который ищет клиент из-за идентификации.
<?php
// Incluimos la clase EditarCliente
require("includes/editarcliente.php");
// Instanciamos un objeto de la clase editar clientes
$cliente = new EditarCliente;
// Traemos el valor del cliente a editar
$idcliente = $_GET['id'];
// Creamos un objeto nuevo que traiga el cliente a editar usando el método EditClient de EditarCliente
$editarcliente = $cliente->EditClient($idcliente);
// Recorremos todo el array y guardamos cada elmento del campo en su correspondiente variable
foreach ($editarcliente as $elemento) {
$id = $elemento['idclientes'];
$nombre = $elemento['nombre'];
$apellidos = $elemento['apellidos'];
$alias = $elemento['alias'];
$telefono = $elemento['telefono'];
$movil = $elemento['movil'];
$email = $elemento['email'];
$direccion = $elemento['direccion'];
$poblacion = $elemento['poblacion'];
$provincia = $elemento['provincia'];
$codigopostal = $elemento['codigopostal'];
$tratamientocapilar = $elemento['tratamientocapilar'];
$tratamientocorporal = $elemento['tratamientocorporal'];
$observaciones = $elemento['observaciones'];
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="es">
<head>
<?php
// Incluimos el header de la página
include("includes/header.php");
?>
</head>
<body>
<div class="container">
<header class="header">
<h1>Gestión Clientes <small>NNNN</small></h1>
</header>
</div>
<div class="container menu-create">
<form action="actualizarcliente.php" method="POST">
<div class="form-horizontal">
<div class="form-group">
<label class="col-lg-2 control-label">ID Cliente</label>
<div class="col-lg-10">
<input type="text" name="idcliente" id="idcliente" class="form-control input_size" value="<?php echo $id;?>" required>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Nombre</label>
<div class="col-lg-10">
<input type="text" name="nombre" id="nombre" class="form-control input_size" value="<?php echo $nombre;?>" required>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Apellidos</label>
<div class="col-lg-10">
<input type="text" name="apellidos" id="apellidos" class="form-control input_size" value="<?php echo $apellidos;?>" required>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Alias</label>
<div class="col-lg-10">
<input type="text" name="alias" id="alias" class="form-control input_size" value="<?php echo $alias;?>" required>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Teléfono</label>
<div class="col-lg-10">
<input type="number" name="telefono" id="telefono" class="form-control input_size" value="<?php echo $telefono;?>" required>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Móvil</label>
<div class="col-lg-10">
<input type="number" name="movil" id="movil" class="form-control input_size" value="<?php echo $movil;?>" required>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">E-mail</label>
<div class="col-lg-10">
<input type="email" name="email" id="email" class="form-control input_size" value="<?php echo $email;?>" required>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Dirección</label>
<div class="col-lg-10">
<input type="text" name="direccion" id="direccion" class="form-control input_size" value="<?php echo $direccion;?>" required>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Población</label>
<div class="col-lg-10">
<input type="text" name="poblacion" id="poblacion" class="form-control input_size" value="<?php echo $poblacion;?>" required>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Provincia</label>
<div class="col-lg-10">
<input type="text" name="provincia" id="provincia" class="form-control input_size" value="<?php echo $provincia;?>" required>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Código Postal</label>
<div class="col-lg-10">
<input type="number" name="codigopostal" id="codigopostal" class="form-control input_size" value="<?php echo $codigopostal;?>" required>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Tratamiento Capilar</label>
<div class="col-lg-10">
<input type="text" name="tratamientocapilar" id="tratamientocapilar" class="form-control input_size" value="<?php echo $tratamientocapilar;?>" required>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Tratamiento Corporal</label>
<div class="col-lg-10">
<input type="text" name="tratamientocorporal" id="tratamientocorporal" class="form-control input_size" value="<?php echo $tratamientocorporal;?>" required>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Observaciones</label>
<div class="col-lg-10">
<input type="text" name="observaciones" id="observaciones" class="form-control input_size" value="<?php echo $observaciones;?>" required>
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button type="submit" name="enviar" value="Salvar" class="btn btn-default">Salvar</button>
</div>
</div>
</div>
</form>
</div>
</body>
</html>
Класс ModificarCliente (modificarcliente.php)
У меня есть этот класс, чтобы изменять клиента с этим кодом:
<?php
// Incluimos los datos del formulario para PHP
require("datosclientes.php");
// Incluimos la clase conexión para crear una que herede de Conexion
require("conexion.php");
/*
* Clase modificar cliente que hereda las propiedades de la clase conexion
*/
class ModificarCliente extends Conexion {
// Constructor de la clase
function __construct(){
// Constructor de la super clase
parent::__construct();
}
// Método para guardar las modificaciones del cliente
public function ModificarCliente($id) {
// try and catch para capturar errores
try {
// Sentencia SQL
$sql = "UPDATE clientes SET
nombre = '$datonombre',
apellidos = '$datoapellidos',
alias = '$datoalias',
telefono = '$datotelefono',
movil = '$datomovil',
email = '$datoemail',
direccion = '$datodireccion',
poblacion = '$datopoblacion',
provincia = '$datoprovincia',
codigopostal = '$datocodigopostal',
tratamientocapilar = '$tratamientocapilar',
tratamientocorporal = '$tratamientocorporal',
observaciones = '$observaciones'
WHERE idclientes = '$id'";
// Guardamos la variable SQL y preparamos la consulta con la conexion de la base de datos
$query = $this->conexion_db->prepare($sql);
// Ejecutamos la consulta y la guardamos en un array
$query->execute(array());
// Guardamos el resultado en una variable
$resultado = $query;
// Cerramos la query
$query->closeCursor();
// Devolvemos los resultados a la función
return $resultado;
// Vaciamos el objeto
$this->conexion_db = null;
} catch (Exception $e) {
echo "Error en la ejecución de la consulta<br>";
echo "Mensaje: " . $e->GetMessage() . "<br>";
echo "Línea: " . $e->getLine();
}
}
}
?>
И в конце концов у меня есть страница actualizarcliente.php где instancio класс ModificarCliente
используя метод ModificarCliente
с параметром $id
что у меня есть формуляра editar.php
<?php
// Incluimos los datos del formulario para PHP
require("includes/datosclientes.php");
// Incluimos la clase Modificar cliente
require("includes/modificarcliente.php");
// Instanciamos un objeto de modificar cliente
$modificarcliente = new ModificarCliente;
$modificarcliente->ModificarCliente($id);
echo $id;
if($modificarcliente == false) {
echo "error";
} else {
echo "Cliente modificado";
}
?>
Проблема
Когда я нажимаю в кнопке Salvar формуляра editar.php то, что делает программу, состоит в том, чтобы опустошать меня реестр в вопросе. А именно, если я издаю в клиента с id 12, мне опустошает все поля клиента с id 12.
Когда он это выполнит, он показывает мне ошибку из-за каждого поля формуляра:
Notice: Изменчивый Undefined: datonombre in C:\wamp64\www\elena\includes\modificarcliente.php он-лайн 31
Notice: Изменчивый Undefined: datoapellidos in C:\wamp64\www\elena\includes\modificarcliente.php он-лайн 32
И потом в ошибках, которые я показываю с классом ModificarCliente
покажи следующее:
Сообщение: SQLSTATE [HY000]: Общая ошибка
Однако if это делает и показывает текст "Клиент Модификадо".
У меня есть с include данные о формулярах, но из-за ошибок, которые он помечает, он как будто PHP не может избавить данные о формуляре editar.php
.
Что я врежу?
var_dump ($sql)
C:\wamp64\www\nnn\includes\modificarcliente.php:48:string 'UPDATE clientes SET
nombre = 'David',
apellidos = 'nnn',
alias = 'nnn',
telefono = '000000000',
movil = '00000',
email = 'a@a.com',
direccion = 'nnnn',
poblacion = 'nnnn',
provincia = 'p',
codigopostal = '222',
tratamientocapilar = 'prueba',
'... (length=645)
var_dump ($datos)
array (size=15)
'idcliente' => string '11' (length=2)
'nombre' => string 'David' (length=5)
'apellidos' => string 'nnn' (length=15)
'alias' => string 'nnn' (length=6)
'telefono' => string '000000000' (length=9)
'movil' => string '00000' (length=5)
'email' => string 'a@a.com' (length=7)
'direccion' => string 'nnn' (length=14)
'poblacion' => string nnn' (length=12)
'provincia' => string 'p' (length=1)
'codigopostal' => string '222' (length=3)
'tratamientocapilar' => string 'prueba' (length=6)
'tratamientocorporal' => string 'prueba' (length=6)
'observaciones' => string 'prueba' (length=6)
'enviar' => string 'Salvar' (length=6)
Проблема - что переменные $datonombre, $datonapellido
, и т.д. изменчиво, что существуют вне области класса ModificarCliente
Решения:
Включать datosclientes.php
внутри метода ModificarCliente
(мало многословное)
public function ModificarCliente($id) {
//
require("datosclientes.php");
// ... codigo actual ...
Это будет функционировать, потому что в переменную $_POST
он global
.
Переходить в метод ModificarCliente
договоренность с данными клиента (более многословного)
В actualizacliente.php мы будем перемещать данные клиента в договоренности.
// La variable `$_POST` es un arreglo en la cual
// ya se encuentran todos los datos del cliente.
$modificarcliente->ModificarCliente($_POST);
В modificarcliente.php мы идем изменять метод ModificarCliente
для use договоренность данных.
public function ModificarCliente($datos) {
// try and catch para capturar errores
try {
// Sentencia SQL
$sql = "UPDATE clientes SET
nombre = '$datos[nombre]',
apellidos = '$datos[apellidos]',
alias = '$datos[alias]',
telefono = '$datos[telefono]',
movil = '$datos[movil]',
email = '$datos[email]',
direccion = '$datos[direccion]',
poblacion = '$datos[poblacion]',
provincia = '$datos[provincia]',
codigopostal = '$datos[codigopostal]',
tratamientocapilar = '$datos[tratamientocapilar]',
tratamientocorporal = '$datos[tratamientocorporal]',
observaciones = '$datos[observaciones]'
WHERE idclientes = '$datos[idcliente]'";
// ... codigo ...
Заметь: Твой код восприимчивый к вставке SQL, я советую тебе, чтобы ты прочитал этот ответ для того, чтобы ты научился предотвращать это.
$datos
. – 27.12.2016, 17:06