JeuWeb - Crée ton jeu par navigateur
[REGLE]Redirection - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [REGLE]Redirection (/showthread.php?tid=311)

Pages : 1 2


[REGLE]Redirection - Archange - 17-11-2006

Bonsoir all,

Donc je rencontre un petit probleme dans la creation de mon code, je m'explique, apres la connection du membre à son compte, celui ci va sur la page d'achat ( ici d'une usine ) si celui possede assez de metal la transaction s'effectue, mais si la valeur en metal de l'usine et superieu a celle que possede le joueur, et bien l'achat ne s'effectue pas, donc je voudrai que lorsque l'achat est effectuer le joueur soit rediriger vers sa page membre.php mais je n'y arrive j'ai bien essyer avec la fonction

Code PHP :
<?php 
header
("location: membre.php");

Mais une erreur san retourne
Citation :cannot modify header information - headers already sent by

J'ai chercher un peu sur le net et j'ai lu qu'il ne fallai pas mettre cette fonction apres du code html mais le pb c'est que je pense pas pouvoir la mettre avant

VOila mon code

Code PHP :
<?php
//Démarrage de la session (à mettre avant tout code xhtml)
session_start();
//Identifiants de connexion à la base de données.
require("config2.inc.php");

//Connexion à la base de données.
mysql_connect($host,$username,$password);
mysql_select_db($bdd_name);
?>
Acheter usine<form action="achatusine.php" method="post">
<p>
<input type="text" name="usine5" /> <input type="submit" value="Valider" />
</p>
</form>
<?php

$requete_table_membre
= mysql_query("SELECT * FROM membres ");
while (
$donnees = mysql_fetch_array($requete_table_membre) )
{
$cash= $donnees['cash'];
$metal= $donnees['metal'];
}
$n_usine = $_POST['usine5'];

$requete_table_usine = mysql_query("SELECT * FROM usine ");
while (
$donnees = mysql_fetch_array($requete_table_usine) )
{
$coef = $donnees['coef_usine'];
$prix = $donnees['prix'];
$prix_metal = $donnees['prix_metal'];
}
$metalprix = $prix_metal; //prix de l'usine
$metalpossede = $metal; //metal que le joueur posséde
if ($metalprix > $metalpossede) //Si le prix de l'usine est plus grand que le metal possedé alors achat impossible
{
echo
'Vous ne disposez pas d\'assez de metal<br />';

}

else
{
$totalcash = $cash - ($n_usine * $prix);
$totalmetal = $metal - ($n_usine * $prix_metal);

$appel_id = mysql_query('SELECT * FROM membres WHERE pseudo="$pseudo"'); //requete permettant de selection l'id du joueur pr ajouter a talbe possesion usine
$ressource=mysql_fetch_assoc($appel_id);
$id = $ressource['id'];

$appel_id2 = mysql_query('SELECT * FROM usine'); // requete permettant de selectionner l'id de l'usine pr ajouter a table possesion
$ress=mysql_fetch_assoc($appel_id2);
$id2 = $ress['id_usine'];





mysql_query("UPDATE membres SET cash='$totalcash' WHERE pseudo='$pseudo'");
mysql_query("UPDATE membres SET metal='$totalmetal' WHERE pseudo='$pseudo'");
mysql_query('INSERT INTO possession_usine VALUES ("'.$id.'", "'.$id2.'", "'.$coef.'")');
header("location: membre.php");
}
?>
<?php

mysql_close
(); // Déconnexion de MySQL
?>

Et la parti qui me pose probleme
Code PHP :
<?php 
else
{
$totalcash = $cash - ($n_usine * $prix);
$totalmetal = $metal - ($n_usine * $prix_metal);

$appel_id = mysql_query('SELECT * FROM membres WHERE pseudo="$pseudo"'); //requete permettant de selection l'id du joueur pr ajouter a talbe possesion usine
$ressource=mysql_fetch_assoc($appel_id);
$id = $ressource['id'];

$appel_id2 = mysql_query('SELECT * FROM usine'); // requete permettant de selectionner l'id de l'usine pr ajouter a table possesion
$ress=mysql_fetch_assoc($appel_id2);
$id2 = $ress['id_usine'];





mysql_query("UPDATE membres SET cash='$totalcash' WHERE pseudo='$pseudo'");
mysql_query("UPDATE membres SET metal='$totalmetal' WHERE pseudo='$pseudo'");
mysql_query('INSERT INTO possession_usine VALUES ("'.$id.'", "'.$id2.'", "'.$coef.'")');
header("location: membre.php");
}
?>
<?php

Si vous avez une idée ou un autre moyen d'effectuer cette redirection je suis preneur merci


RE: Redirection - Plume - 17-11-2006

Rhalàlà On ne le répètera jamais assez: Pas UNE SEULE ligne de HTML ne doit être interprétée avant un appel à une primite header et/ou setcookie {entre autre}
Sinon pour ne pas rencontrer ce genre de problème, je te redirige vers la doc PHP et les fonctions ob_*()
{J'ai l'impression de me répéter Big Grin}
J'crois que je vais en faire un mini tuto à force Smile

[EDIT] Oups en fait j'avais pas tout lu dans le détail. Donc juste : intéresse toi aux fonctions ob_*()
Tchô


RE: Redirection - Archange - 18-11-2006

Merci pr la soluce mais malgré que j'ai suivi la doc, la redirection desormais ce fait directement rien n'a été entré dans le formulaire que je suis deja rediriger, je n'accede meme pu a la page d'achat je vois pas ou je me suis tromper

Code PHP :
<?php
ob_start
();

//Démarrage de la session (à mettre avant tout code xhtml)
session_start();
//Identifiants de connexion à la base de données.
require("config2.inc.php");

//Connexion à la base de données.
mysql_connect($host,$username,$password);
mysql_select_db($bdd_name);

?>Acheter usine<form action="achatusine.php" method="post">
<p>
<input type="text" name="usine5" /> <input type="submit" value="Valider" />
</p>
</form>
<?php


$requete_table_membre
= mysql_query("SELECT * FROM membres "); // on fait la requete sur la table membre pr y extraire le données
while ($donnees = mysql_fetch_array($requete_table_membre) )
{
$cash= $donnees['cash'];
$metal= $donnees['metal'];
}
$n_usine = $_POST['usine5'];

$requete_table_usine = mysql_query("SELECT * FROM usine "); //on fait la requete sur la table membres pour y extraire les données
while ($donnees = mysql_fetch_array($requete_table_usine) )
{
$coef = $donnees['coef_usine'];
$prix = $donnees['prix'];
$prix_metal = $donnees['prix_metal'];
}
$metalprix = $prix_metal; //prix de l'usine
$metalpossede = $metal; //metal que le joueur posséde
if ($metalprix > $metalpossede) //Si le prix de l'usine est plus grand que le metal possedé alors achat impossible
{
echo
'Vous ne disposez pas d\'assez de metal<br />';

}

else
{
$totalcash = $cash - ($n_usine * $prix);
$totalmetal = $metal - ($n_usine * $prix_metal);

$appel_id = mysql_query('SELECT * FROM membres WHERE pseudo="$pseudo"'); //requete permettant de selection l'id du joueur pr ajouter a talbe possesion usine
$ressource=mysql_fetch_assoc($appel_id);
$id = $ressource['id'];

$appel_id2 = mysql_query('SELECT * FROM usine'); // requete permettant de selectionner l'id de l'usine pr ajouter a table possesion
$ress=mysql_fetch_assoc($appel_id2);
$id2 = $ress['id_usine'];





mysql_query("UPDATE membres SET cash='$totalcash' WHERE pseudo='$pseudo'");
mysql_query("UPDATE membres SET metal='$totalmetal' WHERE pseudo='$pseudo'");
mysql_query('INSERT INTO possession_usine VALUES ("'.$id.'", "'.$id2.'", "'.$coef.'")');
header("location: membre.php");
}

?>
<?php

mysql_close
(); // Déconnexion de MySQL
ob_end_flush();
?>
J'ai essayer de diposer les deux variale start et end a different endroit mais soit je recoi la meme erreur soit je suis rediriger sans acceder au formulaire


RE: Redirection - Plume - 18-11-2006

Je ne vois pas de problème dans l'utilisation des fonctions ob à première vue. Je vais jeter un oeil au script. J'éditerais après Wink

[EDIT]
En fait le problème vient bien de toi.
Tu as mis une condition qui forcément n'est pas respectée, ce qui va donc te faire entrer dans le else, et donc te rediriger à cause du header qu'il y a dedans. Mets le header en commentaire et mets un echo 'blabla'; à la place pour voir, mais je ne pense pas me tromper Smile


RE: Redirection - Archange - 18-11-2006

Donc voila se que j'ai mis
Code PHP :
<?php 
mysql_query
("UPDATE membres SET cash='$totalcash' WHERE pseudo='$pseudo'");
mysql_query("UPDATE membres SET metal='$totalmetal' WHERE pseudo='$pseudo'");
mysql_query('INSERT INTO possession_usine VALUES ("'.$id.'", "'.$id2.'", "'.$coef.'")');
echo
'blasssss';

}

