IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

parce que je le value bien


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2021
    Messages : 14
    Points : 8
    Points
    8
    Par défaut parce que je le value bien
    Hello world,

    J'ai un problème qui me cause soucis...où l'inverse c'est selon.

    Nom : value met le feu.PNG
Affichages : 111
Taille : 22,4 Ko

    Je voudrais faire en sorte que les value="x" (qui correspondent aux id de certaines colonnes dans la table de ma bdd)
    ne puissent pas être changées via l'inspecteur du navigateur...ou alors si il y a un moyen de passer la value dans ma bdd tout
    en affichant un code ou cryptage dans l'inspecteur...

    Je veux le faire uniquement via php et pas js, ce dernier pouvant être désactivé et mettre mes values à nu.

    Si vous avez un tuto, ou un article qui traite du sujet sous le coude, je suis preneur!

    Merci!

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    La première chose à faire est d'arrêter de coller des copies d'écrans sur le forum et de copier/coller le texte de ton code en l'entourant des balises idoines. Merci.

    Ensuite, à quoi servent précisément ces champs cachés? Qu'est ce que tu cherches à faire d'une manière plus générale avec la page où ils figurent?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2021
    Messages : 14
    Points : 8
    Points
    8
    Par défaut merci CosmoKnacki

    ok, je refera plus de coller des images partout, je présente mes plus plates excuses aux membres pour la gêne occasionné.

    Alors, pour partir de l'existant, j'ai crée une base de donnée avec une table transaction comportant, entre autres, les colonnes avec les name que l'on peut voir dans mes inputs.
    Pour ne prendre l'exemple que de l'idMouvements (pour faire court), j'impose à l'utilisateur (selon la page de mon application ou il a choisi de se rendre) le type de mouvement de sa transaction: dépense ou provision.
    Le type de mouvements (respectivement idMouvements=1 pour dépense et idMouvements=2 pour provision) d'une table mouvement que j'ai mis en relation avec la table transaction.

    Mon soucis est que si quelqu'un veux mettre le bazar dans ma bdd, il peut le faire en changeant la value"1" (qui enregistre une dépense dans ma bdd) en value"2" (qui elle transmet une provision)....sachant que j'ai 7 idThématiques et 14 idCategories qui fonctionnent sur le même principe, ça nous donne une foultitudes de possibilité de saccager ma bdd, rien qu'avec l'inspecteur...je veux pas qu'il soit possible de changer la value de quoique ce soit que j'ai paramétré avec amour

    J'ai fait tout ces hidden afin d’alléger le formulaire (l'utilisateur à déjà une date à rentrer, des checkbox pour sélectionner une boutique, une somme à saisir, et un déroulant de moyen de paiement...)

    En espérant ne pas avoir été trop confusant...

    Merci.

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Bon, j'espère avoir bien compris la situation: Je pars du principe que la page avec tes trois champs cachés est généré dynamiquement par un script PHP.

    Le but du jeu est d'empêcher qu'un utilisateur trop curieux ait accès à la machinerie en déduisant son fonctionnement de ce qu'il peut observer du code html. Donc il ne faut rien qui soit exploitable dans le code html.
    Plutôt que de générer un formulaire dont les champs cachés dévoilent plus ou moins clairement le type d'action qui va être effectué avec le trio de valeurs (Mouvement, Catégorie, Thème), utilise une session, crée une clef aléatoire que tu transmettras en champs caché dans le formulaire et à laquelle sera associée le trio (Mouvement, Catégorie, Thème) dans la session.
    Ensuite quand le formulaire sera envoyé, il suffira de vérifier que la clef existe bien dans $_SESSION et de récupérer le type d'opération qui lui est associé (le trio). Ceci fait, tu peux faire les modifications en base de données, puis effacer la variable de session: unset($_SESSION['la clef aléatoire']);Donc si on résume:
    • l'utilisateur qui trifouille le code html ne pourra voir qu'une clef aléatoire qui ne révélera en rien la nature de l'opération.
    • Cette opération sera la seule possible, car c'est la seule présente dans la session.
    • Bien entendu, comme cette clef est aléatoire, qu'elle est détruite dés l'envoi du formulaire, elle ne peut pas être réutilisée.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 451
    Points : 43 096
    Points
    43 096
    Par défaut
    Pour ne prendre l'exemple que de l'idMouvements (pour faire court), j'impose à l'utilisateur (selon la page de mon application ou il a choisi de se rendre)
    Donc pas besoin de champ dans un formulaire, vu que le fait de passer par une page A ou B impose la valeur, tu stocke l'état dans une variable session lors de l'appel de la page, même pas besoin de faire des champs à clé aléatoire. Dans le traitement, tu utilises cette variable de session pour fixer le champ de la base concerné.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2021
    Messages : 14
    Points : 8
    Points
    8
    Par défaut le champ du possible
    Merci à vous deux pour vos réponses.

    effectivement chrtophe, j'ai crée une sorte de home page ou l'utilisateur à le choix entre 7 thématiques. Chaque thématique comporte 2 catégories.

    Par une $_SESSION, j'arrive à anonymiser la valeur qui apparaissait dans la barre du navigateur. Cette valeur est remplacée par un random code. Ce code apparaît dans l'inspecteur, mais si il y a une intervention dessus, le mal intentionné obtient une page blanche.

    Ci-dessous, un exemple du code pour deux catégories d'une thématique. Je vous mets le code des 4 pages (la dbconnect, la homepage, le formulaire, et la page update).

    page dbconnect

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
    session_start();
     
     
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    try {
    $mysqli=new mysqli($host, $user, $passwd, $db);
    $mysqli->set_charset('utf8');
    } catch (Exception $e) { 
    echo "MySQLi Error Code: " . $e->getCode() . "<br />";
    echo "Exception Msg: " . $e->getMessage(). "<br>";
    exit();
    }
     
     
    function random_pw($pw_length) {
    	$pass = NULL;
    	$charlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    	$ps_len = strlen($charlist);
    	mt_srand((double)microtime()*1000000);
     
    	for($i = 0;$i<$pw_length;$i++){
    		$pass.=$charlist[mt_rand(0,$ps_len -1)];
    	}
    	return ($pass);
    }
     
    ?>
    page home

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
     
    include("../connectDB.inc.php");
    $_SESSION['code']=array();
     
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>HOME PAGE</title>
    </head>
    <body>
    	<nav>    
    		<?php
    		$code=random_pw(10);
    		$_SESSION['code'][$code]=0;
    		?>
    		<a href="supform.php?code=<?php echo $code;?>">au Supermarché</a>
    		<a href="boutiqform.php?code=<?php echo $code;?>">En boutique</a>  
    		<button id="mation" class="laguerredubouton">Consommations</button>
    	</nav>
     
    </body>
    </html>
    the formulaire....(l'utilisateur à choisi de saisir une dépense effectuée en supermarché)
    la valeur des idMouvement, Thématiques et Catégories doivent rester ce qu'elle sont.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    <?php
    include("../ConnectDB.inc.php");
     
    if(array_key_exists('code', $_GET) and array_key_exists($_GET['code'], $_SESSION['code'])) {
    	$idTransactions=$_SESSION['code'][$_GET['code']];
    }else {
    	exit();
    }
     
    $query="SELECT * FROM paiement WHERE validePaiement=1";
    $mysqliResult=$mysqli->query($query);
    $listPaiement=array();
    while ($var=$mysqliResult->fetch_assoc()){
    	$listPaiement [$var['idPaiement']]=$var['paiement'];
    }
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>supform.php</title>
    </head>
    <body>
    	<div class="formul">
    		<section class="form">
     
    			<form action="../update.php" method="post">
    				<input type="hidden" name="code" value="<?php echo $_GET['code'];?>">				
    				<input type="hidden" name="idMouvements" value="1">
    				<input type="hidden" name="idThematiques" value="1">
    				<input type="hidden" name="idCategories" value="1">
     
    				<fieldset>
    					<legend class="title">Dépenses SUPERMARCH&Eacute;</legend>
     
     
    					<label>&Agrave; la date du...</label>
    					<input type="date" name="DateDuJour">
     
    					<h4>tu as acheté dans l'enseigne suivante:</h4>
     
    					<div class="ckeckchoices">	
    						<input type="radio" name="comptes" value="Carrefour" checked>
    						<label>Carrefour</label>
     
    						<input type="radio" name="comptes" value="Lidl">
    						<label>Lidl</label>
     
    						<input type="radio" name="comptes" value="Auchan" >
    						<label >Auchan </label>
    					</div>
     
    					<div class="ckeckchoices">
     
    						<input type="radio" name="comptes" value="Castorama" >
    						<label >Castorama </label><br><br>
     
    						<input type="radio" name="comptes" value="Mammouth" >
    						<label >Mammouth </label><br><br>
     
    						<input type="radio" name="comptes" value="Bricomarché" >
    						<label >Bricomarché </label>
    					</div>
     
    					<div class="ckeckchoices">
    						<input type="radio" name="comptes" value="Autre - " >
    						<label>c'était une autre enseigne...?</label>
     
    						<input type="text" name="autreComptes" placeholder="nouvelle enseigne"><br><br>		
    					</div>	
     
    					<h4>la somme était de...</h4><br>
    <!--merci de ne pas rire de mon numpad de compétition qui est, je le réalise en rédigeant, un nid de failles de sécurité probablement-->
    					<input type="text" name="montant">
    					<br><br>
    					<input type="button" value="9" onclick="montant.value+='9'">
    					<input type="button" value="8" onclick="montant.value+='8'">
    					<input type="button" value="7" onclick="montant.value+='7'">
    					<br>
    					<input type="button" value="6" onclick="montant.value+='6'">
    					<input type="button" value="5" onclick="montant.value+='5'">
    					<input type="button" value="4" onclick="montant.value+='4'">
    					<br>
    					<input type="button" value="3" onclick="montant.value+='3'">
    					<input type="button" value="2" onclick="montant.value+='2'">
    					<input type="button" value="1" onclick="montant.value+='1'">
    					<br>
    					<input type="reset" value="C">
    					<input type="button" value="0" onclick="montant.value+='0'">
    					<input type="button" value="." onclick="montant.value+='.'">
     
     
     
    					<h4>montant payé par :</h4>
    					<span class="esper">&ast;</span>
     
    					<select name="idPaiement" required size="1">	
    						<option value="">type paiement</option>														
    						<?php						
    						foreach ($listPaiement as $keyIdPaiement => $valuePaiement) {
    							echo "<option value=\"$keyIdPaiement\">$valuePaiement</option>\n";
    						}
    						?>
    					</select>	
     
    				</fieldset><br>
     
    				<nav style="min-height:65px;">
    					<div class="balocentre">
    						<button class="buttonland">Envoyer</button>
    					</div>				
    				</nav>					
     
    			</form>
    		</section>
    	</div>
     
    </body>
    </html>
    ...et enfin la page qui transmet a ma db

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    include("ConnectDB.inc.php");
     
    if(array_key_exists('code', $_POST) and array_key_exists($_POST['code'], $_SESSION['code'])) {
    	$idTransactions=$_SESSION['code'][$_POST['code']];
    } else {
    	exit();
    }
     
    if($idTransactions==0){
     
    try {
     
    $query="INSERT INTO transactions (idTransactions,idMouvements,idThematiques,idCategories,DateDuJour,comptes,autreComptes,montant,idPaiement) VALUES (?,?,?,?,?,?,?,?,?)";
    $stmt=$mysqli->prepare($query);
    $stmt->bind_param('iiiissssi',$_POST['idTransactions'],$_POST['idMouvements'],$_POST['idThematiques'],$_POST['idCategories'],$_POST['DateDuJour'],$_POST['comptes'],$_POST['autreComptes'], $_POST['montant'], $_POST['idPaiement']);
    $stmt->execute();
    } catch (Exception $e) {
    	echo "MySQLI Error code:".$e->getCode()."<br>";
    	echo "Exception Msg: ".$e->getMessage()."<br>";
    	exit();
    }
    }else{
     
    }
    header("Location: Pagesapplibudj/out.php");
    ?>
    ouf...

    Donc j'ai a peu près compris vos approche, mais je sais pas les mettres en œuvre...J'ai essayé de créer un $_SESSION['mouvement'], j'arrive à l'anonymiser dans l'inspecteur, mais quand j'envoie le formulaire, il me met un 0 dans la data base au lieu de 1 en l’occurrence.

    Je suis au bout du rouleau là

  7. #7
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Bonjour,

    Il fautsession_start(); au début de chaque page.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2021
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    ah bon?

    mais si il est dans la page connectDB.inc.php, et que je mets mon include(connectDB.inc.php) a chaque page, ça reviens pas au même?

  9. #9
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    lol...

    1- tu as écrit page dbconnect alors que le fichier est connectDB.inc.php...
    Il fallait le deviner ?
    Donc OK.

    2- Tu n'as pas besoin de transmettre une variable de SESSION, NI en GET, ni en POST.
    Par conséquent, se qui se trouve dans une variable de SESSION est accessible (via PHP) sur toutes les pages, sans être visible dans le code ou la barre d'adresse.
    C'est tout l'intérêt.

    3- de ce que j'ai compris, tu as plusieurs pages, avec formulaire :
    • supform.php (Supermarché)
    • boutiqform.php (boutique)

    C'est dans ces pages que tu dois/peux définir les variables à mettre en SESSION :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $_SESSION['transaction']['idMouvements'] = 1;
    $_SESSION['transaction']['idThematiques'] = 1;
    $_SESSION['transaction']['idCategories'] = 1;

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2021
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Merci tout le monde
    Y a rien a faire, je n'y arrive pas. J'ai dû mal exposer mon problème. Je vais continuer mes recherches.

    Merci quand même.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Parce que l'Europe, c'est pas assez bien pour nous !
    Par pmithrandir dans le forum Politique
    Réponses: 76
    Dernier message: 26/05/2014, 18h47
  2. Réponses: 3
    Dernier message: 21/10/2006, 14h25
  3. Je stress parce que le temps passe
    Par Invité dans le forum ASP
    Réponses: 3
    Dernier message: 18/10/2006, 22h46
  4. [VBA Access] Champ texte null alors que l'objet existe bien.
    Par Caroline1 dans le forum VBA Access
    Réponses: 9
    Dernier message: 28/03/2006, 17h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo