Champ vide alors que non et code "bancal"...

Eléphant du PHP | 93 Messages

28 oct. 2005, 23:00

JE TESTE si j'ai récupéré les champs:

Notice: Undefined index: nbble in c:\hochelagajpem\mj_action_terres_test.php on line 98


Notice: Undefined index: nbchasse in c:\hochelagajpem\mj_action_terres_test.php on line 99


Notice: Undefined index: nbpeche in c:\hochelagajpem\mj_action_terres_test.php on line 100


Notice: Undefined index: nbbois in c:\hochelagajpem\mj_action_terres_test.php on line 101


Notice: Undefined index: nbcueillette in c:\hochelagajpem\mj_action_terres_test.php on line 102

Mammouth du PHP | 19672 Messages

28 oct. 2005, 23:00

Bien, on va commencer avec le formulaire : la sélection par défaut ne peut pas fonctionner normalement comme je l'ai expliqué juste avant, il manque donc un paramètre, ce qui donne:
<form action="mj_action_terres.php">
<b>Indiquez pour chaque produit un gain par are :<br/>
<?
function choixParDefaut($nombre, $liste) // Création de la fonction
{
    $par_defaut = null; // On crée une variable (vide par défaut) que l'on retournera à la fin

    if (isset($_POST[$liste])) // Si le visiteur a choisi un nombre
    {
        if ($_POST[$liste] == $nombre) // Si ce nombre correspond au nombre que l'on est en train de traiter
        {
            $par_defaut=' selected="selected"'; // Alors on modifie la variable que l'on retournera et on lui met selected
        }
    }
    return $par_defaut;
}
?>
Quota blé :
    <select name="nbble" >
    <option value=""></option>
    <option value="1"<? echo choixParDefaut('1', "nbble"); ?>>1</option>
    <option value="1.1"<? echo choixParDefaut('1.1', "nbble"); ?>>1.1</option>
    <option value="1.2"<? echo choixParDefaut('1.2', "nbble"); ?>>1.2</option>
    <option value="1.3"<? echo choixParDefaut('1.3', "nbble"); ?>>1.3</option>
    <option value="1.4"<? echo choixParDefaut('1.4', "nbble"); ?>>1.4</option>
    <option value="1.5"<? echo choixParDefaut('1.5', "nbble"); ?>>1.5</option>
    <option value="1.6"<? echo choixParDefaut('1.6', "nbble"); ?>>1.6</option>
    <option value="1.7"<? echo choixParDefaut('1.7', "nbble"); ?>>1.7</option>
    <option value="1.8"<? echo choixParDefaut('1.8', "nbble"); ?>>1.8</option>
    <option value="1.9"<? echo choixParDefaut('1.9', "nbble"); ?>>1.9</option>    
    <option value="2"<? echo choixParDefaut('2', "nbble"); ?>>2</option>
    <option value="2.1"<? echo choixParDefaut('2.1', "nbble"); ?>>2.1</option>    
    <option value="2.2"<? echo choixParDefaut('2.2', "nbble"); ?>>2.2</option>
    <option value="2.3"<? echo choixParDefaut('2.3', "nbble"); ?>>2.3</option>    
    <option value="2.4"<? echo choixParDefaut('2.4', "nbble"); ?>>2.4</option>
    <option value="2.5"<? echo choixParDefaut('2.5', "nbble"); ?>>2.5</option>