?>
<?php

mysql_close
(); // Déconnexion de MySQL
ob_end_flush();
?>

La page s'affiche donc avec le message echo'blass'; je vois pas trop comment faire


RE: Redirection - Plume - 18-11-2006

J'te propose de soumettre une condition dans laquelle tu vois si le formulaire a été soumis.
Si oui alors je fais le traitement,
Sinon je l'affiche.
Pour savoir si le formulaire a été soumis:
Code PHP :
<?php 
if(isSet($_POST['nomDuBouton'])) { ... }



RE: Redirection - Archange - 18-11-2006

J'ai inserer le bout de code que tu as mis

Code PHP :
<?php 
mysql_query
("UPDATE membres SET cash='$totalcash' WHERE pseudo='$pseudo'");
mysql_query("UPDATE membres SET metal='$totalmetal' WHERE pseudo='$pseudo'");
mysql_query('INSERT INTO possession_usine VALUES ("'.$id.'", "'.$id2.'", "'.$coef.'")');
if(isSet(
$_POST['usine5'])) { echo'ok'; }
}

?>
<?php

mysql_close
(); // Déconnexion de MySQL
ob_end_flush();
?>

Donc lorsque je entre ma valeur (ici du nombre d'usine ) et que je valide le echo que je met entre le if(isset) apparait bien


RE: Redirection - Plume - 18-11-2006

Et alors ?! Où est le problème ? Je ne te suis plus là je crois.


RE: Redirection - Archange - 18-11-2006

Nan rien enfaite hier j'était mort donc je comprennais plus grand chose

Merci en tous cas, je ne ferais plus la meme betise desormais


RE: Redirection - gtsoul - 18-11-2006

le monsieur a dit pas une seule de html avant le header.
donc il faut vider le buffer avant d'appeler ton header.

rajoute ob_clean(); avant header() et ob_start(), juste après