[RESOLU] donné plusieurs fonctions a une variable

Eléphant du PHP | 134 Messages

05 août 2013, 11:22

Bonjour, je souhaiterai savoir si il est possible de donner plusieurs fonctions a une variable

par exemple je créer un menu déroulant avec comme choix choix1 et choix2

je souhaiterai que si je prends choix1 par exemple et bien que mon serveur telecharge un fichier

et nommer ma variable
$choix = $choix1 or $choix2;
                                    $choix1 = $_POST['choix1'] , 'http://fichier1.com/fichier1.txt' ;
                                   $choix2 = $_POST['choix2'], 'http://fichier1.com/fichier2.txt ';


et que ma commande ssh2 soit comme ça
ssh2_exec($connection, "mkdir " . $path . " && cd " . $user .   " && wget " . $choix);

Mammouth du PHP | 2278 Messages

05 août 2013, 11:42

Avant toute chose, il faudrait te pencher sur
<select>
</select>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 134 Messages

05 août 2013, 11:52

Merci de ta réponse, il faut proceder de cette façon ?
<p><label>Type :</label><select name="choix" id="choix">
		<option value="1" name="choix1" id="choix1">choix1</option>
		<option value="2"name="choix2" id="choix2">choix2</option>
		</select></p>
$choix = $_POST['choix'];
$choix1 = $_POST['choix1'], 'http://fichier1.com/fichier1.txt';
$choix2 = $_POST['choix2'], 'http://fichier2.com/fichier2.txt';

ViPHP
xTG
ViPHP | 7331 Messages

05 août 2013, 13:01

Plutôt ainsi :
$choix = $_POST['choix'];
if( $choix == 'choix1' ){
   $choix = 'http://fichier1.com/fichier1.txt';
}else if( $choix == 'choix2' ){
   $choix = 'http://fichier2.com/fichier2.txt';
}else{
  echo 'Choix impossible';
}

Eléphant du PHP | 134 Messages

05 août 2013, 13:03

Merci je vais essayer

Eléphant du PHP | 134 Messages

05 août 2013, 13:20

j'ai toujours choix impossible :(

Mammouth du PHP | 571 Messages

05 août 2013, 13:36

ça doit ressembler à ça:
<select name="choix" id="choix">
                <option value="1" id="choix1">choix1</option>
                <option value="2" id="choix2">choix2</option>
                </select>
et le traitement du formulaire en php:
$choix = $_POST['choix'];
if( $choix == '1' ){
   $reponse = 'http://fichier1.com/fichier1.txt';
}else if( $choix == '2' ){
   $reponse = 'http://fichier2.com/fichier2.txt';
}else{
  echo 'Choix impossible';
}

echo 'vous avez choisi:',$reponse; 
après soumission du formulaire, pour vérifier le choix effectué il suffit de faire un debug du tableau $_POST:
$_POST['choix']; //affichera soit 1, soit 2

Eléphant du PHP | 134 Messages

05 août 2013, 13:39

dans mes log j'ai
unexpected T_CONSTANT_ENCAPSED_STRING

Eléphant du PHP | 134 Messages

05 août 2013, 13:52

en gros dans mon fichier script.php j'ai
<?php

   // $bin = $_POST['bin'];
	$path = $_POST['path'];
	$user = $_POST['alias'];
	$screen = $_POST['screen'];
	$choix = $_POST['choix'];
	
$choix = $_POST['choix'];
if( $choix == '1' ){
   $reponse = 'http://fichier1.com/fichier1.txt';
}else if( $choix == '2' ){
   $reponse = 'http://fichier1.com/fichier2.txt';
}else{
  echo 'Choix impossible';
}

echo 'vous avez choisi:',$reponse; 
 

	$test = ssh2_exec($connection, "mkdir " . $user " && cd " . $user . " && wget " . $choix ); 

if (isset($_POST['go'])) {
echo stream_get_contents($test); 
}
?>
et dans mon test.php j'ai

<form method="post" action="script.php">
	<fieldset>
		<p><label>Alias :</label><input type="text" class="text-medium" name="alias" id="alias" /></p>
		<p><label>Type :</label><select name="choix" id="choix">
                <option value="1" id="choix1">choix1</option>
                <option value="2" id="choix2">choix2</option>
                </select></p>
	</fieldset>
	<fieldset>
		<p><label>Exécutable du serveur :</label><input type="text" class="text-medium" name="bin" id="bin" /></p>
		<p><label>Répertoire de l'éxécutable :</label><input type="text" class="text-medium" name="path" id="path"/></p>
		<p><label>Options de lancement :</label><textarea name="options" id="options"></textarea></p>
		<p><label>Nom du screen :</label><input type="text" class="text-medium" name="screen" id="screen"/></p>
	</fieldset>
			<button type="submit" name="go" class="button" value="" id="go"> Ajouter ce serveur</button> <button type="reset" class="button negative">Reset des champs</button>
	
</form>

dans mes logs j'ai toujours ce retour d'erreur

PHP Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in 26

en gros il me dit que j'ai un soucis sur
$test = ssh2_exec($connection, "mkdir " . $user " && cd " . $user . " && wget " . $choix ); 

Eléphant du PHP | 134 Messages

05 août 2013, 14:00

j'ai enlever l'espace a la fin de
$test = ssh2_exec($connection, "mkdir " . $user " && cd " . $user . " && wget " . $choix );
et maintenant sur ma page script.php j'ai

http://fichier2.com/fichier2.txt
/root

Mammouth du PHP | 571 Messages

05 août 2013, 14:53

les paramètres passés à la fonction ssh2_exec() ne sont pas bons et le pire il y a une mauvaise concaténation dans ta commande. En effet la variable $choix est égal à 1 ou 2 selon le choix alors qu'elle devrait représenter un fichier(fichier1.txt ou fichier2) c-a-d la variable $reponse. Changeons la nommenclature de la variable $reponse en l'appelant $fichier (enfin question de cohérence):

<?php
//!!!il faut toujours vérifier que tu reçois les données envoyées depuis ton formulaire
   // $bin = $_POST['bin'];
        $path = $_POST['path'];
        $user = $_POST['alias'];
        $screen = $_POST['screen'];
        $choix = $_POST['choix'];
       
$choix = $_POST['choix'];
if( $choix == '1' ){
   $fichier = 'http://fichier1.com/fichier1.txt';
}else if( $choix == '2' ){
   $fichier = 'http://fichier1.com/fichier2.txt';
}else{
  echo 'Choix impossible';
}


 if (file_exists($fichier)) {//on lance la commande que si le fichier existe
     $test = ssh2_exec($connection, "mkdir  $user  && cd  $user  && wget  $fichier");
       //on vérifie que la commande s'est bien passée
     if($test===false) echo "Echec de la commande mkdir..";

  if (isset($_POST['go'])) {
 echo stream_get_contents($test);
} else {
    echo "Le fichier  $fichier n'existe pas.";
}


      
}
?>


Eléphant du PHP | 134 Messages

05 août 2013, 14:58

Désolé au fait j'avais trouvé ^^ mais merci quand mm, il ne faut pas faire la commande ssh comme je l'ai faite ?

Eléphant du PHP | 134 Messages

05 août 2013, 15:30

une question si je fais un mkdir dossier1 mais si il existe deja que je rentre dedans

Mammouth du PHP | 571 Messages

05 août 2013, 17:31

Une question, est ce que ton script fonctionne ?
Désolé au fait j'avais trouvé ^^ mais merci quand mm, il ne faut pas faire la commande ssh comme je l'ai faite ?
$test = ssh2_exec($connection, "mkdir " . $user " && cd " . $user . " && wget " . $choix ); 
le problème ne vient pas de la commande ssh mais plutôt d'une erreur syntaxique sur la concaténation entre $user et "cd" où tu as omis un point(.).

Avec concaténation, la fonction ssh2_exec aurait pu s'écrire:
$test = ssh2_exec($connection, "mkdir " . $user. " && cd " . $user . " && wget " . $fichier ); 
PHP sait interpréter une variable située entre guillemets(2) et dans ce cas la concaténation n'est plus obligatoire, ainsi l'écriture sans concaténation devient alors:
$test = ssh2_exec($connection, "mkdir  $user  && cd   $user  && wget   $fichier "); 
une question si je fais un mkdir dossier1 mais si il existe deja que je rentre dedans
dans ce cas il va falloir adapter ton script en fonction de l'existence du répertoire dossier. Et pour ce faire tu as la fonction php file_exists()

Eléphant du PHP | 134 Messages

05 août 2013, 17:39

et encore une autre question si je rajoute screen -dmS $user
$test = ssh2_exec($connection, "Screen -dmS $user  && mkdir  $user  && cd   $user  && wget  $fichier ); 
effectivement j'ai un screen qui se créé mais n’exécute pas les commande et script a l’intérieur et le screen est visible que en faisant ps aux