• ¡Bienvenido a XenFácil!

    Estás viendo el sitio como Invitado. Para poder participar en este sitio

    y obtendrás privilegios adicionales, acceso a otras áreas y mucho mas.

    ¡Es gratis!


    ¿Ya eres miembro? Inicia sesión

Solucionado Crear una página que lea de la base de datos

Estado
Cerrado para nuevas respuestas

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
Rich (BB code):
  • The existing data required by the data writer could not be found.
  • The field 'numero' was not recognised.
¿Has pasado el campo 'numero' a la plantilla cuando la muestras para editar o agregar? Deduzco que número es una matríz por lo que deberás recogerla como matríz.

Salud2
 

SmauG

XenForoUser
Mensajes
86
Puntuación de reacciones
9
Puntos
8
'numero' está "definido" en la plantilla, es un combobox que sólo muestra 1 y 2, dejándote elegir entre ellos. Lo tengo definido como UINT en el datawriter y en la db como tinyint, y lo trato como tal en el controlador.
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
Ya, eso no lo dudo. Me refiero que igual tienes 'numero' y no '$numero'. Está claro que no es una matríz, pero si una variable. No entiendo el por qué no te lo reconoce salvo alguna tontería como la que te menciono.

Salud2
 

SmauG

XenForoUser
Mensajes
86
Puntuación de reacciones
9
Puntos
8
Así es como lo tengo ahora. Probablemente esté fatal porque no hago más que modificaciones intentando encontrar una solución.

Template:
Insertar CODE, HTML o PHP:
<xen:foreach loop="$users" value="$user" i="$i">
<form action="{xen:link team/NumeroUpdate}" method="post" class="Form">
        <label for="ctrl_custom_title">{$user.name} {$user.surname}:</label>
                <select name="data[numero]" class="textCtrl OptOut" id="ctrl_style_id" autofocus="on">
                            <option value="1">1</option>
                            <option value="2">2</option>
                    </optgroup>
                </select>
    {$user.numero}
    <input type="hidden" name="$player_id" value="{$user.id}" /><br />

</xen:foreach>
    <input type="submit" value="{xen:phrase save}" class="button primary" accesskey="s" />
    <input type="hidden" name="_xfToken" value="{$visitor.csrf_token_page}" />
</form>

Controlador:
Insertar CODE, HTML o PHP:
    public function actionNumeroUpdate ()
    {
        $visitor = XenForo_Visitor::getInstance();
        if (!$visitor->get('user_id')) {
            return $this->responseError(new XenForo_Phrase('cannot_edit_number'));
        }
         $userId = $this->_input->filterSingle('user_id', XenForo_Input::UINT);    

        $settings = $this->_input->filter(array(
            'id' => array(XenForo_Input::UINT),
            'numero' => array(XenForo_Input::UINT),
        ));        
        $writer = $this->_saveUser($settings, $errors);


        return $this->responseRedirect(
            XenForo_ControllerResponse_Redirect::SUCCESS,
            XenForo_Link::buildPublicLink('user/Update'),
            null);
    }
    
    protected function _saveUser($settings, &$errors)
    {
        $writer = XenForo_DataWriter::create('XenForo_DataWriter_User2');
        $writer->setExistingData($settings['id']);
        $writer->set('training_group', $settings['numero']);

        $writer->preSave();

        /*if ($dwErrors = $writer->getErrors())
        {
            $errors = (is_array($errors) ? $dwErrors + $errors : $dwErrors);
            return false;
        }*/

        $writer->save();
        return $writer;
    }

El datawriter no tiene nada, simplemente la tabla con las funciones que necesita, esa parte sé que está bien.
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
Prueba a cambiar en el controlador:
Insertar CODE, HTML o PHP:
        $settings = $this->_input->filter(array(
            'id' => array(XenForo_Input::UINT),
            'numero' => array(XenForo_Input::UINT),
        ));
por
Insertar CODE, HTML o PHP:
        $settings = $this->_input->filter(array(
            'id' => array(XenForo_Input::UINT),
            data[numero] => array(XenForo_Input::UINT),
        ));

Salud2
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
Ponle un $ delante tanto en la plantilla como en el controlador.

Salud2
 

SmauG

