soucis avec =+ et cherche une fonction

Eléphant du PHP | 206 Messages

03 nov. 2007, 14:57

Bonjour à tous,

Tout d'abord j'ai un problème avec ceci
if(isset($_POST['personnels']) && isset($_POST['nombre']) && !empty($_POST['personnels'])&& !empty($_POST['nombre']))
{
$personnels = mysql_real_escape_string($_POST['personnels']); 
$nombre = (int)$_POST['nombre'];
echo $personnels;
echo $nombre;

mysql_query('UPDATE equipes SET '.$personnels.' =+'.$nombre.' WHERE id_equipe='.$_SESSION['id_equipe']);

}
$personnels contient le nom du champ que je dois incrementé de $nombre,
malheureusement cela ne marche pas :(

Sinon ma seconde question est : y a t'il une fonction qui existe afind e vérifier si un nombre est positif ?

Merci d'avance et bon week end à tous

Eléphant du PHP | 445 Messages

03 nov. 2007, 15:09

mysql_query('UPDATE equipes SET '.$personnels.' = '.$personnels.'+'.$nombre.' WHERE id_equipe='.$_SESSION['id_equipe']); 
Sinon pour ta 2eme question.
Une fonction pour cela est inutile.

Tu testes si la variables est supérieur à 0.
if($variable>0)
// TU peux aussi selectionne que les lignes ayant un champ positif
SELECT * FROM matable WHERE monchamp>0

Eléphant du PHP | 206 Messages

03 nov. 2007, 15:21

Concernant la 2eme question, c'est que je vais avoir besoin de vérifier cela constament, donc je pensais qu'une fonciton pouvait être plus approprié

Eléphant du PHP | 445 Messages

03 nov. 2007, 15:46

En creant une fonction, tu devras tout aussi bien tester sa valeur de retour.
if($valeur>0)
// ou
if(est_positif($valeur))

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

03 nov. 2007, 16:10

Il faut écrire "+=" et non "=+" :wink:

Pour la fonction... hmm... elle doit servir à quoi ? Plus tu donnes de détails plus tu as de chances d'avoir de bonnes réponses :wink:

/!\ 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 | 443 Messages

03 nov. 2007, 17:16

Bonjour à tous,

Tout d'abord j'ai un problème avec ceci
if(isset($_POST['personnels']) && isset($_POST['nombre']) && !empty($_POST['personnels'])&& !empty($_POST['nombre']))
{
$personnels = mysql_real_escape_string($_POST['personnels']); 
$nombre = (int)$_POST['nombre'];
echo $personnels;
echo $nombre;

mysql_query('UPDATE equipes SET '.$personnels.' =+'.$nombre.' WHERE id_equipe='.$_SESSION['id_equipe']);

}
$personnels contient le nom du champ que je dois incrementé de $nombre,
malheureusement cela ne marche pas :(

Sinon ma seconde question est : y a t'il une fonction qui existe afind e vérifier si un nombre est positif ?

Merci d'avance et bon week end à tous
Salut,

Ton but est-il de faire un script spécial injection ???
Imaginons que colx soit le nom d'une colonne de ta table, dans ton formulaire pour le champs "personnels" tape:
colx=0 --
Et regarde l'état de tes infos. :?

nb: remplace colx par le nom d'un des champs visible par le client dans le formulaire.


Tracker.

Eléphant du PHP | 206 Messages

03 nov. 2007, 17:41

Justement j'allais en venir au problème de sécurité voici donc la partie formulaire afin que vous voyez les variables qui en sortiront
	<p><select name="choix">
				    <option value="recruter">Recruter</option>
				    <option value="licencier">Licencier</option>

				 </select></p>
				 
				 
				<p><select name="personnels">
				    <option value="adjoints">Entraineurs adjoints</option>
				    <option value="specialises">Entraineurs spécialistes</option>
				    <option value="medecins">Médecins</option>
				    <option value="kines">Kinésithérapeutes</option>
					<option value="attaches">Attachés de presse</option>
				    <option value="chasseurs">Chasseurs de tête</option>
				 </select></p>

			  <p> <input type="text" name="nombre" size ="5" /></p>

Donc 3 variables $choix $personnels et $nombre

Et voici ou j'ne suis niveau protection
if(isset($_POST['personnels']) && isset($_POST['nombre']) && !empty($_POST['personnels']) && !empty($_POST['nombre']) && isset($_POST['choix']) && !empty($_POST['choix']))
{

$choix = mysql_real_escape_string($_POST['choix']); 
$personnels = mysql_real_escape_string($_POST['personnels']); 
$nombre = (int)$_POST['nombre'];

	if($nombre>=0)
	{
		if()
			if( $choix == "recruter")
			{
			mysql_query('UPDATE equipes SET '.$personnels.' = '.$personnels.'+'.$nombre.' WHERE id_equipe='.$_SESSION['id_equipe']); 

			}
			elseif($choix == "licencier")
			{
			mysql_query('UPDATE equipes SET '.$personnels.' = '.$personnels.'-'.$nombre.' WHERE id_equipe='.$_SESSION['id_equipe']); 
			}
			else
			{
			echo '<p class="erreur"> Une erreur est survenue</p>';
			}
	}
	else
	{
			echo '<p class="erreur"> Une erreur est survenue</p>';
	}

}
Il me reste donc a vérifier la variable $personnels, mais sachant qu'elle peut prendre plusieurs valeurs possibles quelle est la meilleur solution pour la vérifier ?

Eléphant du PHP | 445 Messages

03 nov. 2007, 18:49

Tu peux creer un tableau avec les valeurs possible que peux prendre $personnels et tester si $spersonnel est dans ce tableau avec in_array()

Tu peux aussi afin d'eviter des erreurs :
$nombre = (isset($_POST['nombre']))?intval($_POST['nombre']):0;

Eléphant du PHP | 206 Messages

03 nov. 2007, 19:07

ok je pensais effectivement à l'utilisation d'una rray.

D'autres suggestions?

QUel erreur ton intval m'éviterait ?
Car avec le (int) si un nombre n'est pas rentré alors ça me le transforme en un nombre (0 pour une chaine non?)

Eléphant du PHP | 445 Messages

03 nov. 2007, 19:20

Si jamais $_POST['nombre'] n'est pas défini alors tu auras une erreur en l'affectant.

Apres tu peux tout autant garder ton transtypage.

Eléphant du PHP | 206 Messages

03 nov. 2007, 19:54

La premiere condition vérifie que toutes mes variables superglobales sont bien définies donc je pense qu'il n'y a pas de problème :)

Eléphant du PHP | 445 Messages

03 nov. 2007, 20:03

En effet. :D

Je n'avais pas vu cela.
Satanée molette.

Eléphant du PHP | 61 Messages

05 nov. 2007, 03:29

Pour le truc négatif/positif je connais abs() qui renvoie la valeur aboslue (ex abs(-2) = 2) mais c'est pas sur que c'est ce que tu veux...

Au passage : (int) ?
La fonction c'est intval() ou is_int() ou encore is_numeric() mais (int) non ;)
Site sur THEOPERATION M.D. -> Nouvelle version (100%)
Ton code, tu indenteras; et le bohneur, tu feras.

Eléphant du PHP | 445 Messages

05 nov. 2007, 03:49

Il s'agit de transtypage.

Une petite explication ici : http://fr.php.net/manual/en/language.ty ... ggling.php

ViPHP
AB
ViPHP | 5818 Messages

05 nov. 2007, 04:17

Au passage : (int) ?
La fonction c'est intval() ou is_int() ou encore is_numeric() mais (int) non ;)
Attention, si c'est pour tester des valeurs provenant de formulaires is_int() n'est pas approprié
Note: Pour tester si une variable est un nombre ou une chaîne numérique (comme les entrées de formulaire, qui sont toujours des chaînes), vous devez utiliser la fonction is_numeric().
Si l'on s'attend à récupérer un entier, on peut faire
$nombre = (isset($_POST['nombre']) && is_numeric($_POST['nombre']))? intval($_POST['nombre']) : 0;