RÉCUPÈRE LA PLACE PERDU DANS UNE BASE DE DONNÉES MYSQL

Vavavlp Messages postés 16 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 27 avril 2009 - 10 oct. 2009 à 11:35
Vonscott Messages postés 61 Date d'inscription vendredi 6 janvier 2006 Statut Membre Dernière intervention 19 septembre 2011 - 18 oct. 2009 à 03:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50664-recupere-la-place-perdu-dans-une-base-de-donnees-mysql

Vonscott Messages postés 61 Date d'inscription vendredi 6 janvier 2006 Statut Membre Dernière intervention 19 septembre 2011
18 oct. 2009 à 03:40
ouias, pas convaincu, peut etre utile pour des clients n'ayant pas acces au phpmyadmin.
Quant au niveau initié, faudrait voir à pas pousser mémé dans les orties non plus, un code de débutant que l'on trouve partout.
Une page html pour ca ? Le code aurait pu etre integrer dans une fonction appellée par la page.
mountainmagazin Messages postés 6 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 29 décembre 2008
12 oct. 2009 à 09:18
Pour retirer un virgule en fin de chaine, tu peux utiliser :

rtrim ( $sql, ", ");
pgassie Messages postés 12 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 13 décembre 2006
11 oct. 2009 à 22:25
Certainement des problèmes d'éditeur font que le code proposé ne marche pas.
J'ai donc ré-écrit le code suivant :
------------------------------------------------------------------------
<?php
//utilisation http://localhost/[test]/optibase.php[?b= mabase]
// [test] étant l'allias de votre connexion PHP locale

// Serveur mySQL à renseigner
$serveur = "localhost";
// Base de données mySQL à renseigner
if((isset($_GET['b']))&&(!empty($_GET['b'])))$base = $_GET['b']; else $base = "mysql";
// Login de connexion à renseigner
$utilisateur = "root";
// Mot de passe pour mySQL à renseigner
$mot_de_passe = "";
?>
<html>
<head>
<title>Récupère la place perdue dans une base de données MySQL</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style>
table, td, th {border:4px inset grey;margin:0 auto;}
h1 {text-align:center;}
</style>
</head>

Optimisation de la Base <?php echo $base ;?>

Nom de la table |Place perdue |Traitée |
<?php
$connexion = @mysql_connect($serveur, $utilisateur, $mot_de_passe)
or die(\"
\nCONTINUER\".mysql_error().\"\n\n</html> \");
//'retour.html' à renseigner
$ok=false;
//on prépare la requête
$requete= \"OPTIMIZE TABLE \";
//on recherche toutes les données des tables
$resultat = mysql_query('SHOW TABLE STATUS FROM '.$base.';');
while($ligne = mysql_fetch_assoc($resultat)) {
echo \"----
".$ligne['Name'] . ", ". $ligne['Data_free'].", ";
if($ligne['Data_free'] >0 ) {//on ne garde que les tables qui affichent des pertes
echo "oui, \n\";
$ok=true;
$requete .= '`'.$ligne['Name'].'`, ';
}else echo \"non</td>\n\";
}
echo"\n
\n";
//on enlève le ', ' de trop - peut-être à améliorer
$requete = substr($requete, 0, (strlen($requete)-2));
if ($ok) { //et on optimise
echo "
\n
\n
\nTraitement : `".$requete . "` effectué.
\n";
mysql_query($requete, $connection);
} else echo "
\n
\n
\nAucun traitement à faire.
\n";
mysql_close($connection);
?>

</html>
------------------------------------------------------------------------

Spécialement pour Vavavlp,j'ai amélioré la fonction die ( qui ne revenant pas, fabrique une page mal formée ).
Quelques autres petites astuces pour grands débutants.
J'utilise <table> qui n'est pas du tout "deprecated".
Inutile de gérer les lettres accentuées, ce programme est fait pour être en local ; par contre le $serveur peut commencer par "http:" et optimiser une base en ligne.

Plus là : http://www.phpcs.com/forum/sujet-SAVOIR-QUAND-ON-DOIT-OPTIMISER-TABLE-MYSQL_483594.aspx

Programmez, prenez de la peine...

Amusez-vous bien !
Vavavlp Messages postés 16 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 27 avril 2009
10 oct. 2009 à 11:36
Mince il y a pas de fonction édit ^^'

Là je sais pas si ça vient du code ou du site mais faudrait indenter aussi.
Vavavlp Messages postés 16 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 27 avril 2009
10 oct. 2009 à 11:35
But du code intéressant, pouvant être utile sur des sites utilisant le sql pour stocker des données temporaires.

Toutefois quelques remarques:
- Tu oublies le <?php de départ,
- die(mysql_error()); avant même d'avoir afficher la balise <html> :s
- mysql_ pdo serai mieux quand même,
- pas de xHTML,
- if($data['Data_free'] > ) on a le droit ?? faut pas un zéro (je suis pas sur jamais essayer ^^).

Voila avec ces quelques amélioration ça fera un code bien pratique ;)

Cordialement,
Vavavlp