passer un tableau via url

Eléphant du PHP | 319 Messages

20 nov. 2007, 13:31

hello,

j'ai un script ou je depouille les resultats d'un jeu.
j'affiche le nom, prenom et id des gagnants sur ma page avant de valider et de leur envoyer un email.

afin d'envoyer un email je dois recuperer les ID des gagnants et les envoyer dans une autre page.le truc: je peux avoir entre 1 et X gagnants. donc je dois passer les ID dans l'url via un tableau.

la question est : comment?

je ne vois pas commetn envoyer les ID correctement via l'url.
une autre boucle while?

merci! :)

<?php
session_start();

if (isset($_SESSION['level']) && $_SESSION['level'] == 2)
{
}
else
{
$_SESSION['error'] = "3";
header('Location: ../../errors/error.php');
}

require('../../includes/config.php');

//retrieve id_gifts + stock from teh address bar and secure the variables
$id_gifts = (isset($_GET['id_gifts']))?$_GET['id_gifts']:'';
$id_gifts = mysql_real_escape_string(htmlentities($id_gifts, ENT_QUOTES)); 

$stock = (isset($_GET['stock']))?$_GET['stock']:'';
$stock = mysql_real_escape_string(htmlentities($stock, ENT_QUOTES)); 

//select a random number of participants regardless of how many tickets they have played. limitation to the stock.
$query = sprintf("SELECT gifts_played.id_clients, clients.fname, clients.lname 
			FROM gifts_played, clients 
			WHERE id_gifts = '$id_gifts'
			AND clients.id_clients = gifts_played.id_clients
			GROUP BY id_clients
			ORDER BY RAND()
			LIMIT $stock",
			mysql_real_escape_string($id_gifts)
			);
$result = mysql_query($query) or die('Query failed. ' . mysql_error());

//starts the table here (outside php code)
?>
<table width="500" border="0">
  <tr>
    <td>Id</td>
    <td>First Name</td>
    <td>Last Name</td>
  </tr>

<?php

//shows the name and id of winners
$winners = array();
$i=0;
while ($row = mysql_fetch_assoc($result))
{
print"
  <tr>
    <td>$row[id_clients]</td>
    <td>$row[fname]</td>
    <td>$row[lname]</td>
  </tr>
";
$winners[]= "$row[id_clients]";
$i++;
}

?>
  <tr>
    <td colspan="4"> mettre un lien ici vers process_winners.tpl.php?winners=tableau ici???</td>
  </tr>
</table>
niveau: pas terrible en php mais je me soigne...

Eléphant du PHP | 164 Messages

20 nov. 2007, 14:24

Bonjour,

Il est impossible de passer un tableau via une URL.

Par contre tu peux transformer ton tableau en chaine de caractères avant de le passer dans l'url et ensuite sur la page cible tu retransforme ta chaine en tableau.

Je t'invite donc à regarder les fonction

Code : Tout sélectionner

implode
et

Code : Tout sélectionner

explode
++

ViPHP
ViPHP | 3607 Messages

20 nov. 2007, 14:26

il y a aussi les fonctions serialize() et unserialize() ;-)

Eléphant du PHP | 319 Messages

20 nov. 2007, 14:55

je vais regarder du cote des fonctions merci :)

pour ce qui est de passer le tableau dans l'url: il faut le decomposer. le truc c'est que comme le tableau ne sera jamais de taille egale j'aimerais bien faire ca differement qu'en codant directement la montableau[0], montableau[1] etcetc dans la barre d'url.
niveau: pas terrible en php mais je me soigne...

d0m
Mammouth du PHP | 1141 Messages

20 nov. 2007, 14:58

serialize "met à plat" n'importe quel objet y compris les tableaux. Tu n'auras qu'une seule valeur à passer dans ton url.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

20 nov. 2007, 15:13

Et les sessions ?
Bien plus facile à gérer

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 319 Messages

20 nov. 2007, 15:48

hum... je viens de tester les sessions et de recuperer les valeurs avec un for each...
simple!

y a t il des effets secondaires nefastes a utiliser les sessions pour cela docteur? ;)
niveau: pas terrible en php mais je me soigne...

Eléphant du PHP | 164 Messages

