Création des tables à partir d'un fichier SQL

Eléphant du PHP | 88 Messages

03 août 2006, 09:45

Bonjour,

je souhaiterai à l'ouverture de mon site tester si la base de donnée est bien installée.

Pour ce faire, j'ai décidé de procéder comme cela:

- test de la présence du fichier ok.txt
- si présence alors bdd bien installé
sinon Header (Location : install.php)

Le fichier install.php permet de créer la base de données et d'importer un fichier sql contenant les CREATE TABLE.

Pour le moment, j'arrive à créer ma base mais je voudrais pouvoir executer mon fichier SQL seulement je ne vois pas trop comment faire.
<?
session_start();

$host = isset($_REQUEST["host"]) ? $_REQUEST["host"]: "";
$database = isset($_REQUEST["database"]) ? $_REQUEST["database"]: "";
$user = isset($_REQUEST["user"]) ? $_REQUEST["user"]: "";
$password = isset($_REQUEST["password"]) ? $_REQUEST["password"]: "";
$erreur = 0;

if (!empty($host) && !empty($database) && !empty($user)){
	$conn = mysql_pconnect("$host","$user","$password");
	if ($conn != FALSE){
		$sql = "CREATE DATABASE $database";
		if (mysql_query($sql, $conn)){
			print "Base de données créée correctement\n";
		}
		else {
			print "Erreur lors de la création de la base de données : " . mysql_error() . "\n";
		}
	}
	else{
		$erreur=1;
	}
}

?>

<html>
<head><title>Installation</title></head>
<body>

<form action="install.php" method="POST" style="margin: 0px;">

<table border="0" cellspacing="0" cellpadding="0" align="center">
	<tr>
		<td style="padding-top: 100;">

				<table border="0">
					<tr>
						<td align="left" nowrap class="outer_table_heading" nowrap>
							Installation de la base de données
						</td>
					</tr>
				</table>

			<table width="300" cellspacing="0" cellpadding="5" class="box">
				<tr>
					<td class="label">Adresse serveur :<br><input type="text" name="host" size="25" maxlength="25" value="<? echo $host;?>"></td>
					<td class="label">Nom de la base :<br><input type="text" name="database" size="25" maxlength="25" value="<? echo $database;?>"></td>
					<td><img class="login_image" src="images/spacer.gif"></td>
				</tr>
				<tr>
					<td class="label">Nom de l'utilisateur :<br><input type="text" name="user" size="25" maxlength="25" value="<? echo $user;?>"></td>
					<td class="label">Mot de passe utilisateur :<br><input type="password" name="password" size="25" maxlength="25" value="<? echo $password;?>"></td>
					<td class="label"><br><input type="submit" name="Login" value="Ok"></td>
				</tr>
				<?
				if ($erreur==1){
					print "<tr bgcolor=\"red\">";
					print "Impossible de se connecter à la base de donnée.";
					print "</tr>";
				}
				?>
			</table>	
		</td>
	</tr>
</table>

</form>


</body>
</html>
J'ai bien pensé à fopen mais il y a des commentaires dans mon fichier .sql donc est ce que ca ne va pas faire des erreurs?

Merci

Eléphant du PHP | 88 Messages

03 août 2006, 14:17

Re!

J'ai trouvé sur internet http://www.webmaster-hub.com/lofiversio ... 21044.html une astuce que j'essaye de mettre en place. Mais il ne se passe rien.
Après l'execution ma base est toujours vide.

Si vous avez des idées?

Merci
// si tous les champs sont remplis
if (!empty($host) && !empty($database) && !empty($user)){
	// on teste si on peut se connecter à la base
	$conn = mysql_pconnect("$host","$user","$password");
	if ($conn != FALSE){
		// si confirmation de la suppression de la bdd existante
		if ($suppDb==1){
			$sql = "DROP DATABASE $database";
			mysql_query($sql, $conn);
		}
		$sql = "CREATE DATABASE $database";
		if (mysql_query($sql, $conn)){
			$cmd = "mysql --host=$host --user=$user --password=$password $database < timesheet_creation_table.sql";
			print $cmd;
			exec($cmd);
		}
		else {
			$erreur=2;
		}
	}
	else{
		$erreur=1;
	}
}

Eléphant du PHP | 88 Messages

04 août 2006, 09:48

C'est bon!

En fait ce que j'avais essayé devais marcher mais dans le fichier sql j'avais laissé en dur le nom de la base :roll: ...
Tête en l'air que je suis!

merci

et pour ceux que ça interesse :
<?php
// si tous les champs sont remplis
if (!empty($host) && !empty($database) && !empty($user)){
	// on teste si on peut se connecter à la base
	$conn = mysql_pconnect("$host","$user","$password");
	if ($conn != FALSE){
		// si confirmation de la suppression de la bdd existante
		if ($suppDb==1){
			$sql = "DROP DATABASE $database";
			mysql_query($sql, $conn);
		}
		$sql = "CREATE DATABASE $database";
		if (mysql_query($sql, $conn)){
			$nom_fichier = "timesheet_creation_table.sql";
			$cmd = "mysql --host=$host --user=$user --password=$password $database < $nom_fichier";
			exec($cmd);
			$fichier = fopen("database_credentials.inc",'w');
			fwrite($fichier,"<?php\n");
			fwrite($fichier,"\$DATABASE_HOST = \"$host\";\n");
			fwrite($fichier,"\$DATABASE_USER = \"$user\";\n");
			fwrite($fichier,"\$DATABASE_PASS = \"$password\";\n");
			fwrite($fichier,"\$DATABASE_DB = \"$database\";\n");
			fwrite($fichier,"\$DATABASE_PASSWORD_FUNCTION = \"PASSWORD\";\n");
			fwrite($fichier,"?>\n");
			fclose($fichier);
			
			$fichier = fopen("ok.txt",'w');
			fwrite($fichier,"Installation terminée \n");
			fclose($fichier);
			HEADER ("Location:calendar.php");
		}
		else {
			$erreur=2;
		}
	}
	else{
		$erreur=1;
	}
}
?>