Transmission de données via une URL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Transmission de données via une URL

par ouckileou » 03 août 2005, 16:29

tu peux m'expliquer l'interet de la recherche en full text j'ai pas vraiment bien compris
oui, mais ici alors :Base de données ;)

par NoNos » 03 août 2005, 16:16

Salut

tu peux m'expliquer l'interet de la recherche en full text j'ai pas vraiment bien compris

Merci

par ouckileou » 03 août 2005, 14:54

non pas une table index, mais un index :)

je ne sais pas sur quoi tu veux faire des recherches

mais reprenons l'exemple des articles, voici la table :

Code : Tout sélectionner

Articles -------- id_article titre contenu
tu veux faire une recherche full-text sur le titre ET le contenu

donc tu vas rajouter un index :

Code : Tout sélectionner

ALTER TABLE `articles` ADD FULLTEXT ( `titre`,`contenu` )
et donc ensuite tu feras ta recherches sur ces champs, puisqu'ils seront indexés

Code : Tout sélectionner

SELECT id_article, titre FROM articles WHERE MATCH(titre, contenu) AGAINST ('mot_clé')
je t'invite à lire ce petit cours : MYSQL et la recherche textuelle

et pour plus d'indications => forum "Base de données" et nouveau sujet ;)

pour le mémoire : y'a mon site perso dans mon profil :ordi: :lol:

par Elisa » 03 août 2005, 14:46

Je testerai ça ce soir, et je te dirai ce qu'il en est.

Ah, une dernière question, si je crée un moteur de recherche, je dois faire une table index: où dois-je la créer? Dans ma base sous MyAdmin au même titre que mes autres bases? Est-ce que je dois avoir coché une option fulltext ou index pour les champs dans lesquels je veux qu'il y ait une recherche en texte intégral?

p.s.: Il faudra me donner tes initiales en message privé: je pourrais faire une mention spéciale dans mon mémoire de stage... :agenouille: :agenouille: :lol:

par ouckileou » 03 août 2005, 14:28

et avec ça :
<?php
$couleur1 = '#ffcc00';
$couleur2 = '#ffffe0';
?>
<tr bgcolor="<?php echo $couleur1; ?>">
    <td><b>Produit</b></td>
    <td><b>Disciplines des bases</b></td>
</tr> 
<?php
// ici on récupère la valeur sélectionnée dans le formulaire précédent
$DisciplinesBases = $_POST['DisciplinesBases'];

$lien = mysql_connect("xx","xx","xx");
mysql_select_db("xx", $lien);

// requête de sélection des produits qui correspondent au paramètre "discipline"

$requete="SELECT IdProduit, NomProduit, DisciplinesBases FROM produits WHERE DisciplinesBases= '".$DisciplinesBases."'";
$result=mysql_query($requete);

// tant qu'il y a des produits à afficher, on les affiche
$cptCouleur = 1;
if (mysql_num_rows($result)) {
    while ($val=mysql_fetch_array($result)) {
    	$couleur = ($cptCouleur % 2 == 0)?$couleur1:$couleur2;
		?> 
		<tr bgcolor="<?php echo $couleur; ?>">
			<td>
				<a href="aff_discibases2.php?IdProduit=<?php print $val["IdProduit"]; ?>"><?php print ($val["NomProduit"]);?></a>
			</td>
			<td>
				<?php print ($val["DisciplinesBases"]);?>
			</td>
		</tr>
		<?php
		$cptCouleur++;
	}
} else {
	echo "<center><h2>Il n'y a pas de résultat<h2></center><br />";
}
mysql_close($lien);
?>
à 2/3 bricoles près (je ne peux pas tester) cela doit t'alterner les couleurs, avec une seule boucle ;)

si tu veux que la première ligne de produit soit de la même couleur que la ligne de titre, il suffit d'inverser les couleurs 1 et 2 dans cette ligne :
$couleur = ($cptCouleur % 2 == 0)?$couleur1:$couleur2;

par Elisa » 03 août 2005, 14:17

Eh bien voilà, c'était du temps où je me plongeais réellement dans le php après moins d'une quinzaine d'heures d'apprentissage.

Je voulais une bête alternance des couleurs pour que mon tableau soit plus lisible. Je me doutais bien que je rallongeais la sauce pour rien, mais c'est le seul 'truc' qui fonctionnait.

Avec cette méthode, j'ai:

Ma première ligne (celle des titres colorée en orange):

Code : Tout sélectionner

<!-- titres--> <tr bgcolor="#ffcc00"> <td><b>Produit</b></td> <td><b>Disciplines des bases</b></td> </tr>
Mes lignes suivantes étaient traitées avec le modulo.

MAIS j'avais un souci: la seconde et la troisième lignes avaient la même couleur (le jaune). Donc pour contrer ça, j'ai traité spécifiquement la seconde ligne comme suit:
<tr bgcolor="#ffffe0">    
    
<td>
<a href="aff_discibases2.php?IdProduit=<?php print $IdProduit; ?>"><?php print ($val["NomProduit"]);?></a>
</td>

<td> <?php print ($val["DisciplinesBases"]);?> </td>
</tr> 
puis j'ai codé le reste comme suit:
<?php
$i = 0;
while ($data=mysql_fetch_assoc($result))
            {

if($i%2 == 0)
                {
$couleur = "#ffcc00";
                }
else
                {
$couleur = "#ffffe0";
                }
echo "<tr>";
echo "<td bgcolor= '$couleur'>";
?>

<a href="aff_discibases2.php?IdProduit=<?php print $IdProduit; ?>"><?php echo $data['NomProduit']; ?> </a>

<?php
echo "</td>";
echo "<td bgcolor=\"".$couleur."\">".$data['DisciplinesBases']."</td>";
echo "</tr>";
$i++;
            }
        }
    }
else
{
echo "<center><h2>Il n'y a pas de résultat<h2></center><br />";
}
mysql_close($lien);
?>
Il y a probablement un moyen d'optimiser tout ça. Mais j'avoue que c'était ma toute première victoire... :wink: Le reste, je connaissais déjà un peu.

par ouckileou » 03 août 2005, 14:04

A propos des deux listes, c'est le seul moyen que j'ai trouvé pour alterner les couleurs.

La ligne de titre offre une couleur, la seconde ligne m'affichait la même que la troisième. Donc au lieu d'avoir: orange, jaune, orange, j'avais orange, jaune, jaune. Donc j'ai fait ce que j'ai pu étant donné mon niveau: j'ai bidouillé... :wink:
il y a plus simple et plus optimisé.

Mais je ne comprends pas ce que tu souhaites exactement, et je ne vois pas trop à qoi doit ressembler la page

si tu as ton modulo qui sélectionne la couleur, pourquoi faire deux listes ?
il suffit de changer un peu le modulo si tu veux que l'alternance ne se fasse qu'1 fois sur 3, ou 4...

par Elisa » 03 août 2005, 13:55

:agenouille: :agenouille: MERCI, MERCI, pour ton aide. Je pense que je vous solliciterai encore les jours à venir...

par Elisa » 03 août 2005, 13:08

YAHOO!!! Justement, j'étais en train de corriger ça quand tu m'as répondu! (Petite stisfaction du débutant qui traîne son problème depuis la semaine dernière...).

A propos des deux listes, c'est le seul moyen que j'ai trouvé pour alterner les couleurs.

La ligne de titre offre une couleur, la seconde ligne m'affichait la même que la troisième. Donc au lieu d'avoir: orange, jaune, orange, j'avais orange, jaune, jaune. Donc j'ai fait ce que j'ai pu étant donné mon niveau: j'ai bidouillé... :wink:

par ouckileou » 03 août 2005, 12:59

oui il ne doit pas reconnaitre $IdProduit

Pourquoi ? parceque IdProduit est une valeur récupérée par la requête SQL, dont les résultats sont placés dans le tableau $val

tu as bien affiché le nom du produit avec $val["NomProduit"], pourquoi ne fais-tu pas pareil avec IdProduit ?

$va["IdProduit"] existe, $IdProduit non
<a href="aff_discibases2.php?IdProduit=<?php print $val["IdProduit"]; ?>"><?php print ($val["NomProduit"]);?></a> 
par contre j'aimerais bien savoir pourquoi tu fais deux fois la même chose : 2 listes de produits, une fois avec mysql_fetch_array, une fois avec mysql_fetch_assoc :roll:

ton affichage n'est pas bizarre ? si je regarde bien tu affiches la liste des produits, et pour chacun tu réaffiches la liste des produits...

par Elisa » 03 août 2005, 12:53

A vrai dire, il ne reconnaît pas IdProduit quand je glisse mon curseur sur le lien (comme tu me l'a conseillé). Etant une variable indéfinie, j'ai supposé qu'il fallait trouver un moyen de l'appeler, d'une manière quelconque. Mais peut-être est-ce que je complique les choses? #-o

<?php
// ici on récupère la valeur sélectionnée dans le formulaire précédent
$DisciplinesBases = $_POST['DisciplinesBases'];

	$lien = mysql_connect("xx","xx","xx");
	mysql_select_db("xx", $lien);

// requête de sélection des produits qui correspondent au paramètre "discipline"

	$requete="SELECT IdProduit, NomProduit, DisciplinesBases FROM produits WHERE DisciplinesBases= '".$DisciplinesBases."'";
	$result=mysql_query($requete);

// tant qu'il y a des produits à afficher, on les affiche
if (mysql_num_rows($result))
{
	while ($val=mysql_fetch_array($result))
	{
?>

    
    <tr bgcolor="#ffffe0">    
    
<td>
<a href="aff_discibases2.php?IdProduit=<?php print $IdProduit; ?>"><?php print ($val["NomProduit"]);?></a> 
</td>

<td> <?php print ($val["DisciplinesBases"]);?> </td>
</tr>
 
<?php
$i = 0;
while ($data=mysql_fetch_assoc($result))
			{

if($i%2 == 0)
				{
$couleur = "#ffcc00";
				}
else
				{
$couleur = "#ffffe0";
				}
echo "<tr>";
echo "<td bgcolor= '$couleur'>"; 
?>

<a href="aff_discibases2.php?IdProduit=<?php print $IdProduit; ?>"><?php echo $data['NomProduit']; ?> </a>

<?php 
echo "</td>";
echo "<td bgcolor=\"".$couleur."\">".$data['DisciplinesBases']."</td>";
echo "</tr>";
$i++;
			}
		}
	}
else
{
echo "<center><h2>Il n'y a pas de résultat<h2></center><br />";
}
mysql_close($lien);
?>

par ouckileou » 03 août 2005, 12:36

pourquoi as-tu besoin de la variable IdProduit pageB ?? elle est juste récupérée de la base de données

pageA : listage des différentes catégories et possibilité d'en sélectionner une
|
|
|-> pageB : récupération de la catégorie choisie, listage des produits de cette catégorie
pour chaque : affichage d'un lien vers pageC avec en paramètre l'identifiant du produit
|
|
|-> pageC : récupération de l'identifiant du produit choisi (transmis par l'url) et sélection/affichage des données de ce produit

fais-voir la boucle de pageB qui fais la liste des produits récupérés dans la base de données

par Elisa » 03 août 2005, 12:31

Je crois que je commence à percevoir mon erreur. Le problème ne se situe apparemment pas page C mais page B. Il reconnaît la variable "Discipline" puisqu'elle est envoyée via le formulaire de la page A, mais ne reconnaît pas la variable "IdProduit".

Comment dois-je faire pour qu'elle soit reconnue page B?

Un champ caché page A?
Une autre solution que je ne connais pas encore?
Une déclaration de variable dont je ne me rappelle plus?

par ouckileou » 03 août 2005, 12:10

pourtant c'est le même principe partout... à partir du moment où tu veux insérer une variable PHP c'est :
- entre balises PHP
- avec echo ou print, sinon elle ne s'affichera pas

par Elisa » 03 août 2005, 12:08

:shock: :shock: :shock:
Je n'aurais jamais trouvé ça!!

Je vais tenter...