8791 sujets

Développement web côté serveur, CMS

J'ai besoin de comprendre la logique de construction d'un script à plusieurs conditions sous PHP. J'emploie donc un langage parlé et j'aimerai savoir comment ça se traduit sous PHP.

Si connexion au serveur = OK
alors je teste si j'ai le droit d'écrire sur le répertoire
Si autorisation = Oui alors je sauvegarde le fichier de config
Si autorisation = Non alors message d'erreur "vérifiez les droits d'accès"
Sinon message d'erreur "Impossible de se connecter au serveur"

J'ai joué avec les if, elseif...mais sans succès. Ceci est vraiment la base mais je ne trouve pas d'exemple dans mon cas.

$server = $_POST["dbserver"];
$username = $_POST["dbusername"];
$password = $_POST["dbpassword"];
$databasename = $_POST["dbname"];
$serverstring = file_get_contents('../config-sample.php');

if (mysql_connect($server, $username, $password)) {
   echo '<p class="success">' ."Connected to the server". '</p>';
}
   if (file_put_contents('../config.php', preg_replace('/wordpress/', $server, $serverstring))) {
	echo '<p class="success">' ."Config file saved". '</p>';
	}
	else echo '<p class="error">Could not save config file: ' . mysql_error() . '</p>' ;
	}
else {
echo '<p class="error">Could not connect to the server: ' . mysql_error() . '</p>' ;
}

Modifié par olimart (10 Dec 2010 - 00:25)
Bonjour, << Smiley eek

$server = $_POST["dbserver"]; 
$username = $_POST["dbusername"]; 
$password = $_POST["dbpassword"]; 
$databasename = $_POST["dbname"]; 
$serverstring = file_get_contents('../config-sample.php'); 
 
if (mysql_connect($server, $username, $password)) { 
    echo '<p class="success">Connected to the server</p>';  
    if (file_put_contents('../config.php', preg_replace('/wordpress/', $server, $serverstring))) {         echo '<p class="success">Config file saved</p>'; 
    } else
        echo '<p class="error">Could not save config file!</p>' ; 
} else { 
    echo '<p class="error">Could not connect to the server: ' . mysql_error() . '</p>' ; 
} 


Problème de parenthésage à la ligne 9 du bout de script que tu as collé ici. Si tes conditions sont justes, le script est juste, je n'ai pas vérifié l'utilisation de la fonction file_put_contents().

A bientôt
Modifié par JuJu57 (10 Dec 2010 - 00:58)
Merci Julien (je suppose) mais ça ne marche pas mieux. 3 parenthèses ouvertes j'en ferme 3, non?

Le file_put_contents() marche avec du texte mais pas avec une variable (comme dans l'exemple). Le texte remplacé est blanc.

JuJu57 a écrit :
Bonjour, &lt;&lt; Smiley eek

$server = $_POST[&quot;dbserver&quot;]; 
$username = $_POST[&quot;dbusername&quot;]; 
$password = $_POST[&quot;dbpassword&quot;]; 
$databasename = $_POST[&quot;dbname&quot;]; 
$serverstring = file_get_contents('../config-sample.php'); 
 
if (mysql_connect($server, $username, $password)) { 
    echo '&lt;p class=&quot;success&quot;&gt;Connected to the server&lt;/p&gt;';  
    if (file_put_contents('../config.php', preg_replace('/wordpress/', $server, $serverstring))) {         echo '&lt;p class=&quot;success&quot;&gt;Config file saved&lt;/p&gt;'; 
    } else
        echo '&lt;p class=&quot;error&quot;&gt;Could not save config file!&lt;/p&gt;' ; 
} else { 
    echo '&lt;p class=&quot;error&quot;&gt;Could not connect to the server: ' . mysql_error() . '&lt;/p&gt;' ; 
} 


Problème de parenthésage à la ligne 9 du bout de script que tu as collé ici. Si tes conditions sont justes, le script est juste, je n'ai pas vérifié l'utilisation de la fonction file_put_contents().

A bientôt
Yop,

Et en structurant aux maximum ? Pas grand chose de changer par rapport à JuJu57 mais il m'est déjà arrivé d'avoir des erreurs bizarres en imbriquant des if sans mettre toutes les accolades.


$server = $_POST["dbserver"];
$username = $_POST["dbusername"];
$password = $_POST["dbpassword"];
$databasename = $_POST["dbname"];
$serverstring = file_get_contents('../config-sample.php');

if(mysql_connect($server, $username, $password)){
    echo '<p class="success">Connected to the server</p>';

    if(file_put_contents('../config.php', preg_replace('/wordpress/', $server, $serverstring))){
        echo '<p class="success">Config file saved</p>';
    }else{
        echo '<p class="error">Could not save config file!</p>' ;
    }
}else{
    echo '<p class="error">Could not connect to the server: ' . mysql_error() . '</p>' ;
}

Modifié par bilhackmac (10 Dec 2010 - 01:30)
Merci, ça marche presque comme ça.

- La fonction file_put_contents ne renvoie pas d'erreur mais je n'obtiens pas le résultat escompté, le remplacement du texte se fait mais par du vide. Dans le fichier ça dit: define('DB_NAME', 'wordpress');
Moi je cherche wordpress et je le remplace par la valeur entrée par l'utilisateur au travers d'un formulaire (la valeur est bien passée par ce que j'utilise $server au préalable pour me connecter à la base de données).
Une idée?

- Sinon si je veux imbriquer un autre if. En gros si if condition 1=true alors passer à if condition2 = true tester if condition3=true ....comment dois-je construire cet enchainement?
Dans l'exemple ci-dessous j'ai:
if mysql_connect = True
echo "Bravo"
if file_put_contents = True
echo "Bravo"
sinon "Échec"
else echo "message erreur mysql_connect"

mais si je veux continuer l'execution après conditio2=true comment j'insère le if condition 3 et où je place echo "messager d'erreur condition2". Ouf. Faut-il d'ailleurs poursuivre ainsi ou j'ai grillé une leçon?

Merci en tout cas pour votre aide

bilhackmac a écrit :
Yop,

Et en structurant aux maximum ? Pas grand chose de changer par rapport à JuJu57 mais il m'est déjà arrivé d'avoir des erreurs bizarres en imbriquant des if sans mettre toutes les accolades.


$server = $_POST[&quot;dbserver&quot;];
$username = $_POST[&quot;dbusername&quot;];
$password = $_POST[&quot;dbpassword&quot;];
$databasename = $_POST[&quot;dbname&quot;];
$serverstring = file_get_contents('../config-sample.php');

if(mysql_connect($server, $username, $password)){
    echo '&lt;p class=&quot;success&quot;&gt;Connected to the server&lt;/p&gt;';

    if(file_put_contents('../config.php', preg_replace('/wordpress/', $server, $serverstring))){
        echo '&lt;p class=&quot;success&quot;&gt;Config file saved&lt;/p&gt;';
    }else{
        echo '&lt;p class=&quot;error&quot;&gt;Could not save config file!&lt;/p&gt;' ;
    }
}else{
    echo '&lt;p class=&quot;error&quot;&gt;Could not connect to the server: ' . mysql_error() . '&lt;/p&gt;' ;
}
Je pense qu'il vaut mieux utiliser une variable pour les messages pour éviter les echos dans tous les sens. Sinon pour les imbrications il suffit juste de mettre le if(){} else(){} à l'endroit nécessaire Smiley smile


$message = '';
$error = '';

if(condition1) {
$message .= 'ok1<br />';
if(condition2) {
$message .= 'ok2<br />';
if(condition3) {
$message .= 'ok3<br />';
}
else { // condition3
$error .= 'erreure3<br />';
}
}
else { // condition2
$error .= 'erreure2<br />';
}
}
else { // condition 1
$error .= 'erreure1<br />';
}

// affichage message
if($message != '') { echo '<p class="message">' . $message . '</p>'; }
if($error != '') { echo '<p class="error">' . $error . '</p>'; }


Edit : comment on fait les tabulations pour un code plus lisible sur le forum ?
Modifié par Nukleo (10 Dec 2010 - 11:17)
Merci pour l'astuce. Plus clair pour moi aussi.

Par contre j'ai toujours un problème avec file_put_contents(). J'aimerai ouvrir une fois le fichier mais faire plusieurs modifications d'un coup. je pensais écrire une fonction puis renvoyer un message si toutes c'Est bien passé ou si une seule instruction a échoué.


Voici ce que j'ai pour le moment (ne marche pas bien sûr).
// Save config file
function saveconfig() {
  file_put_contents('../config.php', preg_replace('/localhost/',$server,$serverstring));
  file_put_contents('../config.php', preg_replace('/wordpress/',$databasename,$serverstring));
  }

if saveconfig(); { // saving config file
  echo '<p class="success">Config file saved</p>';
 else echo "Pas de chance"



Nukleo a écrit :
Je pense qu'il vaut mieux utiliser une variable pour les messages pour éviter les echos dans tous les sens. Sinon pour les imbrications il suffit juste de mettre le if(){} else(){} à l'endroit nécessaire Smiley smile


$message = '';
$error = '';

if(condition1) {
$message .= 'ok1&lt;br /&gt;';
if(condition2) {
$message .= 'ok2&lt;br /&gt;';
if(condition3) {
$message .= 'ok3&lt;br /&gt;';
}
else { // condition3
$error .= 'erreure3&lt;br /&gt;';
}
}
else { // condition2
$error .= 'erreure2&lt;br /&gt;';
}
}
else { // condition 1
$error .= 'erreure1&lt;br /&gt;';
}

// affichage message
if($message != '') { echo '&lt;p class=&quot;message&quot;&gt;' . $message . '&lt;/p&gt;'; }
if($error != '') { echo '&lt;p class=&quot;error&quot;&gt;' . $error . '&lt;/p&gt;'; }


Edit : comment on fait les tabulations pour un code plus lisible sur le forum ?
Récupère le contenu de ton fichier, fait les modifs puis ecris Smiley smile


$contents = file_get_contents($le_fichier);

$a_changer = array("premier", "second", "troisieme");
$remplacement = array("PREMIER", "SECOND", "TROISIEME");

$contents = preg_replace($a_changer, $remplacement, $contents);

file_put_contents($le_fichier, $contents);
Merci Nukleo pour ton exemple malheureusement ça casse tout.

Voici ce que j'ai
// Save config file
$configfilesample = '../config-sample.php';
$contents = file_get_contents($configfilesample); 
$chercher = array("wordpress", "root", "rootpassword"); 
$remplacer = array($databasename, $username, $password); 
 
$contents = preg_replace($chercher, $remplacer, $contents); 

if(file_put_contents($configfilesample, $contents); {
 echo '<p class="success">Config file saved</p>';


Ce qui me surprend c'est que tu réutilises $contents 2 fois avec des instructions différentes d'un autre côté je n'ai aucune idée si c'est possible ou pas. Smiley cligne

Nukleo a écrit :
Récupère le contenu de ton fichier, fait les modifs puis ecris Smiley smile


$contents = file_get_contents($le_fichier);

$a_changer = array(&quot;premier&quot;, &quot;second&quot;, &quot;troisieme&quot;);
$remplacement = array(&quot;PREMIER&quot;, &quot;SECOND&quot;, &quot;TROISIEME&quot;);

$contents = preg_replace($a_changer, $remplacement, $contents);

file_put_contents($le_fichier, $contents);

Modifié par olimart (12 Dec 2010 - 23:35)