DATABASE

Le forum de l'Annuaire Francophone des Scripts CGI: CGI : Cours CGI: DATABASE

Damien Duchenne

dimanche 12 novembre 2000 - 09h49
Bonjour,
Je voudrais savoir comment faire pour récupérer des informations enregistrées dans DATABASE.DAT en les affichant sur une page où je choisis l'endroit des résultats. Je veut dire une adresse du genre :

http://www.mondomaine.com/cgi-bin/monscript.cgi?login=dachu

Dès qu'on va sur cette adresse, je voudrais que le cgi recherche dans le DATABASE le login DACHU et affiche toutes les informations concernant ce login sur une page que je prédéfinie.
J'ai déjà visionné le COURS 4, mais ce n'est pas vraiment ce que je veux...

Merci,
Bien à vous,
Damien Duchenne

Frédéric (Frédéric)

dimanche 12 novembre 2000 - 17h17
Bonjour,

Il s'agit d'une recherche comme dans le cours 4 : il faut rechercher le login dans chaque ligne de la base de données et si on l'a trouvé on regarde si c'est le login.

En vitesse voici ce que ca donnerait (je n'ai pas testé)

#!G:/Prg_internet/Perl/bin/perl.exe

$db = "database.dat";
require "cgi-lib.pl";

&ReadParse(*in);
print &PrintHeader;

$login = $in{login};


open (DATABASE, "<$db") || die "Can't open $db: $!\n";
@LINES=<DATABASE>;
close(DATABASE);
$SIZE=@LINES;
for ($i = 0; $i <= $SIZE; $i++)
{ $_=$LINES[$i];
if (/$login/)
{ # trouvé enregistrement qui contient la clé
($nom,$prenom,$rue,$no,$cp,$localite,$pays) = split(/\|/,$_);
if ($nom =~ /$login/)
{ #le nom contient le login
print "$nom,$prenom,$rue,$no,$cp,$localite,$pays<br>\n";
}
}
}

Cela compare le 1er champ de votre base de données avec le login passé en parametre.

Damien Duchenne

dimanche 12 novembre 2000 - 18h25
Merci,
Il fonctionne, mais j'ai deux problèmes :
le cgi traite l'information indéfiniment et pas comme je veux.
Quand je tape l'adresse, il affiche la page avec toutes les informations (ce qui veut dire que ça fonctionne), mais il les affichent indéfiniment et pas comme je veux.
Je voudrais que les infos s'affichent avec des tableaux, des choix de la taille et du caractère du texte,... Et aussi, evidemment, que ça s'affiche une seule fois !!!!!!!

Merci,
Bien à vous,
Damien Duchenne

Frédéric (Frédéric)

dimanche 12 novembre 2000 - 21h16
Bonjour,

Chez moi il n'affiche pas les infos indéfiniment.
Il n'affiche que la ou les lignes contenant ce que je lui ai demandé.

Pour l'affichage qui n'est pas comme vous voulez, c'est un autre problème.
Regardez le cours 4, ou il y a une mise en page avec des cellulles de tableau et inspirez vous en.
Au lieu de faire un simple print avec tout a la queu leu leu, faites quelque chose du genre
print <<FIN;
<font face="Arial">$nom, $prenom, ...</font>
FIN


Amicalement,

Frédéric

Damien Duchenne

vendredi 17 novembre 2000 - 18h17
Bonjour,
Ca fait plusieurs fois que j'essaye, mais il n'accepte pas le chmod 755... Quel chmod dois-je mettre ? Voici mon script, regardez si ce n'est pas une faute de ma part qui rend impossible son exécution :


#!/usr/bin/perl

$db = "database.dat";
require "cgi-lib.pl";

&ReadParse(*in);
print &PrintHeader;

$pseudo = $in{c};


open (DATABASE, "<$db") || die "Can't open $db: $!\n";
@LINES=<DATABASE>;
close(DATABASE);
$SIZE=@LINES;
for ($i = 0; $i <= $SIZE; $i++)
{ $_=$LINES[$i];
if (/$pseudo/)
{ # trouvé enregistrement qui contient la clé
($a, $b, $c) = split(/\|/,$_);
if ($a =~ /$pseudo/)
{ #le nom contient le pseudo
print <<FIN;
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>$pseudo$</title>
<style type="text/css">A:link {
TEXT-DECORATION: none
}
A:visited {
TEXT-DECORATION: none
}
A:active {
TEXT-DECORATION: none
}
A:hover {
TEXT-DECORATION: underline
}
</style>
<script language="JavaScript">
<!--Toujours Plus De Javascript -->
<!-- http://fafaworld.ifrance.com -->
<!--
function click() {
if (event.button==2) {
alert('Trop curieux ;-)')
}
if (event.button==1+2) {
alert('Trop curieux ;-)')
}
}
document.onmousedown=click
// -->
</script>
</head>
<body>
<script language="JavaScript1.2">

if (document.all)
document.body.style.cssText="background:white url(http://carami.multimania.com/images/arriere_plan.gif) no-repeat fixed center center"
</script>

<p align="center"><font face="Times New Roman"><b><i>$c&nbsp;&lt;$b $a&gt;...</i></b></font></p>

<p align="center"><font face="Times New Roman"><a href="http://foaler.citeglobe.com/cgi-bin/CarAmi/Ecrire/champs.cgi?email=$email_sender&amp;nompersonne=$b+$a" OnMouseOver="self.status='Envoyer un message à $b';return true;" OnMouseOut="self.status=' ';return true;">Cliquez
ici pour envoyer un message à cette personne</a></font></p>
<div align="center">
<table border="0" cellpadding="0" width="75%">
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Nom :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$a</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Prénom :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$b</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Pseudo Caramail :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$c</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">E-mail :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$email_sender$</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Sexe :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$d</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Date de naissance :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$e</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Ville :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$f</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Pays :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$g</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Langue :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$h</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Recherche :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$i</font>
</p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Emploi :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$j</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Etat civil :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$k</font>
</p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Taille :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$l cm</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Poids :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$m kg</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Yeux :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$n</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Cheveux :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$o</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Nationalité :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$p</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Fumeur :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$q</font>
</p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Plats favoris :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$r</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Préférences musicales :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$s</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Préférences de films :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$t</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Ce que je préfère :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$u</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Ce que je déteste :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$v</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Hobbies :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$w</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Numéro ICQ :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$x</font></p>
</td>
</tr>
<tr>
<td bgcolor="#FF6600">
<p align="left"><font face="Times New Roman">Informations supplémentaires :</font></p>
</td>
<td bgcolor="#FF9933">
<p align="left"><font face="Times New Roman">$y</font></p>
</td>
</tr>
</table>

</div>
</body>
</html>
FIN

}
}
}


Merci,
Bien à vous,
Damien Duchenne

Frédéric (Frédéric)

vendredi 17 novembre 2000 - 22h04
Bonjour,

a première vue, je ne vois pas de problèmes.
Qu'est ce qui vous fait croire que c'est un probleme de chmod ?

Essayez en faisant commencer votre script par
#!/usr/bin/perl

use CGI;
use CGI::Carp qw(fatalsToBrowser);

# le suite du script ...
cela devrait afficher dans le browser certaines erreurs.

Damien Duchenne

samedi 18 novembre 2000 - 16h44
Bonjour,
Tout d'abord je voudrais vous remercier pour tout ce que vous faites pour moi !
Voilà, j'ai pu localiser l'erreur... Maintenant, j'ai un autre problème, voyez vous-même en allant à l'adresse :

http://foaler.citeglobe.com/cgi-bin/TestCGI/test6.cgi?login=dachu

En tout cas, ça ressemble déjà à quelque chose !

Merci,
Bien à vous,
Damien Duchenne

Frédéric (Frédéric)

samedi 18 novembre 2000 - 23h00
Bonjour,

y a comme qui dirait un probleme :)
oui mais sans le script je ne peux rien faire.
Essayer d'imprimer régulierement la valeur de $i de facon a voir combien de fois il passe dans la boucle for par exemple.

Damien Duchenne

dimanche 19 novembre 2000 - 10h21
Bonjour,
Je vous ai envoyé le CGI par e-mail... J'ai essayé de changer la valeur $i, mais ça ne change rien. Je ne comprend vraiment rien à ce cgi...

Je vous laisse,
Merci beaucoup ;-)
Damien Duchenne

Damien Duchenne

jeudi 23 novembre 2000 - 20h50
Bonjour,
Je ne comprend pas ce que vous voulez dire par plittez la ligne. Pour rappel, voici l'e-mail que vous m'aviez envoyé :

Ca pouvait difficilement fonctionner, vous faites :

for ($i = 0; $i <= $SIZE; $i++)
{ $_=$LINES[$i];
if (/$pseudo/)
{ # trouvé enregistrement qui contient la clé
($a, $b, $c, $email_sender, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n, $o, $p, $q, $r, $s, $t, $u, $v, $w, $x, $y) = split(/\|/,$_);
...
vous plittez la ligne et mettez le contenu dans des variables a b c d
f g h i j k l ...
bien sauf que $i est déja utilisé par la boucle for
$i n'est jamais plus grand que $SIZE et donc ne s'arrete jamais.
soit vous remplacez $i dans le split soit vous le changez dans le for
et le remplacez par une variable qui n'est pas utilisée.

Je ne comprend pas vraiment ce que vous vouliez dire... Merci de m'expliquer un peu plus en détails...

Merci,
Damien Duchenne

Frédéric (Frédéric)

vendredi 24 novembre 2000 - 00h51
Bonjour,


la fonction split permet de séparer une chaine de caractères suivant un caractère bien défini.
Dans ce cas ci il s'agit du caractère |
Vous séparez donc votre ligne vous placez chaque élément dans des variables que vous avez décidé d'appeler suivant les lettre de l'alphabet ($a, $b, $c, $d, ...$v, $y).
Vous mettez donc une partie du contenu de votre ligne dans la variable $i qui est justement celle qui est utilisée pour parcourir chaque ligne du fichier :
for ($i = 0; $i <= $SIZE; $i++)

comme vous changez chaque fois ca valeur, $i ne peux jamais etre plus grand que $SIZE et donc le for ne s'arrete jamais.

Quand on programme, il faut toujours faire attention a ne pas écraser le contenu de variables que l'on utilise.

Duchenne Damien

vendredi 24 novembre 2000 - 18h48
Donc, si je comprend bien, je dois arriver à ça :


for ($i = 0; $i <= $SIZE; $i++)
{ $_=$LINES[$i];
if (/$pseudo/)
{ # trouvé enregistrement qui contient la clé
($a|$b|$c|$email_sender|$d|$e|$f|$g|$h|$i|$j|$k|$l|$m|$n|$o|$p|$q|$r|$s|$t|$u|$v|$w|$x|$y) = split(/\|/,$_);
if ($a =~ /$pseudo/)


Si c'est pas ça, je sens que je vais devenir fou ;-)

J'essaye de me lancer dans la programmation, mais j'avoue que ce n'est pas des plus facile... Mais avec vous, j'apprend beaucoup et je vous en remercie !

Bien à vous,
Damien Duchenne

Frédéric (Frédéric)

samedi 25 novembre 2000 - 12h07
Bonjour,

non vous ne devez pas arriver a ca, sinon ca ne fonctionnera pas :-)

vous utilisez la variable $i pour 2 choses différentes : parcourir le fichier et pour contenir un élément d'un ligne de ce fichier.
Ces 2 utilisations sont incompatibles, vous devez donc changer le nom d'une des 2 variables $i et le remplacer par autre chose.

Cela donnerait quelque chose comme :
for ($ligne = 0; $ligne <= $SIZE; $ligne++)
{ $_=$LINES[$ligne];
if (/$pseudo/)
{ # trouvé enregistrement qui contient la clé
($a, $b, $c, $email_sender, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n, $o, $p, $q, $r, $s, $t, $u, $v, $w, $x, $y) = split(/\|/,$_);

j'ai remplacé le $i qui était dans le for par $ligne qui n'est utilisé nulle part d'autre (enfin je pense).


Ajouter un message


Ceci est une zone publique. Si vous n'avez pas de compte, entrez votre nom dans le champ "Identificateur" et laissez le mot de passe vide. Votre adresse E-mail est facultative.
Identificateur :  
Mot de passe :
E-mail :
Poster "anonymement"