XenForoUser
Mensajes
86
Puntuación de reacciones
9
Puntos
8
Tampoco. Si sólo edito eso, me da el error de index. Si también cambio la función de save (numero por data[numero]), tanto con el $ delante o no da el error de antes. Vamos, que el error de indexado es por no haber modificado la función de guardado y haciéndolo estamos en las misma que antes :(
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
Si en la plantilla, en vez de:
Insertar CODE, HTML o PHP:
                <select name="data[numero]" class="textCtrl OptOut" id="ctrl_style_id" autofocus="on">
                            <option value="1">1</option>
                            <option value="2">2</option>
                    </optgroup>
                </select>
pones
Insertar CODE, HTML o PHP:
                <select name="$numero" class="textCtrl OptOut" id="ctrl_style_id" autofocus="on">
                            <option value="1">1</option>
                            <option value="2">2</option>
                    </optgroup>
                </select>
y pruebas con recibir $numero.

Salud2
 

SmauG

XenForoUser
Mensajes
86
Puntuación de reacciones
9
Puntos
8
Así es como lo había hecho la primera vez, pero $numero es una variable y al tener una lista con n $numero sólo se enviaría el último, tengo que crear un array o encontrar una forma de crear n variables con n nombres distintos y tratarlas una a una.

EDITO: Por si acaso probé otra vez, y me sigue dando el error de que no lo reconoce.
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
Si en la plantilla, en vez de:
Insertar CODE, HTML o PHP:
                <select name="data[numero]" class="textCtrl OptOut" id="ctrl_style_id" autofocus="on">
                            <option value="1">1</option>
                            <option value="2">2</option>
                    </optgroup>
                </select>
pones
Insertar CODE, HTML o PHP:
                <select name="$data['numero']" class="textCtrl OptOut" id="ctrl_style_id" autofocus="on">
                            <option value="1">1</option>
                            <option value="2">2</option>
                    </optgroup>
                </select>
y pruebas. Cuando usamos numero (sin comillas o $ precedente) estamos definiendo una constante y aquí cambia. Entiendo que debieras usar para recibir la variable $data en cuyo array debieran estar los valores de 'numero' como etiqueta.

Salud2

Edito: no me había dado cuenta de que también defines {$user.numero} que puede dar lugar a la confusión del programa y del programador. ¿Cual de los dos dos numero es el que quieres capturar?
 

SmauG

XenForoUser
Mensajes
86
Puntuación de reacciones
9
Puntos
8
El primero, el segundo tan sólo es una impresión en pantalla para comprobar si se salvó o no. En un ratito pruebo con variable y comillas :)

EDITO: Probado, con y sin comillas, con y sin impresión por pantalla. No me va, sinceramente no lo entiendo. Podría estar el error en el datawriter?
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
Insertar CODE, HTML o PHP:
                <select name="$data[{$user.numero}]" class="textCtrl OptOut" id="ctrl_style_id" autofocus="on">
                            <option value="1">1</option>
                            <option value="2">2</option>
                    </optgroup>
                </select>

Prueba con esto e intenta capturar el $user.numero y el data[$user.numero]

Salud2
 

SmauG

XenForoUser
Mensajes
86
Puntuación de reacciones
9
Puntos
8
No entiendo nada. Sigo con el MISMO error a pesar de haber probado 5 o 6 métodos distintos de captura de datos. Aunque estuviese alguno mal y sólo funcionase en un caso (como si fuese una variable) pues lo entendería y lo arreglaría, pero no es el caso :S
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
Te lo miro algo más a fondo cuando vuelva de la piscina

Salud2
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
Entre lahija (11 años y de vacaciones ya), la piscina con la hija, el hijo (¡a ver si termina mañana de una vez los exámenes y aprueba!), la parienta, las comidas, ....

Aún no:(

Salud2
 

SmauG

XenForoUser
Mensajes
86
Puntuación de reacciones
9
Puntos
8
Don't worry, era por si se te había pasado. Esto me tiene desmotivadísimo, en vez de avanzar en otros módulos estoy estancado en este.. :(
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
¿Me puedes poner el código que pasas del controlador a la plantilla?

Salud2
 

SmauG

XenForoUser
Mensajes
86
Puntuación de reacciones
9
Puntos
8
Rich (BB code):
    public function actionNumero()
    {
        //Selecciona la ID del usuario    
        $_userId = $this->_input->filterSingle('user_id', XenForo_Input::UINT);

        if ($_userId)
            $userId = $this->_input->filterSingle('user_id', XenForo_Input::UINT);
        else
            $userId =  XenForo_Visitor::getUserId();
            
        $id= ($this->getModelFromCache('XenForo_Model_User2')->getId($userId));
        $numero = ($this->getModelFromCache('XenForo_Model_User2')->getNumero($userId));

        
        $viewParams = array(
            'id' => $players,
            'numero' => $numero
        );

        return $this->responseView('XenForo_ViewPublic_Misc_Empty', 'user/Update', $viewParams);
    }
 
Estado
Cerrado para nuevas respuestas
Arriba