IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PHP voit un tableau alors que c'est une string


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut PHP voit un tableau alors que c'est une string
    Bonjour,

    j'ai un message d'erreur incompréhensible vu qu'il me signale qu'un des arguments passés à la fonction devrait être une string alors que c'est un tableau et pourtant, c'est bien une string...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     foreach ($this['errors'] as    $one_error)
        {
            $debug = $one_error;
            if ( ( $one_error != "no error") &&
                (!strpos($one_error,"empty") ) &&
                ( ( (isset($one_error['sesaid'][0]) ) && ($one_error['sesaid'][0] ) ) ) ) /* on écrit une ligne que s'il y a
                 une erreur. Ici, la ligne 5 correspond à la ligne 19 du message d'erreur */
            {
                echo '<span class="red">For SESA' .
                    $one_error['sesaid'][0] .' and application or product '.$one_error['appliname'][0] .', '.$one_error['errorname'][0].
                    '</span><br/>';
            }
        }

    Fatal error: Uncaught TypeError: strpos(): Argument #1 ($haystack) must be of type string, array given in C:\projets\ticket_rawsrc\src\view\block\DisplayErrors.php:19 Stack trace: #0 C:\projets\ticket_rawsrc\src\view\block\DisplayErrors.php(19): strpos(Array, 'empty') #1 C:\projets\ticket_rawsrc\vendor\rawsrc\phpecho\PhpEcho.php(785): include('C:\\projets\\tick...') #2 C:\projets\ticket_rawsrc\vendor\rawsrc\phpecho\PhpEcho.php(212): rawsrc\PhpEcho\PhpEcho->render() #3 C:\projets\ticket_rawsrc\src\view\LayoutWithoutMenu.php(9): rawsrc\PhpEcho\PhpEcho->__toString() #4 C:\projets\ticket_rawsrc\vendor\rawsrc\phpecho\PhpEcho.php(785): include('C:\\projets\\tick...') #5 C:\projets\ticket_rawsrc\vendor\rawsrc\phpecho\PhpEcho.php(212): rawsrc\PhpEcho\PhpEcho->render() #6 C:\projets\ticket_rawsrc\src\view\View.php(31): rawsrc\PhpEcho\PhpEcho->__toString() #7 C:\projets\ticket_rawsrc\src\controller\CSVImportController.php(229): ticket_rawsrc\view\View->render('block', 'DisplayErrors.p...', Array, false, true) #8 C:\projets\ticket_rawsrc\index.php(132): ticket_rawsrc\controller\CSVImportController->invoke(Array) #9 {main} thrown in C:\projets\ticket_rawsrc\src\view\block\DisplayErrors.php on line 19
    Merci d'avance.

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 888
    Points : 6 632
    Points
    6 632
    Par défaut
    strpos attends une chaîne en premier paramètre, or tu lui donnes $one_error qui est manifestement un tableau (ce que confirme la ligne du dessous $one_error['sesaid'][0]), c'est normal qu'il râle.

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    En fait, ça dépend ; c'est parfois une string, parfois un tableau.
    Je viens de supprimer l'erreur en faisant :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( ( $one_error != "no error") &&
                ( (is_string( $one_error ) ) && (!strpos($one_error,"empty") ) ) &&
                ( ( (isset($one_error['sesaid'][0]) ) && ($one_error['sesaid'][0] ) ) ) ) /* on écrit une ligne que s'il y a
                une erreur */

  4. #4
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut Clean code
    Hello

    Parfois ceci parfois cela... Gloups 😉

    Je réponds sur un ton léger mais l'idée est qu'une variable doit avoir un et seul type, le reste est à bannir.

    Oui, php permet cela, oui php retourne parfois une donnée de type mixed mais beurk hein ? Le développeur ne devrait jamais à douter du type de la variable.

    Tu pourrais donc p.ex. contourner le souci en garantissant que ta variable soit un array quitte à n'avoir qu'un seul élément de type string.

  5. #5
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Hello

    Note, à la lecture de ton code que, en ligne 1, tu compares if ( ( $one_error != "no error") && et donc une comparaison de type chaine de caractères et en ligne 3, ( ( (isset($one_error['sesaid'][0]) ) && ($one_error['sesaid'][0] ) ) ) ), là, tu fais une contrôle de type tableau. Logiquement, ce type de syntaxe n'est donc pas correcte : ce serait soit une chaîne soit un tableau mais pas les deux.

    A vérifier mais, je pense, si tu définis ton fichier comme étant strict (voir https://www.phptutorial.net/php-tuto...-strict_types/) et plus concrètement par l'ajout, en haut du fichier PHP, de cette instruction declare(strict_types=1);, je pense que tu auras alors une erreur à l'exécution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. WMS Webkit Erreur 403 alors que Gecko est OK
    Par olivier_f dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 08/09/2011, 20h00
  2. Réponses: 10
    Dernier message: 22/12/2009, 19h58
  3. Connexion ouverte alors que c'est pas vrai
    Par zooffy dans le forum ASP.NET
    Réponses: 13
    Dernier message: 05/05/2008, 09h56
  4. Un URL qui ressemble a un GET alors que c'est un POST
    Par neoncyber dans le forum Langage
    Réponses: 2
    Dernier message: 27/05/2007, 18h20
  5. Réponses: 7
    Dernier message: 30/03/2007, 14h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo