CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Php] : Variable non définie alors qu...

Criticaljack
Criticaljack
Niveau 10
24 août 2014 à 21:12:08

..'il me semble qu'elle l'est.

Bonsoir, désolé pour le topic très con mais je bloque un peu sur une erreur stupide

Notice: Undefined variable: dbh in C:\wamp\www\test\news.php on line 15

Donc, la variable dbh n'est pas définie..Pourtant la variable dbh existe bel et bien, et est incluse dans le fichier via un include, je pense que c'est du au fait que cette variable est dans une fonction (le code est tiré d'un livre, je suis seulement entrain de bidouiller pour bien comprendre)

Donc je vous envoie le code en question

../libs/connexion.php
http://pastebin.com/TpTSyHx8

news.php/..
http://pastebin.com/sMHZJd0i

J'ai fais un var_dump($dbh); comme j'aurais pu faire n'importe quoi, c'était juste en guise de test.

Donc voilà, c'est sûrement très con et sûrement lié à la fonction, mais je bloque un peu la dessus.

deepblue
deepblue
Niveau 16
24 août 2014 à 21:30:06

Ta variable n'existe que dans ta fonction verification. http://php.net/manual/fr/r/language.variables.scope.php

Par ailleurs, une exception n'est potentiellement pas seulement levée qu'à la connexion, mais également pendant l'exécution de tes requêtes.

Criticaljack
Criticaljack
Niveau 10
24 août 2014 à 21:32:29

Ah d'accord, donc ma variable est considérée comme locale étant donnée qu'elle est dans la fonction, je vois ! Merci pour le lien.

Pour ta deuxième phrase, c'est toujours en rapport a cette variable locale ou tu as relevé un autre problème ? (le script vient de Php 5 avancé la dernière édition je précise, j'ai pas trouvé mieux en guise de source pour éplucher le code et le comprendre)

Criticaljack
Criticaljack
Niveau 10
24 août 2014 à 21:39:42

Hmm, visiblement le simple fait de déclarer la variable $dbh comme global ne suffit pas (je veux dire comme ça) ;

try {
global $dbh;
...
}

Ca paraissait trop simple aussi

deepblue
deepblue
Niveau 16
24 août 2014 à 22:07:54

La deuxième partie de mon post évoquait un autre problème.

:d) https://www.jeuxvideo.com/forums/1-30-7927457-1-0-1-0-php-ameliorer-mini-chat.htm#message_7927463 (pour tes 2 problèmes)

Criticaljack
Criticaljack
Niveau 10
24 août 2014 à 22:11:14

Ah, grand merci pour le code ! Ca va me permettre de mieux découper mon code, je cherche justement deux ou trois sources pour passer aux fonctions et de plus en plus à la POO mais le cap est dur à franchir, vais lire ça, m'en inspirer dans un projet test et voir ce que ça donne !

Encore merci

Criticaljack
Criticaljack
Niveau 10
25 août 2014 à 23:06:54

Resalut, je viens reposer une question bête, j'ai vraiment du mal à mettre en place une simple fonction deleteArticle, je m'en suis tenu à ton code DeepBlue.

http://pastebin.com/6paPgUby

Donc j'imagine que je fais une connerie quelque part mais j'arrive pas trop à mettre le doigt sur ou je fais la bêtise.

Aussi, ligne 2 et 16, la fonction supprimerArticle($id) <-- J'ai enlevé le $id car ça me renvoyait un variable indéfinie sur la page delete.php

D'avance merci

Criticaljack
Criticaljack
Niveau 10
25 août 2014 à 23:19:56

Edit : J'ai modifié au niveau du html et je vois déjà un début de progrès, quand je clique sur supprimer, dans la barre de navigation je vois l'id du lien à supprimer (bien que la suppression ne se fasse toujours pas)

<span><a href="delete.php?id=<?php echo htmlspecialchars($article['id']); ?>">Supprimer</a></span>

Au prochain repost j'aurais avec un peu de chance résolu ça

Criticaljack
Criticaljack
Niveau 10
25 août 2014 à 23:42:51

Re-Re-Edit : Je suis parvenu à quelque chose mais je sais pas si c'est du tout la bonne façon de faire, du coup si quelqu'un a un avis.

J'ai modifié le code de supprimerArticle()dans connexion.php

http://pastebin.com/uwCHsDt5

Juste remplacé POST par GET et rajouté la variable en ligne 4, et ça marche avec ça, après je sais pas du tout ce que ça vaut mais ça marche en tout cas.

deepblue
deepblue
Niveau 16
26 août 2014 à 01:21:51

https://wall.deblan.org/x1baf/php/1/

Criticaljack
Criticaljack
Niveau 10
26 août 2014 à 18:10:25

Merci pour le code ! Juste pour savoir, il fait sensiblement la même chose, donc ou se joue la différence entre mon code et le tiens ?

Aussi, je constate que je n'ai jamais recours à "return", je devrais sûrement m'intéresser à ça, car j'ai jamais eu l'occasion de caser ça quelque part dans mon code.

Me reste l'update à faire et je serais bon, là je suis sur un début de piste, si je bloque je reposterais ici dans le cours de la soirée !

Darkandgel
Darkandgel
Niveau 10
26 août 2014 à 18:24:58

Le return te permet de tester la réussite de ta fonction

if(supprimerArticles($id))
{
//Code si ça c bien passé
}
else
{
//Dans le cas contraire
}

La différence entre vos deux codes c'est que celui de Deepblue est plus maintenable.

Criticaljack
Criticaljack
Niveau 10
26 août 2014 à 18:35:52

Ah d'accord, je vais quand même y jeter un oeil plus en détail ce soir à ce return

Là je suis sur un début pour la modification d'article, je clique sur modifier, ça récupère l'id de l'article à modifier et me présente un formulaire, mais quand j'envoie le formulaire, pas de modification, juste une nouvelle entrée dans la BDD (comme si la requête était un insert)

http://pastebin.com/ytYB9W1V (La fonction modification)

http://pastebin.com/ZS40EVA3 (Le formulaire de modification)

Je pense que je rate un truc au niveau du formulaire car théoriquement je devrais voir ce qu'il y fait déjà marquer dans ce dit formulaire, hors quand je lance la modification, il est vierge.

Criticaljack
Criticaljack
Niveau 10
26 août 2014 à 21:00:53

Oui bon en fait c'est totalement stupide de ma part, je pensais que le fait de rediriger simplement vers l'id correspondant suffirait, et que j'aurais pas à refaire un SELECT de l'id correspondant pour afficher l'article à modifier (je sais pas si c'est très clair), mais non, c'est complétement con, donc je pense que ça ira déjà mieux quand j'aurais rajouté ça.

deepblue
deepblue
Niveau 16
26 août 2014 à 21:39:09

Tu te méprends sur les fonctions.

Ce que tu dois comprendre pour bien avancer (et refaire ton code qui n'a, en partie, aucun sens).

1. Il est essentiel de segmenter ton code. Typiquement, tu dois séparer la couche de gestion des donnéeset celle qui les affiche.

2. Tu dois découpler ton code. Tu définis dans ton application des morceaux de code métier qui ensemble formeront ton site, mais qui indépendamment les uns et des autres, ne savent faire qu'un seul truc.

À quoi sert une fonction ? Pour faire simple, ça permet de, suivant des paramètres qui peuvent évoluer suivant le contexte, de réponde à une problématique.

function calculerSurface($largeur, $hauteur) {
return $largeur * $hauteur;
}

Si je souhaite utiliser cette fonction, je pourrais alimenter $largeur et $hauteur :
- manuellement : $surface = calculer(14, 321);
- avec des des données d'un formulaire : $surface = calculer($_POST['largeur'], $_POST['hauteur']);
- des données en provenance d'une url : $surface = calculer($_GET['largeur'], $_GET['hauteur']);
- ou bien via des retours d'autres fonctions par exemple : $surface = calculer(foo(), bar());

En gros, les fonctions s'en branlent de savoir comment les paramètres qu'elles utilisent sont créés, et les utilisent, point barre.

Qu'est-ce que toi tu fais ? Tu définis que les données dont ta fonction a besoin proviennent de $_POST. Si demain tu veux utiliser ta fonction pour modifier ton article autre chose que $_POST, tu seras contraint de réécrire ton code.

Dans le topic du minichat, j'ai fais quoi ? On a une fonction enregistrerMessage" qui pour enregistrer un message a besoin :
- d'un auteur
- d'un contenu

auteur et contenu pouvant varier, ce sont donc des paramètres de ma fonction.

Comment j'utilise cette fonction ? Je l'appelle bêtement en renseignant ces paramètres :

$auteur = trim($_POST['auteur']);
$contenu = trim($_POST['contenu']);
enregistrerMessage($auteur, $contenu);

Si demain je veux créer un message généré depuis une API, les valeurs de $auteur et $contenu ne viendront pas de $_POST mais sans doute d'ailleurs. Quoiqu'il en soit, enregistrerMessage fonctionnera de la même façon et je n'ai pas à me poser la question de comment elle fonctionne, car je sais que son rôle c'est d'enregistrer un message et que les paramètres dont elle a besoin c'est à moi de lui donner lorsque je l'appelle.

Par conséquent, ton id, ton titre, ton auteur et ton contenu doivent être des paramètres de la fonction. Tu vires tes $_POST['bidule'] par ces paramètres et quand tu appelles cette fonction, tu mets en paramètres tes $_POST['bidule'].

PS : je n'ai pas relu mon post, désolé pour les fautes de frappes et les mauvaises tournures.

Criticaljack
Criticaljack
Niveau 10
26 août 2014 à 22:14:34

Ok, je vois, suite à ton message j'ai jeté un oeil au passage sur les fonctions utilisateurs de mon bouquin histoire de bien bien comprendre, et ok, je vois, justement j'avais encore jamais tâté des fonctions jusqu'ici et je me demandais souvent quand "mettre quelque chose entre les parenthèses"

Le code je le pensais relativement correct au niveau de ma fonction pourtant, j'avoue débuter donc je m'inspire de code existant que je trouve à gauche à droite (entre mes bouquins et les recherches google, mais pourtant je revois souvent cette façon de procéder (je parle de ma fonction update)

Par exemple pour la fonction que j'ai montré ci dessus (qui est juste un des nombreux essais que j'ai fais) était littéralement c/c de là (enfin, pas copiée collée, écrite ligne par ligne en faisant de mon mieux pour pas bêtement recopier, je précise, je veux pas passer pour un mauvais élève) http://www.mustbebuilt.co.uk/php/insert-update-and-delete-with-pdo/

Je vais relire encore un coup ton post, lire encore un peu mon bouquin, réfléchir et voir si j'arrive à quelque chose de mieux !

Darkandgel
Darkandgel
Niveau 10
27 août 2014 à 10:14:35

Les codes utilisés pour illustrer une fonctionnalité ne sont pas toujours les mieux conçus, ils sont juste la pour te montrer comment tel truc marche.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment