Page 1 sur 2

soucis avec =+ et cherche une fonction

Posté : 03 nov. 2007, 14:57
par Snipy
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

Posté : 03 nov. 2007, 15:09
par h0_noMan
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

Posté : 03 nov. 2007, 15:21
par Snipy
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é

Posté : 03 nov. 2007, 15:46
par h0_noMan
En creant une fonction, tu devras tout aussi bien tester sa valeur de retour.
if($valeur>0)
// ou
if(est_positif($valeur))

Posté : 03 nov. 2007, 16:10
par Truc
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:

Re: soucis avec =+ et cherche une fonction

Posté : 03 nov. 2007, 17:16
par Tracker
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.

Posté : 03 nov. 2007, 17:41
par Snipy
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 ?

Posté : 03 nov. 2007, 18:49
par h0_noMan
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;

Posté : 03 nov. 2007, 19:07
par Snipy
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?)

Posté : 03 nov. 2007, 19:20
par h0_noMan
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.

Posté : 03 nov. 2007, 19:54
par Snipy
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 :)

Posté : 03 nov. 2007, 20:03
par h0_noMan
En effet. :D

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

Posté : 05 nov. 2007, 03:29
par Power Web
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 ;)

Posté : 05 nov. 2007, 03:49
par h0_noMan
Il s'agit de transtypage.

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

Posté : 05 nov. 2007, 04:17
par AB
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;