8768 sujets

Développement web côté serveur, CMS

Bonjour à vous tous,

J'ai mon premier devoir à faire en développement PHP. Je dois réaliser un site de covoiturage où les internautes devront passer par un formulaire de contact pour la mise en relation avec des conducteurs. L'internaute doit choisir une ville de départ, à partir d'une liste définie, ainsi que de renseigner son identité, et en fonction de son choix différents itinéraires seront proposés.

J'ai affecté des valeurs (ville de départ, ville d'arrivée, heure de départ, heure d'arrivée et conducteur) à des clefs (index) le tout affecté dans un tableau de données (array) appelé $voyages. Ensuite, j'utilise la boucle foreach pour afficher le contenu du tableau de données de la manière suivante : 0 - Paris, Nice, 12:00, 14:00, Paul.

Mon soucis c'est que je ne comprends pas pourquoi je n'arrive pas à afficher le contenu du tableau de données, il me renvoi en permanence des erreurs comme indiqué ci-dessous :
upload/1649998797-62242-capturedancran2022-04-1506465.png
upload/1649998822-62242-capturedancran2022-04-1506472.png

Vous arrivez à voir où se trouve l'erreur ?
Voici mon code PHP :

$voyages = array(
		'id' => 0, ['depart' => 'Paris', 'destination' => 'Nantes', 'heure_depart' => '11:00', 'heure_arrivee' => '12:34', 'conducteur' => 'Thomas'],
		'id' => 1, ['depart' => 'Orléans', 'destination' => 'Nantes', 'heure_depart' => '05:15', 'heure_arrivee' => '09:32', 'conducteur' => 'Mathieu'],
		'id' => 2, ['depart' => 'Dublin', 'destination' => 'Tours', 'heure_depart' => '07:23', 'heure_arrivee' => '08:50', 'conducteur' => 'Nathanaël'],
		'id' => 3, ['depart' => 'Paris', 'destination' => 'Orléans', 'heure_depart' => '03:00', 'heure_arrivee' => '05:26', 'conducteur' => 'Clément'],
		'id' => 4, ['depart' => 'Paris', 'destination' => 'Nice', 'heure_depart' => '10:00', 'heure_arrivee' => '12:09', 'conducteur' => 'Audrey'],
		'id' => 5, ['depart' => 'Nice', 'destination' => 'Nantes', 'heure_depart' => '10:40', 'heure_arrivee' => '13:00', 'conducteur' => 'Pollux'],
		'id' => 6, ['depart' => 'Nice', 'destination' => 'Tours', 'heure_depart' => '11:00', 'heure_arrivee' => '16:10', 'conducteur' => 'Edouard'],
		'id' => 7, ['depart' => 'Tours', 'destination' => 'Amboise', 'heure_depart' => '16:00', 'heure_arrivee' => '18:40', 'conducteur' => 'Priscilla'],
		'id' => 8, ['depart' => 'Nice', 'destination' => 'Nantes', 'heure_depart' => '12:00', 'heure_arrivee' => '16:00', 'conducteur' => 'Charlotte'],
		);
		
		foreach($voyages as $clef => $valeur){
			echo $clef . ' - ' . $valeur . '<br>';
		}

Merci pour votre aide.
Modifié par ObiJuanKenobi (15 Apr 2022 - 07:02)
Bonjour,

La notice vient du fait que tu tentes d'afficher un tableau avec 'echo', d'où le 'Array to string convertion...' .
De plus, tu parcoures ton tableau comme un tableau associatif mais il n'a pas de clés car tu as mis tous les éléments séparés par des virgules.

Essaie ça pour voir :


$voyages = array(
    ['depart' => 'Paris', 'destination' => 'Nantes', 'heure_depart' => '11:00', 'heure_arrivee' => '12:34', 'conducteur' => 'Thomas'],
    ['depart' => 'Orléans', 'destination' => 'Nantes', 'heure_depart' => '05:15', 'heure_arrivee' => '09:32', 'conducteur' => 'Mathieu'],
    ['depart' => 'Dublin', 'destination' => 'Tours', 'heure_depart' => '07:23', 'heure_arrivee' => '08:50', 'conducteur' => 'Nathanaël'],
    ['depart' => 'Paris', 'destination' => 'Orléans', 'heure_depart' => '03:00', 'heure_arrivee' => '05:26', 'conducteur' => 'Clément'],
    ['depart' => 'Paris', 'destination' => 'Nice', 'heure_depart' => '10:00', 'heure_arrivee' => '12:09', 'conducteur' => 'Audrey'],
    ['depart' => 'Nice', 'destination' => 'Nantes', 'heure_depart' => '10:40', 'heure_arrivee' => '13:00', 'conducteur' => 'Pollux'],
    ['depart' => 'Nice', 'destination' => 'Tours', 'heure_depart' => '11:00', 'heure_arrivee' => '16:10', 'conducteur' => 'Edouard'],
    ['depart' => 'Tours', 'destination' => 'Amboise', 'heure_depart' => '16:00', 'heure_arrivee' => '18:40', 'conducteur' => 'Priscilla'],
    ['depart' => 'Nice', 'destination' => 'Nantes', 'heure_depart' => '12:00', 'heure_arrivee' => '16:00', 'conducteur' => 'Charlotte'],
);

foreach ($voyages as $voyage) {
    echo "Départ : " . $voyage['depart'] . ", destination : " . $voyage['destination'] . '<hr />';
}
Merci Gilles, ça marche maintenant. Par contre, il va y avoir un souci. Le devoir impose d'utiliser la déclaration de variables tableau de données inscrite dans l'énoncé du devoir et tu as changé le contenu. Tu as notamment supprimé 'id' => 0, 1, 2, 3, 4, 5, 6, 7 et 8. Cependant, j'ai compris le contenu de la nouvelle déclaration de variable et c'est ce que je cherche. Je risque d'avoir un 0 (ou une mauvaise note) mais je m'en fous, ma formation ne vise pas un diplôme, que des notes pour le suivi de la formation. Ce que je veux, surtout, c'est comprendre et pratiquer.

Autre chose, tu écris ça dans le foreach :
foreach ($voyages as $voyage)

Je sais que la variable $voyages représente le tableau de données mais je ne sais pas à quoi correspond $voyage (sans "s"). Tu peux m'expliquer ?
Modifié par ObiJuanKenobi (15 Apr 2022 - 15:14)
Dans l'exemple de Gilles, $voyage sans "s" représente chaque item du tableau $voyages avec "s"
ton tableau est mal créer...
si tu fais un var_dump de $voyages, on voit bien qu'il est mal créer d'ailleurs.

une clé doit être unique, et la tu as "id" plusieurs fois. donc au final id sera égale UNIQUEMENT à 8 (pour chaque "id" il gardera la dernière valeur "id". Vu que le dernier "id" c'est 8 alors tu auras dans ton tablaeu uniquement "id" 8 et pas les autres.)

d'ailleurs on le voit dans ta capture d'écran de tes messages d'erreurs il t'affiche tout en haut "Id - 8"

Voila à quoi ressemble ton tableau FINAL :

array(10) {
  ["id"]=>
  int(8)
  [0]=>
  array(5) {
    ["depart"]=>
    string(5) "Paris"
    ["destination"]=>
    string(6) "Nantes"
    ["heure_depart"]=>
    string(5) "11:00"
    ["heure_arrivee"]=>
    string(5) "12:34"
    ["conducteur"]=>
    string(6) "Thomas"
  }
  [1]=>
  array(5) {
    ["depart"]=>
    string(8) "Orléans"
    ["destination"]=>
    string(6) "Nantes"
    ["heure_depart"]=>
    string(5) "05:15"
    ["heure_arrivee"]=>
    string(5) "09:32"
    ["conducteur"]=>
    string(7) "Mathieu"
  }
  [2]=>
  array(5) {
    ["depart"]=>
    string(6) "Dublin"
    ["destination"]=>
    string(5) "Tours"
    ["heure_depart"]=>
    string(5) "07:23"
    ["heure_arrivee"]=>
    string(5) "08:50"
    ["conducteur"]=>
    string(10) "Nathanaël"
  }
  [3]=>
  array(5) {
    ["depart"]=>
    string(5) "Paris"
    ["destination"]=>
    string(8) "Orléans"
    ["heure_depart"]=>
    string(5) "03:00"
    ["heure_arrivee"]=>
    string(5) "05:26"
    ["conducteur"]=>
    string(8) "Clément"
  }
  [4]=>
  array(5) {
    ["depart"]=>
    string(5) "Paris"
    ["destination"]=>
    string(4) "Nice"
    ["heure_depart"]=>
    string(5) "10:00"
    ["heure_arrivee"]=>
    string(5) "12:09"
    ["conducteur"]=>
    string(6) "Audrey"
  }
  [5]=>
  array(5) {
    ["depart"]=>
    string(4) "Nice"
    ["destination"]=>
    string(6) "Nantes"
    ["heure_depart"]=>
    string(5) "10:40"
    ["heure_arrivee"]=>
    string(5) "13:00"
    ["conducteur"]=>
    string(6) "Pollux"
  }
  [6]=>
  array(5) {
    ["depart"]=>
    string(4) "Nice"
    ["destination"]=>
    string(5) "Tours"
    ["heure_depart"]=>
    string(5) "11:00"
    ["heure_arrivee"]=>
    string(5) "16:10"
    ["conducteur"]=>
    string(7) "Edouard"
  }
  [7]=>
  array(5) {
    ["depart"]=>
    string(5) "Tours"
    ["destination"]=>
    string(7) "Amboise"
    ["heure_depart"]=>
    string(5) "16:00"
    ["heure_arrivee"]=>
    string(5) "18:40"
    ["conducteur"]=>
    string(9) "Priscilla"
  }
  [8]=>
  array(5) {
    ["depart"]=>
    string(4) "Nice"
    ["destination"]=>
    string(6) "Nantes"
    ["heure_depart"]=>
    string(5) "12:00"
    ["heure_arrivee"]=>
    string(5) "16:00"
    ["conducteur"]=>
    string(9) "Charlotte"
  }
}


Il n'y a QUE "id" 8

Il faut revoir la conception de ton tableau

indice: je pense que tu devrais mettre ton index "id" au même niveau que le reste dans les crochets.

['id' => 0, 'depart' => 'Paris', 'destination' => 'Nantes', 'heure_depart' => '11:00', 'heure_arrivee' => '12:34', 'conducteur' => 'Thomas']


avec l'amélioration de ton tableau tu peux avoir ce genre de résultat (que j'ai eu du coup) :

