Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 Programmation » [SQL] archiver avant d'effacer » 13-06-2014 20:40:56

okayassu
Réponses : 0

Bonsoir :)


je dois faire un trigger qui archive de 2 tables différentes avant d'effacer , j'ai donc crée une table pour archiver , mais lorsque que je lance la fonction que j'ai crée pour effacer cela me renvoie une erreur (ma fonction pour effacer fonctionne sans le trigger )


je reçois cette erreur que je ne comprends pas :

ERREUR:  l'enregistrement « old » n'a pas de champs « nometudiant »
CONTEXTE : instruction SQL « SELECT old.nometudiant »
fonction PL/pgsql archivage(), ligne 17 à affectation
instruction SQL « delete from periodes where numstage in
(select numstage from stages where numetudiant = numero) »
fonction PL/pgsql suppretudiant(character varying), ligne 11 à instruction SQL

ci dessous ma fonction pour effacer ainsi que mon trigger :

CREATE OR REPLACE FUNCTION suppretudiant(etudiant character varying)
  RETURNS void AS
$BODY$
declare
   numero integer;
 
begin
    select numetudiant into numero from etudiants
    where nometudiant = etudiant;
    IF NOT FOUND THEN
        RAISE EXCEPTION 'etudiant % est inexistant',etudiant;
    END IF;
delete from periodes where numstage in
(select numstage from stages where numetudiant = numero);
     delete from stages where numetudiant= numero;
    delete from etudiants where numetudiant = numero;
    return ;
end;
$BODY$
  LANGUAGE plpgsql ;
 
create or replace function archivage() returns trigger as
$$
declare
nometud varchar;
prenometud varchar;
numsta integer;
titresta varchar;
objetsta varchar;
anneescol date;
numetud integer;
regimeetud varchar;
numconta integer;
numprofsuiv integer;
remarque varchar;

begin

nometud:=old.nometudiant;  
select nometudiant into nometud from etudiants where nometudiant=nometud;
prenometud:=old.prenometudiant;
select prenometudiant into prenometud from etudiants where prenometudiant=prenometud;
numsta:=old.numstage;
select numstage into numsta from stages where numstage=numsta;
titresta:=old.titrestage;
select titrestage into titresta from stages where numstage=numsta;
objetsta:=old.objetstage;
select objetstage into objetsta from stages where numstage=numsta;
anneescol:=old.anneescolaire;
select anneescolaire into anneescol from stages where numstage=numsta;
numetud:=old.numetudiant;
select numetudiant into numetud from stages where numstage=numsta;
regimeetud:=old.regimeetudiant;
select regimeetudiant into regimeetud from stages where numstage=numsta;
numconta:=old.numcontact;
select numcontact into numconta from stages where numstage=numsta;
numprofsuiv:=old.numprofsuiveur;
select numprofsuiveur into numprofsuiv from stages where numstage=numsta;
remarque:=old.remarques;
select remarques into remarque from stages where numstage=numsta;
insert into archive values (default,nometud,prenometud,numsta,titresta,objetsta,anneescol,numetud,regimeetud,numconta,numprofsuiv,remarque);
return old;

end;
$$
language plpgsql;

create trigger archivage before delete on stages
for each row execute procedure archivage();

create trigger archivage before delete on etudiants
for each row execute procedure archivage();

create trigger archivage before delete on periodes
for each row execute procedure archivage();

si quelqu'un avait une petite idée de l'erreur ?

merci d'avance

#2 Re : Programmation » [PHP] heritage de classe » 23-04-2014 19:19:20

Salut Yoshi ,

promis je ferai mieux la prochaine fois pour les balises de code ^^

au sujet de mon petit soucis  : problème résolu  :)

je mets la solution si quelqu'un passait par le forum et rencontrait le même souci que moi :

en remplaçant mes

include './Personne.php

par 

include  once './Personne.php

il n'inclut qu'une seule fois la classe donc pas de doublon

voila voila

ps: t as vu Yoshi les belles balises? ^^

bonne soirée

#3 Re : Programmation » [PHP] heritage de classe » 22-04-2014 20:49:19

je suis desolée ,je n'arrive pas à inserer les balises de code afin que ce soit plus lisible

#4 Programmation » [PHP] heritage de classe » 22-04-2014 18:32:47

