Aide syntaxe PHP

Résolu/Fermé
index Messages postés 1861 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 2 avril 2017 - 28 nov. 2015 à 18:59
index Messages postés 1861 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 2 avril 2017 - 1 déc. 2015 à 23:43
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.
A voir également:

9 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
28 nov. 2015 à 20:19
Pourquoi tu fermes et ouvres immédiatement les accolades de ton IF ?
0
index Messages postés 1861 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 2 avril 2017 231
Modifié par index le 28/11/2015 à 20:56
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>
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
29 nov. 2015 à 15:11
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.
0
index Messages postés 1861 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 2 avril 2017 231
29 nov. 2015 à 16:59
J'imagine que la commande exec est à éviter, mais dans ce cas précis et à ma connaissance, je ne vois pas comment faire autrement ...
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
29 nov. 2015 à 15:15
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");
}

0
index Messages postés 1861 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 2 avril 2017 231
29 nov. 2015 à 16:54
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.
0
index Messages postés 1861 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 2 avril 2017 231
29 nov. 2015 à 16:57
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.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
29 nov. 2015 à 17:07
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.
0
index Messages postés 1861 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 2 avril 2017 231
29 nov. 2015 à 17:16
Merci, je teste ça.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
index Messages postés 1861 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 2 avril 2017 231
29 nov. 2015 à 17:22
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 ?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
29 nov. 2015 à 18:16
L'assignation de la variable CMD doit être faite après avoir définit la variable Value ...
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
30 nov. 2015 à 00:25
$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
0
index Messages postés 1861 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 2 avril 2017 231
30 nov. 2015 à 14:31
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.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié par jordane45 le 30/11/2015 à 18:16
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>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié par jordane45 le 30/11/2015 à 18:16
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>

0
index Messages postés 1861 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 2 avril 2017 231
30 nov. 2015 à 19:54
Ta dernière solution fonctionne, un génie !

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

Je te remercie pour ta patience.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
30 nov. 2015 à 21:55
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
0
index Messages postés 1861 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 2 avril 2017 231 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
30 nov. 2015 à 22:46
"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.
0
index Messages postés 1861 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 2 avril 2017 231
Modifié par index le 1/12/2015 à 20:55
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.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
1 déc. 2015 à 21:31
Impossible sauf pour internet explorer
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
1 déc. 2015 à 21:32
Ou alors il me semble qu'avec du flash c'est possible.
il existe de nombreux exemples sur le net
0
index Messages postés 1861 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 2 avril 2017 231
1 déc. 2015 à 23:43
D'accord, je te remercie. Je vais chercher à faire ça en flash. (j'en ai beaucoup des langages à apprendre ^^)
0