</select>
<br/>
Quota chasse :
    <select name="nbchasse" >
    <option value=""></option>
    <option value="1"<? echo choixParDefaut('1', "nbchasse"); ?>>1</option>
    <option value="1.1"<? echo choixParDefaut('1.1', "nbchasse"); ?>>1.1</option>
    <option value="1.2"<? echo choixParDefaut('1.2', "nbchasse"); ?>>1.2</option>
    <option value="1.3"<? echo choixParDefaut('1.3', "nbchasse"); ?>>1.3</option>
    <option value="1.4"<? echo choixParDefaut('1.4', "nbchasse"); ?>>1.4</option>
    <option value="1.5"<? echo choixParDefaut('1.5', "nbchasse"); ?>>1.5</option>
    <option value="1.6"<? echo choixParDefaut('1.6', "nbchasse"); ?>>1.6</option>
    <option value="1.7"<? echo choixParDefaut('1.7', "nbchasse"); ?>>1.7</option>
    <option value="1.8"<? echo choixParDefaut('1.8', "nbchasse"); ?>>1.8</option>
    <option value="1.9"<? echo choixParDefaut('1.9', "nbchasse"); ?>>1.9</option>    
    <option value="2"<? echo choixParDefaut('2', "nbchasse"); ?>>2</option>
    <option value="2.1"<? echo choixParDefaut('2.1', "nbchasse"); ?>>2.1</option>    
    <option value="2.2"<? echo choixParDefaut('2.2', "nbchasse"); ?>>2.2</option>
    <option value="2.3"<? echo choixParDefaut('2.3', "nbchasse"); ?>>2.3</option>    
    <option value="2.4"<? echo choixParDefaut('2.4', "nbchasse"); ?>>2.4</option>
    <option value="2.5"<? echo choixParDefaut('2.5', "nbchasse"); ?>>2.5</option>
</select>
<br/>
Quota pêche :
    <select name="nbpeche" >
    <option value=""></option>
    <option value="1"<? echo choixParDefaut('1', "nbpeche"); ?>>1</option>
    <option value="1.1"<? echo choixParDefaut('1.1', "nbpeche"); ?>>1.1</option>
    <option value="1.2"<? echo choixParDefaut('1.2', "nbpeche"); ?>>1.2</option>
    <option value="1.3"<? echo choixParDefaut('1.3', "nbpeche"); ?>>1.3</option>
    <option value="1.4"<? echo choixParDefaut('1.4', "nbpeche"); ?>>1.4</option>
    <option value="1.5"<? echo choixParDefaut('1.5', "nbpeche"); ?>>1.5</option>
    <option value="1.6"<? echo choixParDefaut('1.6', "nbpeche"); ?>>1.6</option>
    <option value="1.7"<? echo choixParDefaut('1.7', "nbpeche"); ?>>1.7</option>
    <option value="1.8"<? echo choixParDefaut('1.8', "nbpeche"); ?>>1.8</option>
    <option value="1.9"<? echo choixParDefaut('1.9', "nbpeche"); ?>>1.9</option>    
    <option value="2"<? echo choixParDefaut('2', "nbpeche"); ?>>2</option>
    <option value="2.1"<? echo choixParDefaut('2.1', "nbpeche"); ?>>2.1</option>    
    <option value="2.2"<? echo choixParDefaut('2.2', "nbpeche"); ?>>2.2</option>
    <option value="2.3"<? echo choixParDefaut('2.3', "nbpeche"); ?>>2.3</option>    
    <option value="2.4"<? echo choixParDefaut('2.4', "nbpeche"); ?>>2.4</option>
    <option value="2.5"<? echo choixParDefaut('2.5', "nbpeche"); ?>>2.5</option>
</select>
<br/>
Quota bois :
    <select name="nbbois" >
    <option value=""></option>
    <option value="1"<? echo choixParDefaut('1', "nbbois"); ?>>1</option>
    <option value="1.1"<? echo choixParDefaut('1.1', "nbbois"); ?>>1.1</option>
    <option value="1.2"<? echo choixParDefaut('1.2', "nbbois"); ?>>1.2</option>
    <option value="1.3"<? echo choixParDefaut('1.3', "nbbois"); ?>>1.3</option>
    <option value="1.4"<? echo choixParDefaut('1.4', "nbbois"); ?>>1.4</option>
    <option value="1.5"<? echo choixParDefaut('1.5', "nbbois"); ?>>1.5</option>
    <option value="1.6"<? echo choixParDefaut('1.6', "nbbois"); ?>>1.6</option>
    <option value="1.7"<? echo choixParDefaut('1.7', "nbbois"); ?>>1.7</option>
    <option value="1.8"<? echo choixParDefaut('1.8', "nbbois"); ?>>1.8</option>
    <option value="1.9"<? echo choixParDefaut('1.9', "nbbois"); ?>>1.9</option>    
    <option value="2"<? echo choixParDefaut('2', "nbbois"); ?>>2</option>
    <option value="2.1"<? echo choixParDefaut('2.1', "nbbois"); ?>>2.1</option>    
    <option value="2.2"<? echo choixParDefaut('2.2', "nbbois"); ?>>2.2</option>
    <option value="2.3"<? echo choixParDefaut('2.3', "nbbois"); ?>>2.3</option>    
    <option value="2.4"<? echo choixParDefaut('2.4', "nbbois"); ?>>2.4</option>
    <option value="2.5"<? echo choixParDefaut('2.5', "nbbois"); ?>>2.5</option>
</select>
<br/>
Quota cueillette :
    <select name="nbcueillette" >
    <option value=""></option>
    <option value="1"<? echo choixParDefaut('1', "nbcueillette"); ?>>1</option>
    <option value="1.1"<? echo choixParDefaut('1.1', "nbcueillette"); ?>>1.1</option>
    <option value="1.2"<? echo choixParDefaut('1.2', "nbcueillette"); ?>>1.2</option>
    <option value="1.3"<? echo choixParDefaut('1.3', "nbcueillette"); ?>>1.3</option>
    <option value="1.4"<? echo choixParDefaut('1.4', "nbcueillette"); ?>>1.4</option>
    <option value="1.5"<? echo choixParDefaut('1.5', "nbcueillette"); ?>>1.5</option>
    <option value="1.6"<? echo choixParDefaut('1.6', "nbcueillette"); ?>>1.6</option>
    <option value="1.7"<? echo choixParDefaut('1.7', "nbcueillette"); ?>>1.7</option>
    <option value="1.8"<? echo choixParDefaut('1.8', "nbcueillette"); ?>>1.8</option>
    <option value="1.9"<? echo choixParDefaut('1.9', "nbcueillette"); ?>>1.9</option>    
    <option value="2"<? echo choixParDefaut('2', "nbcueillette"); ?>>2</option>
    <option value="2.1"<? echo choixParDefaut('2.1', "nbcueillette"); ?>>2.1</option>    
    <option value="2.2"<? echo choixParDefaut('2.2', "nbcueillette"); ?>>2.2</option>
    <option value="2.3"<? echo choixParDefaut('2.3', "nbcueillette"); ?>>2.3</option>    
    <option value="2.4"<? echo choixParDefaut('2.4', "nbcueillette"); ?>>2.4</option>
    <option value="2.5"<? echo choixParDefaut('2.5', "nbcueillette"); ?>>2.5</option>
</select>  
<input type="submit" value="LE SAMEDI, achat par HOCHELAGA des produits des colons provenant des terres." />
</form>
Là, ce sera plus logique et il n'y aura pas de conflit.

Le problème des [] maintenant. ça indique un tableau. Associatif ou indexé. Pour mémoire, un tableau indexé a pour index des nombres entiers, un tableau associatif a pour index des noms :
// Tableau indexé:
$tab[0] = "x";
$tab[1] = "y";
//etc...

// Tableau associatif;
$tab['nom_1'] = "x";
$tab['autre_nom'] = "y";
//...
La variable super-globale $_POST par exemple un tableau assoicatif et on cherche des index nommés.

En revanche, mysql_fetch_rows retourne un tableau indexé donc les index vont de 0 à n, 0 étant l'index pour le premier champ recherché dans la requête, 1 pour le second, etc...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 93 Messages

28 oct. 2005, 23:13

J'ai bien fait d'enlever toutes les références à [].
Je ne vais pas afficher les résultats dans un tableau là...

Voici mon code à ce stade :
<?
session_start();
include('connect.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Traitement des récoltes</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	    <link rel="stylesheet" href="style/mj.css" type="text/css" />
   </head>
   <body> 
<div id="menu">
<?

// on crée la requête SQL 
$sql = "SELECT saison, annee FROM temps";

// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

$data = mysql_fetch_assoc($req); 
{ 
$saison=$data['saison'];
$annee=$data['annee'];
} 
// on crée la requête SQL 
$sql = "SELECT login,argent,ble,chasse,peche,bois,cueillette, terres_vierges FROM informations WHERE login !='HOCHELAGA' AND login!='divers' ORDER BY id DESC";  
// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
// on affiche les informations de l'enregistrement en cours 

while($data = mysql_fetch_assoc($req)) 
{ 
    $login = $data['login'];
	$argent = $data['argent'];
	$ble = $data['ble'];
	$chasse = $data['chasse'];
	$peche = $data['peche'];
	$bois = $data['bois'];
	$cueillette = $data['cueillette'];
	$terres_vierges = $data['terres_vierges'];
//je calcule les terres vierges pour les réinitialiser plus tard, à partir des terres mises en cultures avant transformation.
$newterres_vierges=$terres_vierges+$ble+$chasse+$peche+$bois+$cueillette;	  
	 
// On commence par récupérer les champs 
$nbble        = (isset($_POST['nbble']))        ? $_POST['nbble']        : ""; 
$nbchasse     = (isset($_POST['nbchasse']))     ? $_POST['nbchasse']     : ""; 
$nbpeche      = (isset($_POST['nbpeche']))      ? $_POST['nbpeche']      : ""; 
$nbbois       = (isset($_POST['nbbois']))       ? $_POST['nbbois']       : ""; 
$nbcueillette = (isset($_POST['nbcueillette'])) ? $_POST['nbcueillette'] : ""; 


// On vérifie si les champs sont vides 
if( 
    isset($_POST['nom_bouton_submit']) && 
    empty($nbble) && 
    empty($nbchasse) && 
    empty($nbpeche) && 
    empty($nbbois) && 
    empty($nbcueillette) 
) 
{ 
    echo '<p>Vous avez oublié de faire un choix de quota.</p><br/><br/><br/><br/> 
<span class="double"><a href="mj_terres.PHP">REVENEZ A VOTRE GESTION DES TERRES. </a></span>'; 
} 

// Aucun champ n'est vide, on peut enregistrer dans la table 
else  
    {
	 
	 $gainble=$ble*$nbble;
	 $gainchasse=$chasse*$nbchasse;
	 $gainpeche=$peche*$nbpeche;
	 $gainbois=$bois*$nbbois;
	 $gaincueillette=$cueillette*$nbcueillette;
	 $newrapport=$gainble+$gainchasse+$gainpeche+$gainbois+$gaincueillette;
	 $newargent=$argent+$newrapport;
	     // on envoie les données dans la table informations 
    $sql_maj = "UPDATE informations ". 
               "SET terres_vierges='". $newterres_vierges ."', ". 
                   "ble='0', ". 
                   "chasse='0', ". 
                   "peche='0', ". 
                   "bois='0', ". 
                   "cueillette='0' ". 
				   "rapport='". $newrapport ."' ".
                   "argent='". $newargent ."' ".				   
               "WHERE login='".$login."'"; 
    mysql_query($sql_maj); }
	 
	 //ON va  maintenant procéder à l'achat des denrées par la ville
	 // on crée la requête SQL 
$sql = "SELECT achatscolons FROM depenses WHERE date='".$annee."'";  
// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
// on affiche les informations de l'enregistrement en cours 

$data= mysql_fetch_assoc($req); 

    $anciensoldachats = $data['achatscolons'];

	 $alldepenses=$newrapport;
	 
	 mysql_query("UPDATE depenses SET achatscolons=$anciensoldachats+$alldepenses WHERE date='".$annee."'"); 
	 
    // on insère les informations du formulaire dans la table 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

	
	 //ON va  maintenant procéder à la vente automatique des denrées par la ville
	 $sql = "SELECT exportations FROM recettes WHERE date='".$annee."'";  
// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
// on affiche les informations de l'enregistrement en cours 

$data= mysql_fetch_assoc($req); 

    $anciensoldexport = $data['exportations'];
	$export=$alldepenses*1.2;
	 mysql_query("UPDATE exportations SET achatscolons=$anciensoldexport+$export WHERE date='".$annee."'");
	
    // on insère les informations du formulaire dans la table 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

    // on prévient le MJ que tout cela est fait
    echo '<p>Vous avez procédé aux ventes automatiques des produits des colons, à leur achat par la ville<br/>
	et à l\'exportation automatique de ces denrées.</p><br/><br/><br/><br/>
<span class="double"><a href="mj_terres.PHP">REVENEZ A VOTRE GESTION DES TERRES. </a></span>';}

    mysql_close();  // on ferme la connexion  
?> 
</div>
   </body>
</html>

Eléphant du PHP | 93 Messages

28 oct. 2005, 23:25

Alors je teste et tout semble fonctionner jusqu'à cette requête :
      $sql_maj = "UPDATE informations ". 
               "SET terres_vierges='". $newterres_vierges ."', ". 
                   "ble='0', ". 
                   "chasse='0', ". 
                   "peche='0', ". 
                   "bois='0', ". 
                   "cueillette='0' ". 
				   "rapport='". $newrapport ."' ".
                   "argent='". $newargent ."' ".				   
               "WHERE login='".$login."'"; 
mysql_query($sql_maj);

aurais-je fait une erreur sur celle-ci pour qu'elle ne s'exécute pas ?


Je pense que le problème est la demande à la fin :
where login=login, sommes-nous toujours dans la boucle ?
Sinon, quel login ?

Eléphant du PHP | 93 Messages

29 oct. 2005, 02:26

Bon, j'ai remplacé par ceci :
$req = "UPDATE informations 
SET terres_vierges='".$newterres_vierges."', 
    ble='0', 
    chasse='0',
    peche='0',	
    bois='0', 
    cueillette='0',
    rapport='".$newrapport."',
    argent='".$newargent."'".  	
" WHERE login != 'HOCHELAGA';";
$result = mysql_query($req) or die(mysql_error());  
Et c'est mieux là...

Le seul problème, vous le voyez dans le code, c'est que je dis :
QUAND login est différent d'HOCHELAGA.
au lieu de :
à chaque ligne, pour chaque login en fonction de ses propres données lol...
Je sais, dit comme ça, ça semble compliqué mais je veux que l'opération soit faite pour chaque login automatiquement.

Comme il y a déjà deux pages ici, et comme mon problème a évolué, je vais mettre ici RESOLU, et je vais chercher encore de mon côté....

MAIS comme je pense que je ne trouverai pas ( comment ça pessimiste ? lol ) j'ouvrirai une autre demande pour le prochain problème...

Là je vais chercher à faire deux choses :

1- que soient bien reconnus les champs du POSt, car pour le moment, j'ai juste contourné le problème sans réelle solution.

2- que cette opération s'applique à TOUS les logins de ma table, car avec une simple boucle et à tous ceux différents d'HOCHELAGa, ça le fait, mais à partir des données du PREMIER de la liste, et ça le met pour tous ! lol

Eléphant du PHP | 93 Messages

29 oct. 2005, 02:27

Au fait.... :oops:


MERCI Cyrano pour le temps que tu m'as consacré aujourd'hui. :wink: :P

Mammouth du PHP | 19672 Messages

29 oct. 2005, 08:20

Pas de quoi :)

Un détail, en SQL normalisé, différent ne s'écrit pas "!=" mais"<>"

Ensuite, quand tu as une difficulté avec une requête, le plus rapide pour débugguer consiste à faire afficher ta requête générée (avec echo($requete); par exemple), à la copier, ouvrir ensuite phpMyAdmin, coller cette requête dans une fenêtre SQL et lancer l'exécution pour voir quel résultat est retourné : une erreur détaillée ou des résultat et dans ce dernier cas, vérifier si ce sont bien les résultats attendus.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 93 Messages

29 oct. 2005, 18:55

Merci.
Je note... :wink: