error foreach () Advertencia: argumento no válido proporcionado para foreach ()

sigo recibiendo este error para una serie de errores que he configurado en un método

aquí está el código

public function showerrors() {
        echo "<h3> ERRORS!!</h3>";
        foreach ($this->errors as $key => $value)
        {
            echo $value;
        }
    }

sigo recibiendo este "Advertencia: argumento no válido suministrado para foreach ()" cuando ejecuto el programa configuro la matriz de errores en el constructor de esta manera

 $this->errors = array();

¡así que no estoy completamente seguro de por qué no imprimirá los errores!

public function validdata() {
        if (!isset($this->email)) {
            $this->errors[] = "email address is empty and is a required field";
        }

        if ($this->password1 !== $this->password2) {
            $this->errors[] = "passwords are not equal ";
        }
        if (!isset($this->password1) || !isset($this->password2)) {
            $this->errors[] = "password fields cannot be empty ";
        }
        if (!isset($this->firstname)) {
            $this->errors[] = "firstname field is empty and is a required field";
        }
        if (!isset($this->secondname)) {
            $this->errors[] = "second name field is empty and is a required field";
        }

        if (!isset($this->city)) {
            $this->errors[] = "city field is empty and is a required field";
        }


        return count($this->errors) ? 0 : 1;
    }

¡así es como agrego datos a la matriz en sí! gracias por la ayuda tambien!

bien, agregué esto al método

public function showerrors() {
        echo "<h3> ERRORS!!</h3>";
        echo "<p>" . var_dump($this->errors) . "</p>";
        foreach ($this->errors as $key => $value)
        {
            echo $value;
        }

luego sale en mi página esto

¡¡ERRORES!! string(20) "¡¡Envío no válido!!" si no escribo nada en mis cuadros de texto, ¿está diciendo que es una cadena?

aquí está mi constructor también, ¡lo siento por esto, soy nuevo en php!

  public function __construct() {

        $this->submit  = isset($_GET['submit'])? 1 : 0;
        $this->errors = array();
        $this->firstname = $this->filter($_GET['firstname']);
        $this->secondname = $this->filter($_GET['surname']);
        $this->email = $this->filter($_GET['email']);
        $this->password1 = $this->filter($_GET['password']);
        $this->password2 = $this->filter($_GET['renter']);
        $this->address1 = $this->filter($_GET['address1']);
        $this->address2 = $this->filter($_GET['address2']);

        $this->city = $this->filter($_GET['city']);
        $this->country = $this->filter($_GET['country']);
        $this->postcode = $this->filter($_GET['postcode']);


        $this->token = $_GET['token'];
    }

preguntado el 10 de marzo de 12 a las 14:03

Publica más código. Mi apuesta es que en algún lugar al que está intentando agregar $this->errors pero accidentalmente usó el = en lugar de [] = y terminé sobreescribiéndolo con un escalar... -

Un error común que a veces cometo cuando escribo demasiado rápido es $this->errors = 'foo'; en lugar de $this->errors[] = 'foo';. En lo que respecta a este código, no es el problema. -

Verifique con var_dump lo que sucedió antes del foreach. -

$this->errors puede ser una matriz inicialmente, pero ciertamente no lo es cuando showerrors se llama. Entonces, ¿por qué no arrojas su valor en showerrors para ver que es? -

@eoin No, busca el método que establece la cadena "invalid submission". Ahí está tu error. -

1 Respuestas

En su validación predeterminada (sin completar) a su formulario, donde el mensaje "invalid submission" está establecido, dejaste los corchetes []causando $this->errors para ser sobrescrito con una cadena simple en lugar de agregarse a la matriz.

// Change
$this->errors = "invalid submission";

//...to...
$this->errors[] = "invalid submission";

respondido 10 mar '12, 15:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.