0, Paris, Nantes, 11:00, 12:34, Thomas
1, Orléans, Nantes, 05:15, 09:32, Mathieu
2, Dublin, Tours, 07:23, 08:50, Nathanaël
3, Paris, Orléans, 03:00, 05:26, Clément
4, Paris, Nice, 10:00, 12:09, Audrey

Modifié par JENCAL (15 Apr 2022 - 16:50)
Merci Jencal. Il me manquait effectivement la clef pour chaque donnée du tableau. Je l'ai ajoutée et maintenant mon tableau est complet. Voilà le rendu final du code PHP :

	$voyages = array(
		['id' => 0, 'depart' => 'Paris', 'destination' => 'Nantes', 'heure_depart' => '11:00', 'heure_arrivee' => '12:34', 'conducteur' => 'Thomas'],
		['id' => 1, 'depart' => 'Orléans', 'destination' => 'Nantes', 'heure_depart' => '05:15', 'heure_arrivee' => '09:32', 'conducteur' => 'Mathieu'],
		['id' => 2, 'depart' => 'Dublin', 'destination' => 'Tours', 'heure_depart' => '07:23', 'heure_arrivee' => '08:50', 'conducteur' => 'Nathanaël'],
		['id' => 3, 'depart' => 'Paris', 'destination' => 'Orléans', 'heure_depart' => '03:00', 'heure_arrivee' => '05:26', 'conducteur' => 'Clément'],
		['id' => 4, 'depart' => 'Paris', 'destination' => 'Nice', 'heure_depart' => '10:00', 'heure_arrivee' => '12:09', 'conducteur' => 'Audrey'],
		['id' => 5, 'depart' => 'Nice', 'destination' => 'Nantes', 'heure_depart' => '10:40', 'heure_arrivee' => '13:00', 'conducteur' => 'Pollux'],
		['id' => 6, 'depart' => 'Nice', 'destination' => 'Tours', 'heure_depart' => '11:00', 'heure_arrivee' => '16:10', 'conducteur' => 'Edouard'],
		['id' => 7, 'depart' => 'Tours', 'destination' => 'Amboise', 'heure_depart' => '16:00', 'heure_arrivee' => '18:40', 'conducteur' => 'Priscilla'],
		['id' => 8, 'depart' => 'Nice', 'destination' => 'Nantes', 'heure_depart' => '12:00', 'heure_arrivee' => '16:00', 'conducteur' => 'Charlotte'],
	);

	foreach ($voyages as $voyage) {
		echo $voyage['id'] . ' - Départ : '
		. $voyage['depart'] . ', destination : '
		. $voyage['destination'] . ', heure de départ : '
		. $voyage['heure_depart'] . ', heure d\'arrivée : '
		. $voyage['heure_arrivee'] . ', conducteur : '
		. $voyage['conducteur'] . '<br>';
}


Je dois maintenant placer cette boucle foreach dans une structure conditionnelle qui va dans un premier temps vérifier si l'internaute a cliqué sur le bouton "envoyer", auquel cas elle testera si tous les champs sont renseignés. Si ce n'est pas le cas elle renverra un message du genre "Vous devez remplir tous les champs" mais si elles sont remplies, elle appliquera la boucle foreach selon le choix de la ville de départ, c'est-à-dire que si l'internaute sélectionne la ville de Paris, la boucle enverra le résultat de 3 voyages possibles en indiquant les détails.
Modifié par ObiJuanKenobi (16 Apr 2022 - 06:10)