Aide syntaxe PHP

Résolu/Fermé
Messages postés
1861
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
2 avril 2017
-
Messages postés
1861
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
2 avril 2017
-
Bonjour.

J'aimerais que vous m'aidiez à trouver mon erreur dans cette ligne PHP:

<?php if (isset($_POST['value'])) {$value=$_POST['value'];} { exec(('nircmd.exe changesysvolume ['value']'));}  else {$value=0;} 
?>


Je vous remercie.

9 réponses

Messages postés
14851
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 janvier 2022
315
Pourquoi tu fermes et ouvres immédiatement les accolades de ton IF ?
Messages postés
1861
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
2 avril 2017
233
Parceque je débute en php et que j'ai compris le fonctionnement de ma commande mais je bloque sur la syntaxe ...

J'aimerai éxecuter la commande :

nircmd.exe changesysvolume [valeur en php]

En fait, intégrer une valeur variable dans une même commande.

La valeur est prise selon un input range en html.

le reste du code est:

<form method="post" action="#">
<fieldset>
<input style="margin-left:4%;width:82%" type="range" step="10000" name="value" value="10000" min="10000" max="60000" list="accroissement" onchange="this.form.submit()" onclick="this.form.submit()">
<datalist id="accroissement">>
<option>10000</option>
<option>20000</option>
<option>30000</option>
<option>40000</option>
<option>50000</option>
<option>60000</option>
<datalist>
<input type="hidden" name="f2wt" value=""/>
</fieldset>
</form>
Messages postés
14851
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 janvier 2022
315
Le caractère de concaténation de chaine est le point ".".
Sinon, vérifies fien les paramètres de ton script à chaque fois, car tu pourrait avoir un détournement de la valeur.
Sinon, la commande exec est à éviter le plus possible, car elle est la porte ouverte à énormément de failles.
Messages postés
1861
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
2 avril 2017
233
J'imagine que la commande exec est à éviter, mais dans ce cas précis et à ma connaissance, je ne vois pas comment faire autrement ...
Messages postés
34706
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 janvier 2022
4 000
Bonjour,

Ton if corrigé :
if (isset($_POST['value'])) {
  $value=$_POST['value'];
  exec("nircmd.exe changesysvolume $value");
}else {
  $value=0;
}


Ou encore plus simplement avec l'écriture ternaire :
$value = isset($_POST['value']) ? $_POST['value'] : 0;
if($value !=0){
 exec("nircmd.exe changesysvolume $value");
}

Messages postés
1861
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
2 avril 2017
233
Merci beaucoup.

Sans vouloir remettre tes conaissances en question cette partie du script semble poser problème:

exec("nircmd.exe changesysvolume $value");


En effet le :
 $value
n'est pas compris par nircmd.exe

Je pense qu'il voit la commande comme si "$valeur" était un nombre, car rien ne se passe.
Messages postés
1861
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
2 avril 2017
233
La valeur va de 1 à 65535. Ce qui veut en fait établir un régalge du son de windows à distance: de de 1 à 100%.

Je pense que nircmd croit que
$value
est comprit entre cet intervalle.
Messages postés
34706
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 janvier 2022
4 000
Essayes ça

$cmd ="nircmd.exe changesysvolume [$value]";
Echo: $cmd ;

exec ($cmd);


ps: je ne saispas si il faut les crochets ou pas...
a toi de voir.
Messages postés
1861
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
2 avril 2017
233
Merci, je teste ça.
Messages postés
1861
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
2 avril 2017
233
J'ai mis ça:

<?
$cmd ="nircmd.exe setsysvolume [$value]";

if (isset($_POST['value'])) {
  $value=$_POST['value'];
  echo: $cmd ;
}else {
  $value=0;
}
?>


Ca ne marche pas, mais ça me semble pourtant correct ?
Messages postés
14851
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 janvier 2022
315
L'assignation de la variable CMD doit être faite après avoir définit la variable Value ...
Messages postés
34706
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 janvier 2022
4 000
$value = !empty($_POST['value']) ? $_POST['value'] : 0;
if($value !=0){
 $cmd = escapeshellcmd("nircmd.exe setsysvolume ".$value);
 echo: $cmd  //le temps des tests pour savoir ce que contient la ligne de commande
 exec($cmd, $outputAndErrors, $return_value);
 
 // Affichage des erreurs lors de l'appel à la fonction : 
  if(!empty($outputAndErrors)){
   echo "<br>outputAndErrors<br>";
   print_r($outputAndErrors);
  }  

  if(!empty($return_value)){
    echo "<br>return_value :".$return_value;
   }
}

Je viens de regarder sur le net .. il n'y a pas les crochets visiblement...
j'ai aussi ajouter l'instruction escapeshellcmd qui permet de protéger les caractères spéciaux du Shell

J'ai aussi remplacé ISSET par !EMPTY pour s'assurer que l'utilisateur ne passe pas une valeur "vide"..

Et enfin, j'ai ajouté les variables contenant les éventuelles erreurs et/ou code de retour lors de l'appel au programme
Voir notice : https://www.php.net/manual/fr/function.exec.php
Messages postés
1861
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
2 avril 2017
233
Tout fonctionne, tu es vraiment fort.

Si j'ai quelque chose qui peut être gênant, mais enfin, rien de grave;
Lorsque je sélectionne la valeur avec la barre, cette dernière revient à zéro lorsque la valeur est envoyé ...

Elle ne reste pas sur la valeur que je veux lui donner.

Mais la commande nircmd fonctionne à merveille !

Si tu sais et que tu as envie de regarder, sinon je te remercie beaucoup.
Messages postés
34706
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 janvier 2022
4 000
Facile...
Il faut rebalancer la valeur après le submit :
Bien sûr.. il te faut des VALUE dans tes options.. pour comparer avec la valeur passée dans le POST.

Au passage, tu peux créer tes "option" dans une boucle de 1 à 6

Un truc du genre :
<form method="post" action="#">
<fieldset>
<input style="margin-left:4%;width:82%" type="range" step="10000" name="value" value="10000" min="10000" max="60000" list="accroissement" onchange="this.form.submit()" onclick="this.form.submit()">
<datalist id="accroissement">>
<?php
 $valeur_post = !empty($_POST['value']) ? $_POST['value'] : NULL;
 for($i=1;$i<=6;$i++){
 $valeur = $i*10000;
 $selected = $valeur == $valeur_post ? " selected='selected' " : '';
  echo "<option value='$valeur' $selected>$valeur</option>";
 } 
?>
<datalist>
<input type="hidden" name="f2wt" value=""/>
</fieldset>
</form>
Messages postés
34706
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 janvier 2022
4 000
ou alors (je n'ai pas utilisé ce contrôle jusqu'à maintenant.. c'est peut être juste un VALUE à mettre dans l'input :
<?php 
$valeur_post = !empty($_POST['value']) ? $_POST['value'] : '10000';
?>
<form method="post" action="#">
<fieldset>
<input style="margin-left:4%;width:82%" type="range" step="10000" name="value" value="<?php echo $valeur_post;?>" min="10000" max="60000" list="accroissement" onchange="this.form.submit()" onclick="this.form.submit()">
<datalist id="accroissement">>
<?php
 for($i=1;$i<=6;$i++){
 $valeur = $i*10000;
  echo "<option value='$valeur'>$valeur</option>";
 } 
?>
<datalist>
<input type="hidden" name="f2wt" value=""/>
</fieldset>
</form>

Messages postés
1861
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
2 avril 2017
233
Ta dernière solution fonctionne, un génie !

En tout cas, j'aimerais avoir ton niveau en PHP !

Je te remercie pour ta patience.
Messages postés
34706
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 janvier 2022
4 000
En tout cas, j'aimerais avoir ton niveau en PHP !

Y'a pas de mérite... juste de la pratique :-)

Par contre: Si la question est résolue..
Merci de ne pas oublier de clôturer le sujet
(en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

Cordialement,
Jordane
Messages postés
1861
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
2 avril 2017
233 >
Messages postés
34706
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 janvier 2022

"Y'a pas de mérite... juste de la pratique :-) "

Oui ^^ Tu as raison je pense.

"Si la question est résolue..
Merci de ne pas oublier de clôturer le sujet "

Je le fais tout de suite et encore merci.
Messages postés
1861
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
2 avril 2017
233
Bonsoir.

Jordane45, est ce que tu sais comment on peut grâce à un bouton, copier du texte dans le presse papier de l'utilisateur ?

J'ai essayé avec une fonction "onclick" et une fonction javascript mais rien à faire :/

Il parait que c'est impossible d'après de nombreux site, tu veux bien m'aider ?

Je te remercie.
(ou si quelqu'un d'autre sait) merci.
Messages postés
34706
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 janvier 2022
4 000
Impossible sauf pour internet explorer
Messages postés
34706
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 janvier 2022
4 000
Ou alors il me semble qu'avec du flash c'est possible.
il existe de nombreux exemples sur le net
Messages postés
1861
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
2 avril 2017
233
D'accord, je te remercie. Je vais chercher à faire ça en flash. (j'en ai beaucoup des langages à apprendre ^^)