okayassu
Réponses : 3

Bonsoir,

je suis censée me servir des attributs $nom et $prenom de la classe personne pour la classe stagiaire et la classe administratif

mais lorsque j'instancie mes deux classes  dans mon lanceur je reçois cette erreur :


Fatal error: Cannot redeclare class Personne in C:\wamp\www\Personne.php on line 3

voici mes classes crées ainsi que mon lanceur , je ne trouve pas où j'aurais declaré ma classe personne plusieurs fois .

si quelqu'un avait une petite idée :)

merci d'avance :)


Ma classe personne:

<?php

class Personne{
    protected $nom;
    protected $prenom;
   
    public function __construct($nom, $prenom) {
        $this->nom = $nom;
        $this->prenom = $prenom;
    }

    public function getNom() {
       return $this->nom;
   }

   public function getPrenom() {
       return $this->prenom;
   }

   public function setNom($nom) {
       $this->nom = $nom;
   }

   public function setPrenom($prenom) {
       $this->prenom = $prenom;
   }
           
}



Ma classe Administratif:

<?php

include './Personne.php';

class Administratif extends Personne {

    private $poste;

    public function __construct($nom, $prenom, $poste) {
        parent::__construct($nom,$prenom);
        $this->poste = $poste;
    }
    public function getPoste() {
        return $this->poste;
    }

    public function setPoste($poste) {
        $this->poste = $poste;
    }   
}

Ma classe Stagiaire:

<?php
include './Personne.php';

class Stagiaire extends Personne{
       
        private $numero;
     
function __construct($nom,$prenom,$numero) {
           parent::__construct($nom,$prenom);
           $this->numero = $numero;
       } 
       public function getNumero() {
           return $this->numero;
       }

       public function setNumero($numero) {
           $this->numero = $numero;
       }
}

et enfin Mon lanceur:


<?php

include './Administratif.php';
include './Stagiaire.php';

$stagiaire=new Stagiaire("mister","T","22");
$admin= new Administratif ($nom,$prenom,"stagiaire");

echo "nom:{$stagiaire->getNom()} prenom:{$stagiaire->getPrenom()} "
. " numero:{$stagiaire->getNumero()}post{$admin->getPoste()}";

#5 Programmation » [PHP] enregistrer des nombres » 16-03-2014 19:03:46

okayassu
Réponses : 1

Bonjour ,

on m'a demandé de créer un programme qui enregistre 4 nombres saisis par l'utilisateur dans une liste et de finalement afficher la liste complète

j'ai fait ça mais je reste convaincue qu'il existe plus simple avec array() mais je n'arrive pas à voir comment , des idées? merci d'avance pour votre aide :

$tableau = [];

for ($saisie = 1; $saisie <= 4; $saisie++) {

    echo "saisir 1 nombre";
    $nb = trim(fgets(STDIN));
    $tableau[$saisie] = $nb;
}
for ($compteur_affichage=1; $compteur_affichage <= 4; $compteur_affichage++) {
    echo $tableau[$compteur_affichage] . PHP_EOL;
}

#6 Re : Programmation » [PHP] donner la possibilité de rejouer dans un jeu » 15-03-2014 16:52:04

ça fera toujours des Economies de perruques lol

mais je sens que je vais pas tarder à revenir ^^

en tous cas encore merci :))

Oka

#7 Re : Programmation » [PHP] donner la possibilité de rejouer dans un jeu » 15-03-2014 16:45:27

trouvé ^^

$reponse = "oui";
do {
$resultat = mt_rand(1, 10);
$tentatives = 10 ;

  do
  {

  echo "saisir un nombre entre 1 et 10" . PHP_EOL;
    $n = trim(fgets(STDIN));
    if ($n < $resultat) {
        echo "ton nombre est plus petit que la bonne reponse" . PHP_EOL;
    } else if ($n > $resultat) {
        echo "ton nombre est plus grand que la bonne reponse " . PHP_EOL;
    }
    $tentatives--;
    if ($n!=$resultat)
    {
    echo "il ne te reste plus que $tentatives tentative(s)" . PHP_EOL;
    }
    } while ($n != $resultat && $tentatives!=0 );

if ($tentatives==0)
{
    echo "perdu!" . PHP_EOL;
}
else {
   
echo "gagné!" . PHP_EOL ;}
echo "veux tu rejouer oui /non ?";
$reponse = trim(fgets(STDIN));
}while ($reponse == "oui");


merci beaucoup beaucoup

la route fut longue :))

#8 Re : Programmation » [PHP] donner la possibilité de rejouer dans un jeu » 15-03-2014 16:34:15

je cherche toujours hein :))

je reviens vers toi dès que j'ai reussi , grace à tes explication je sens que je ne suis plus tres loin ^^

#9 Re : Programmation » [PHP] donner la possibilité de rejouer dans un jeu » 15-03-2014 14:01:03

alors j'ai bien une petite piste :

switch ($reponse){
case ($reponse==$rejouer);
break;
}do
{
    echo "saisir un nombre entre 1 et 10" . PHP_EOL;
    $n = trim(fgets(STDIN));
    if ($n < $resultat) {
        echo "ton nombre est plus petit que la bonne reponse" . PHP_EOL;
    } else if ($n > $resultat) {
        echo "ton nombre est plus grand que la bonne reponse " . PHP_EOL;
    }
    $tentatives--;
    if ($n!=$resultat)
    {
    echo "il ne te reste plus que $tentatives tentative(s)" . PHP_EOL;
    }
} while ($n != $resultat && $tentatives!=0  );
if ($tentatives==0)
{
    echo "perdu!" . PHP_EOL;
}
else {
   
echo "gagné!" . PHP_EOL ;}
echo "veux tu rejouer oui /non ?";
$reponse = trim(fgets(STDIN));

ne fonctionne pas ( problème d'accolades du switch? )

#10 Re : Programmation » [PHP] donner la possibilité de rejouer dans un jeu » 15-03-2014 13:38:20

bonjour Yoshi et merci pour ta reponse

nous avons a peu prés le même raisonnement :

si la réponse de l'utilisateur est "oui "recommence le jeu
sinon arrete ( qui pour moi est facultatif )

je n'arrive pas à voir où je place mon :

if ($reponse==$rejouer) {( logiquement c'est toute ma boucle du jeu  qui doit être là)  sinon arrête !!

j'ai beau le placer avant ma grande boucle de jeu cela ne fonctionne pas

#11 Programmation » [PHP] donner la possibilité de rejouer dans un jeu » 15-03-2014 12:32:16

okayassu
Réponses : 9

Bonjour ,

Ayé je suis passée au php :))

je dois réaliser l'exercice suivant:

Implémenter en PHP l'algorithme qui permettra de faire deviner un nombre à l'utilisateur. Le nombre à deviner sera un nombre entre 1 et 10 généré aléatoirement par PHP. L'utilisateur devra saisir un nombre .l'utilisateur a 10 chances, une fois ces 10 chances épuisées le jeu s'arrête, indiquer à l'utilisateur si le nombre saisi est plus grand ou plus petit que le nombre à deviner et d'afficher le nombre de chances restantes . Si l'utilisateur a trouvé le nombre aléatoire avant épuisement de ses chances le jeu s'arrête., s'il n'a plus de chances le jeu s’arrête .

et là ça se corse ^^ :

Complétez votre algorithme pour qu'à la fin d'une partie le programme propose à l'utilisateur de rejouer : "Voulez-vous rejouer ? (oui/non)"

voici ce que j'ai fait :

$resultat = mt_rand(1, 10);
$tentatives = 10 ;
$rejouer = "oui";

do {
    echo "saisir un nombre entre 1 et 10" . PHP_EOL;
    $n = trim(fgets(STDIN));
    if ($n < $resultat) {
        echo "ton nombre est plus petit que la bonne reponse" . PHP_EOL;
    } else if ($n > $resultat) {
        echo "ton nombre est plus grand que la bonne reponse " . PHP_EOL;
    }
    $tentatives--;
    if ($n!=$resultat)
    {
    echo "il ne te reste plus que $tentatives tentative(s)" . PHP_EOL;
    }
} while ($n != $resultat && $tentatives!=0  );
if ($tentatives==0)
{
    echo "perdu!" . PHP_EOL;
}
else {
   
echo "gagné!" . PHP_EOL ;}
echo "veux tu rejouer oui /non ?";
$reponse = trim(fgets(STDIN));

comment recommencer le jeu si $reponse==$rejouer ?

j'ai tenté d'ajouter la condition $reponse!=$rejouer dans ma boucle while mais cela ne fonctionne pas :(

j'ai aussi tenté de le rajouter avant ma boucle DO

if ($reponse==$rejouer){
}do {
    echo "saisir un nombre entre 1 et 10" . PHP_EOL; etc....
mais ça non plus ça ne fonctionne pas .

merci d'avance pour votre aide , je m'arrache les cheveux ^^

Okayassu

#12 Re : Programmation » [AlgoBox] Affichage d'étoiles en pyramide » 08-03-2014 23:19:04

dans ma tête je  devais afficher uniquement les lignes impaires car :

ligne 1 = 1 étoile
ligne 2 = 2 étoiles
ligne 3=  3 étoiles
ligne 4=  4 étoiles
ligne 5=  5 étoiles

or la pyramide ne présente que les lignes 1,3,5 et pour avoir le nombre de lignes demandées puisque ne s'affiche qu'une ligne sur deux  je devais doubler nb afin d afficher le nb de base ( j’espère que je suis claire ^^) sinon je n'affiche que la moitié des lignes.

les "1" représentent les espaces pour que je puisse bien les compter et me repérer lors de l'affichage, je les aurais changés en " " en rendant mon exo :)

mais en voyant ton code je comprends m’être bien compliqué la vie ^^

je te remercie sincèrement pour ton explication qui a su me faire comprendre qu'il est complètement inutile d'aller chercher midi à 14h !!
encore merci et excellente soirée à toi :))

#13 Re : Programmation » [AlgoBox] Affichage d'étoiles en pyramide » 08-03-2014 21:10:22

et si avec mon algo il me sort toujours le même nombre d"espaces" ( correspondants aux 1 qui s'affichent) n'est il pas possible de juste diminuer le compteur des espaces de 1  à chaque ligne?

#14 Re : Programmation » [AlgoBox] Affichage d'étoiles en pyramide » 08-03-2014 21:02:06

bonjour et merci beaucoup pour l'explication :)

je n'aurai donc pas besoin de placer un modulo dans mon algo afin de n'afficher uniquement les lignes impaires?

je ne sais pas pourquoi mais j'arrive a comprendre plus facilement lorsque je n'afficherai que les lignes impaires ( va savoir pourquoi^^)

#15 Programmation » [AlgoBox] Affichage d'étoiles en pyramide » 08-03-2014 18:36:11

okayassu
Réponses : 13

bonjour ,

dans le cadre de mes études je dois réaliser l'exercice suivant avec ALGOBOX :

"afficher une pyramide à n étages, n étant saisi par l'utilisateur,( ici avec 5 étages  )"

    *
   ***
  *****
*******
*********

j'arrive à afficher les étoiles mais je n'arrive pas à afficher les espaces correctement car mes espaces ne diminuent pas à chaque ligne

***Algorithme lancé***
lignes pyramide?
Entrer nb : 5
1111*
1111***
1111*****
1111*******
1111*********
***Algorithme terminé***
mon algo:

1   VARIABLES
2     etoile EST_DU_TYPE NOMBRE
3     ligne EST_DU_TYPE NOMBRE
4     nb EST_DU_TYPE NOMBRE
5     espace EST_DU_TYPE NOMBRE
6   DEBUT_ALGORITHME
7     AFFICHER "lignes pyramide?"
8     LIRE nb
9     POUR ligne ALLANT_DE 1 A 2*nb
10      DEBUT_POUR
11      SI (ligne%2!=0) ALORS
12        DEBUT_SI
13        POUR espace ALLANT_DE 1 A nb-1
14          DEBUT_POUR
15          AFFICHER "1"
16          FIN_POUR
17        POUR etoile ALLANT_DE 1 A ligne
18          DEBUT_POUR
19          AFFICHER "*"
20          FIN_POUR
21        FIN_SI
22      AFFICHER " "
23      FIN_POUR
24  FIN_ALGORITHME

je n'arrive donc pas à faire ma boucle espace correctement

quelqu’un pourrait il m'aider à résoudre ce "léger" problème ? :))

merci d'avance

Pied de page des forums