20 nov. 2007, 17:25

Bof pour les sessions, c'est trop fait pour ça,il y a d'autre méthode pour passer les datas d'une seule page à une autre.

Les sessions sont la pour conserver les infos minimum pouvant t'identifier sur un site tout au long d'une navigation ( votre ID sur un site, un panier etc...),
il n'est pas souhaitable de les utiliser à torts et à travers,d'autant plus si c'est un site à forte charge, car n'oubliez pas que les sessions sont des fichiers stockés sur le serveur donc cela prend de l'espace disque, comme c'est monté en mémoire (comme les script d'ailleurs) je vous explique pas les problèmes de mémoire....

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

20 nov. 2007, 18:00

Et passer toutes les données via le poste client, c'est une ENORME faille de sécurité ...

Toutes données provenant d'un poste client doit être validée puisqu'elle est potentiellement vérolée ;)
Donc, sachant qu'il est possible dans la configuration d'Apache (et surement de IIS) de limiter la taille des sessions, je pense qu'il est beaucoup plus sécurisé et pratique de passer des données propres à l'application en SESSION qu'en GET ou en POST

Sinon, pour en revenir à la question d'origine, je me demande plutôt pourquoi tu doit appeler une autre page ?
Soit tu stockes les résultats en BdD et tu n'as pas besoin de les transférer d'une page à une autre, soit les résultats sont limités à cette page et tu ferais mieux d'appeler une fonction qui envoi les mails plutôt que d'appeler un autre script ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

20 nov. 2007, 18:01

C'est surtout que ça n'a rien à faire ni dans une session ni dans un get ou un post...

Pour resituer un peu les choses :
- Ta variable est "application-wide", elle ne dépend pas de l'utilisateur mais UNIQUEMENT des données stockées en base.
- Une session est "user-wide", elle contient des variables rattachées à l'utilisateur pour le temps de la session.
- GET et POST, c'est pour la communication, il faut voir ça comme "je te pose une question, tu me donnes la réponse". N'importe qui pouvant poser n'importe quelle question, voudrais-tu vraiment imaginer poser une question aussi critique que "pourrais-tu envoyer un mail à cette liste d'utilisateurs ?" ?...

C'est la même page qui devrait faire la requête et envoyer le mail, c'est pour ça que vous êtes en train de vous crêper le chignon sur "session ou get ?" c'est parce qu'aucun ne répond au besoin ici. Le système est mal pensé au départ.

Eléphant du PHP | 319 Messages

20 nov. 2007, 18:32

wow: pas la peine de se faire une petite bagarre pour ca ;)

je pourrais effectivement envoyer mon email via page1.php (on va l'appeler comme ca) mais je verifie que les noms des gagnants sur page1,php donc j'envois leur ID sur page2.php d'ou j'envois les emails.

c'est pour ca que je dois envoyer un tableau avec les Id a page2.php... (sans la verification, tout serait fait sur page1.php)
niveau: pas terrible en php mais je me soigne...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

20 nov. 2007, 18:44

Alors, rappel de 2 points :

1/ Tout d'abord, sache qu'il ne faut pas penser 1 script = 1 tache.
Il est tout a fait possible d'avoir une fonction qui tire les gagnant et te retourne le tableau des id, puis une autre fonction qui envoi les mails. Il ne te reste plus qu'a développer un script qui fait tout ça.

En cherchant à utiliser 2 scripts, tu te heurtes à un problème, celui de la transmission des informations. Avec un unique script qui appelle différentes fonction, tu n'auras plus ce problème ;)

2/ Dès que tu transmets des informations d'un script à un autre autrement que par SESSION, il faut que te les revérifient ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 319 Messages

20 nov. 2007, 21:28

c'est aussi vrai que le site manque de planning... il faut dire que je ne savais pas trop par ou commencer...

ca existe des "documents type" afin de realiser un site (un terme qui me vient mais en anglais: "project charter")
niveau: pas terrible en php mais je me soigne...

Eléphant du PHP | 164 Messages

21 nov. 2007, 13:01

Je sais bien que par l'URL, c'est dangeureux, ce que je voulais dire c'est qu'il ne faut pas utiliser à tire la rigo les sessions.