Salutations,

Je galère en ce moment pas mal, n'étant pas du tout un pro. du PHP, sur un code sensé m'aider à déléguer un maximum en interne dans une assos.

L'idée est de gérer un inventaire de doublons en MySQL sans donner un accès PHPMyAdmin aux membres, mais juste un mini-template-maison avec juste ce qu'il faut remplir.

J'ai utilisé donc un formulaire HTML avec une action PHP/Variables et ceci fonctionne bien pour l'instant, en deux pages (l'une pour la saisie (saisie.php) et l'autre pour le listing simple (invent-lst.php). De cette manière, ceux qui aide à référencer travaillent à la chaine sur saisie.php et ceux qui veulent juste pointer l'inventaire via invent-lst.php.
A savoir, que j'ai rajouté aussi un include de invent-lst.php après la saisie d'une fiche (donc dans saisie.php).

Bref, j'espère me faire comprendre Smiley cligne .

Actuellement voici le code :

saisie.php :
<?php

include 'invent-data.php';

$connexion = mysql_connect("$chemin_db", "$login", "$pass");
//sélection de la base de données:
$db  = mysql_select_db( $database ) ;
$id = "Id";
$sql = "SELECT * FROM $table";
$combien = mysql_db_query($database, $sql, $connexion);
$abo = mysql_num_rows($combien);
$abos = $abo+1;
$dispo = "Dispo";
$type = "Type";
$etat = "Etat";
$ref = "Ref";
$date = "Date";
$commentaire = "Commentaire";
$donateur = "Donateur";
$collection = "Collection";
$acqui = "Acqui";
$valorisation = "Valorisation";
$ecart = "Ecart";

$pageincss = $_GET[page].".php";

// Debug
// echo $table."<br>";
// echo $abo."<br>";

// Moteur :

$result_dispo = mysql_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$dispo'") or die (mysql_error());
$row_dispo = mysql_fetch_array($result_dispo);
$enumList_dispo = explode(",", str_replace("'", "", substr($row_dispo['COLUMN_TYPE'], 5, (strlen($row_dispo['COLUMN_TYPE'])-6))));
$enumList_com_dispo = explode(",", str_replace("'", "", substr($row_dispo['COLUMN_COMMENT'], 0, (strlen($row_dispo['COLUMN_COMMENT'])))));

$result_type = mysql_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$type'") or die (mysql_error());
$row_type = mysql_fetch_array($result_type);
$enumList_type = explode(",", str_replace("'", "", substr($row_type['COLUMN_TYPE'], 5, (strlen($row_type['COLUMN_TYPE'])-6))));
$enumList_com_type = explode(",", str_replace("'", "", substr($row_type['COLUMN_COMMENT'], 0, (strlen($row_type['COLUMN_COMMENT'])))));

$result_etat = mysql_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$etat'") or die (mysql_error());
$row_etat = mysql_fetch_array($result_etat);
$enumList_etat = explode(",", str_replace("'", "", substr($row_etat['COLUMN_TYPE'], 5, (strlen($row_etat['COLUMN_TYPE'])-6))));
$enumList_com_etat = explode(",", str_replace("'", "", substr($row_etat['COLUMN_COMMENT'], 0, (strlen($row_etat['COLUMN_COMMENT'])))));

$result_ref = mysql_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$ref'") or die (mysql_error());
$row_ref = mysql_fetch_array($result_ref);
$enumList_ref = explode(",", str_replace("'", "", substr($row_ref['COLUMN_TYPE'], 5, (strlen($row_ref['COLUMN_TYPE'])-6))));
$enumList_com_ref = explode(",", str_replace("'", "", substr($row_ref['COLUMN_COMMENT'], 0, (strlen($row_ref['COLUMN_COMMENT'])))));

$result_date = mysql_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$date'") or die (mysql_error());
$row_date = mysql_fetch_array($result_date);
$enumList_date = explode(",", str_replace("'", "", substr($row_date['COLUMN_TYPE'], 5, (strlen($row_date['COLUMN_TYPE'])-6))));
$enumList_com_date = explode(",", str_replace("'", "", substr($row_date['COLUMN_COMMENT'], 0, (strlen($row_date['COLUMN_COMMENT'])))));

$result_commentaire = mysql_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table' AND COLUMN_NAME ='$commentaire'") or die (mysql_error());
$row_commentaire = mysql_fetch_array($result_commentaire);
$enumList_commentaire = explode(",", str_replace("'", "", substr($row_commentaire['COLUMN_TYPE'], 5, (strlen($row_commentaire['COLUMN_TYPE'])-6))));
$enumList_com_commentaire = explode(",", str_replace("'", "", substr($row_commentaire['COLUMN_COMMENT'], 0, (strlen($row_commentaire['COLUMN_COMMENT'])))));

$result_donateur = mysql_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table' AND COLUMN_NAME ='$donateur'") or die (mysql_error());
$row_donateur = mysql_fetch_array($result_donateur);
$enumList_donateur = explode(",", str_replace("'", "", substr($row_donateur['COLUMN_TYPE'], 5, (strlen($row_donateur['COLUMN_TYPE'])-6))));
$enumList_com_donateur = explode(",", str_replace("'", "", substr($row_donateur['COLUMN_COMMENT'], 0, (strlen($row_donateur['COLUMN_COMMENT'])))));

$result_collection = mysql_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table' AND COLUMN_NAME ='$collection'") or die (mysql_error());
$row_collection = mysql_fetch_array($result_collection);
$enumList_collection = explode(",", str_replace("'", "", substr($row_collection['COLUMN_TYPE'], 5, (strlen($row_collection['COLUMN_TYPE'])-6))));
$enumList_com_collection = explode(",", str_replace("'", "", substr($row_collection['COLUMN_COMMENT'], 0, (strlen($row_collection['COLUMN_COMMENT'])))));

$result_acqui = mysql_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table' AND COLUMN_NAME ='$acqui'") or die (mysql_error());
$row_acqui = mysql_fetch_array($result_acqui);
$enumList_acqui = explode(",", str_replace("'", "", substr($row_acqui['COLUMN_TYPE'], 5, (strlen($row_acqui['COLUMN_TYPE'])-6))));
$enumList_com_acqui = explode(",", str_replace("'", "", substr($row_acqui['COLUMN_COMMENT'], 0, (strlen($row_acqui['COLUMN_COMMENT'])))));

$result_valorisation = mysql_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table' AND COLUMN_NAME ='$valorisation'") or die (mysql_error());
$row_valorisation = mysql_fetch_array($result_valorisation);
$enumList_valorisation = explode(",", str_replace("'", "", substr($row_valorisation['COLUMN_TYPE'], 5, (strlen($row_valorisation['COLUMN_TYPE'])-6))));
$enumList_com_valorisation = explode(",", str_replace("'", "", substr($row_valorisation['COLUMN_COMMENT'], 0, (strlen($row_valorisation['COLUMN_COMMENT'])))));

$result_ecart = mysql_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table' AND COLUMN_NAME ='$ecart'") or die (mysql_error());
$row_ecart = mysql_fetch_array($result_ecart);
$enumList_ecart = explode(",", str_replace("'", "", substr($row_ecart['COLUMN_TYPE'], 5, (strlen($row_ecart['COLUMN_TYPE'])-6))));
$enumList_com_ecart = explode(",", str_replace("'", "", substr($row_ecart['COLUMN_COMMENT'], 0, (strlen($row_ecart['COLUMN_COMMENT'])))));
?>

<form name="saisiedestock" action="saisie.php?page=invent-envoi" method="Post">

<table align="center" style="border:1px solid black;" bordercolor="#000000">
	<tr align="center" style="border:1px solid black;" bordercolor="#000000">
    	<td title="Num&eacute;ro d'inventaire.">Fiche N&deg;</td>
        <td title="<? foreach($enumList_com_dispo as $comment_dispo) { echo $comment_dispo; } ?>">Dispo.</td>
        <td title="<? foreach($enumList_com_type as $comment_type) { echo $comment_type; } ?>">Type</td>
        <td title="<? foreach($enumList_com_etat as $comment_etat) { echo $comment_etat; } ?>">Etat</td>
        <td title="<? foreach($enumList_com_ref as $comment_ref) { echo $comment_ref; } ?>">Agent</td>
        <td title="<? foreach($enumList_com_date as $comment_date) { echo $comment_date; } ?>">Date</td>
        <td title="<? foreach($enumList_com_commentaire as $comment_commentaire) { echo $comment_commentaire; } ?>">Commentaire</td>
        <td title="<? foreach($enumList_com_donateur as $comment_donateur) { echo $comment_donateur; } ?>">Donateur</td>
        <td title="<? foreach($enumList_com_collection as $comment_collection) { echo $comment_collection; } ?>">Collection</td>
        <td title="<? foreach($enumList_com_acqui as $comment_acqui) { echo $comment_acqui; } ?>">Acqui.</td>
        <td title="<? foreach($enumList_com_valorisation as $comment_valorisation) { echo $comment_valorisation; } ?>">Valorisation</td>
        <td title="<? foreach($enumList_com_ecart as $comment_ecart) { echo $comment_ecart; } ?>">Ecart</td>
        <td title="Insertion de la fiche." bgcolor="#999999"><font color="#FFFFFF">Validation</font></td>
	</tr>
    <tr align="center" style="border:1px solid black;" bordercolor="#000000">
    	<td>
		<?php echo $abos; ?>
        </td>
        <td>
        <?php
        echo "<select name=\"$dispo\">";
        foreach($enumList_dispo as $value_dispo) {
            echo "<option ";
			if( $value_dispo == "Oui" ) echo 'selected="selected"';
			echo " value=\"$value_dispo\">$value_dispo</option>";
		}
        echo "</select>";
		?>
		</td>
        <td>
        <?php
        echo "<select name=\"$type\">";
        foreach($enumList_type as $value_type) {
            echo "<option ";
			if( $value_Type == "?" ) echo 'selected="selected"';
			echo " value=\"$value_type\">$value_type</option>";
		}
		echo "</select>";
		?>
        </td>
        <td>
        <?php
        echo "<select name=\"$etat\">";
        foreach($enumList_etat as $value_etat) {
            echo "<option ";
			if( $value_etat == "?" ) echo 'selected="selected"';
			echo " value=\"$value_etat\">$value_etat</option>";
        }
		echo "</select>";
		?>
        </td>
        <td>
        <?php
        echo "<select name=\"$ref\">";
        foreach($enumList_ref as $value_ref) {
            echo "<option ";
			if( $value_ref == "?" ) echo 'selected="selected"';
			echo " value=\"$value_ref\">$value_ref</option>";
        }
		echo "</select>";
		?>
        </td>
        <td>
        <?php
        foreach($enumList_date as $value_date) {
            echo "<TEXTAREA name=\"$date\" value=\"$value_date\" rows=\"2\" cols=\"10\">".date('Y-m-d H:i:s')."</TEXTAREA>";
		}
		?>
        </td>
        <td>
        <?php
        foreach($enumList_commentaire as $value_commentaire) {
            echo "<TEXTAREA name=\"$commentaire\" value=\"$value_commentaire\" rows=\"2\" cols=\"20\">$value_commentaire</TEXTAREA>";
        }
		?>
        </td>
        <td>
        <?php
        foreach($enumList_donateur as $value_donateur) {
            echo "<TEXTAREA name=\"$donateur\" value=\"$value_donateur\" rows=\"2\" cols=\"15\">?</TEXTAREA>";
        }
		?>
        </td>
        <td>
        <?php
		echo "<select name=\"$collection\">";
        foreach($enumList_collection as $value_collection) {
            echo "<option ";
			if( $value_collection == "WDA" ) echo 'selected="selected"';
			echo " value=\"$value_collection\">$value_collection</option>";
		}
		echo "</select>";
        ?>
        </td>
        <td>
        <?php
		echo "<select name=\"$acqui\">";
        foreach($enumList_acqui as $value_acqui) {
            echo "<option ";
			if( $value_acqui == "Don" ) echo 'selected="selected"';
			echo " value=\"$value_acqui\">$value_acqui</option>";
		}
		echo "</select>";
        ?>
        </td>
        <td>
        <?php
		echo "<select name=\"$valorisation\">";
        foreach($enumList_valorisation as $value_valorisation) {
            echo "<option ";
			if( $value_valorisation == "Oui" ) echo 'selected="selected"';
			echo " value=\"$value_valorisation\">$value_valorisation</option>";
		}
		echo "</select>";
        ?>
        </td>
        <td>
        <?php
		echo "<select name=\"$ecart\">";
        foreach($enumList_ecart as $value_ecart) {
            echo "<option ";
			if( $value_ecart == "Non" ) echo 'selected="selected"';
			echo " value=\"$value_ecart\">$value_ecart</option>";
		}
		echo "</select>";
        ?>
        </td>
        <td bgcolor="#999999"><input value="<=- OK !" type="submit" border="0" name="action"></form></td>
	</tr>
</table>

<br /><br />

<table align="center" border="0" width="90%">
	<tr>
    	<td align="center">
		<?
        //test si page est vide vers affichage wda
        if($_GET['page'] == ""){ echo "<br /><br /><br /><div aligne=\"center\"><b>Remplir le formulaire ci-dessus !</b></div><br /><br /><div align=\"Right\"><font size=\"-1\">Connect&eacute; en tant que : <font color=\"#990000\">".$_SERVER["REDIRECT_REMOTE_USER"]."</font></font></div>"; }
        
        //test page non vide et existante
        if (file_exists($pageincss)) { include"$pageincss"; }
        ?>
        </td>
	</tr>
</table>


invent-envoi.php :
<?php

include 'invent-data.php';

// Passage de la mise en variable compatible PHP5
$dispo = $_POST['Dispo'];
$type = $_POST['Type'];
$etat = $_POST['Etat'];
$ref = $_POST['Ref'];
$date = $_POST['Date'];
$commentaire = $_POST['Commentaire'];
$donateur = $_POST['Donateur'];
$collection = $_POST['Collection'];
$acqui = $_POST['Acqui'];
$valorisation = $_POST['Valorisation'];
$ecart = $_POST['Ecart'];
// Debug
//echo $type;
//echo $table;
// Fin de mise en variable PHP5

$connexion = mysql_connect("$chemin_db" , "$login" , "$pass");
$sql = "SELECT * FROM $table";
$combien = mysql_db_query($database, $sql, $connexion);
$abo = mysql_num_rows($combien);
$abos = $abo+1;

mysql_select_db($database , $connexion);
$sqlcheck = "SELECT * FROM $table where Type='$type' and Ref='$ref' and Commentaire='$commentaire'";
$result = mysql_db_query($database, $sqlcheck, $connexion);
$compte_lignes = mysql_num_rows($result);
if($compte_lignes == 1):
	?>
		<b>Le lot "<font color="#CC0000"><? echo $type; ?></font> <font color="#CC0000"><? echo $etat; ?>"</font> donn&eacute; par "<font color="#CC0000"><? echo $donateur; ?></font>" et r&eacute;f&eacute;ren&ccedil;&eacute; par "<font color="#CC0000"><? echo $ref; ?></font>" pour la collection "<font color="#CC0000"><? echo $collection; ?></font>" est d&eacute;j&agrave; inscrite dans la base '<font color="#CC0000"><? echo $table; ?></font>' !</b><br /><br />
		<strong>R&eacute;-&eacute;ssayez SvP !</strong><br /><br /><br />
		<a href="http://wda-fr.org"><img alt="WDA." src="/pict/wda.gif" border="0"></a><br /></p></div>
	<?php
else:

// Contenu et traitement

// Insertion SQL
$sql2 = "INSERT INTO $table (Dispo, Type, Etat, Ref, Date, Commentaire, Donateur, Collection, Acqui, Valorisation, Ecart) VALUES ('$dispo','$type','$etat','$ref','$date','$commentaire','$donateur','$collection','$acqui','$valorisation','$ecart')";
mysql_query($sql2);
?>
<div class="index">
<p>Le lot "<font color="#CC0000"><? echo $type; ?></font> <font color="#CC0000"><? echo $etat; ?></font>" donn&eacute; par "<font color="#CC0000"><? echo $donateur; ?></font>" et r&eacute;f&eacute;ren&ccedil;&eacute; par "<font color="#CC0000"><? echo $ref; ?></font>" pour la collection "<font color="#CC0000"><? echo $collection; ?></font>" est inscrit &agrave; pr&eacute;sent dans la base '<font color="#CC0000"><? echo $table; ?></font>'.<br />
Nombre de lots inventori&eacute; &agrave;s ce jour : <b><font color="#CC0000"><? echo $abos ?></font></b><br /><br />Merci !<br /><br />
<a href="saisie.php"><strong>-=> Nouvelle insertion <=-</strong></a><br /></p></div>

<?php
endif;

mysql_close($connexion);

include 'invent-lst.php';
?>


Et la troisième page qui liste le contenu :
invent-lst.php :
<style type="text/css">
	.couleur1 {
		background-color: #F7F7F7;
	}
	
	.couleur2 {
		background-color: #D1EDC5;
	}
	.couleur3 {
		background-color: #F66;
	}
</style>

<?php

include 'invent-data.php';

$connexion = mysql_connect("$chemin_db", "$login", "$pass");
$sql = "SELECT * FROM $table";
$combien = mysql_db_query($database, $sql, $connexion);
$abo = mysql_num_rows($combien);
$abos = $abo+1;
$id = "Id";
$dispo = "Dispo";
$type = "Type";
$etat = "Etat";
$ref = "Ref";
$date = "Date";
$commentaire = "Commentaire";
$donateur = "Donateur";
$collection = "Collection";
$acqui = "Acqui";
$valorisation = "Valorisation";
$ecart = "Ecart";

$pageincss = $_GET[page].".php";

// Moteur :

$select = "SELECT * FROM $table WHERE `Dispo` <> 'Non' ORDER BY $id"; // Recherche des catégories APRES verification de l'inventaire
$result = mysql_query($select) or die ('Erreur : '.mysql_error() );
$req = mysql_query($select) or die('Erreur SQL !<br />'.$select.'<br />'.mysql_error());
?>

<div align="center"><font size="+1">Inventaire en date du : </font><font color="#FF0000"><strong><? echo date('Y-m-d'); ?></strong></font></div><br />

<table align="center" style="border:1px solid black;" bordercolor="#000000">
	<tr align="center" style="border:1px solid black;" bordercolor="#000000" bgcolor="#CCCCCC">
    	<td><strong>ID</strong></td>
        <td><strong>Dispo.</strong></td>
        <td><strong>Type</strong></td>
        <td><strong>Etat</strong></td>
        <td><strong>Agent</strong></td>
        <td><strong>Date</strong></td>
        <td><strong>Commentaire</strong></td>
        <td><strong>Donateur</strong></td>
        <td><strong>Collection</strong></td>
        <td><strong>Acqui.</strong></td>
        <td><strong>Valorisation</strong></td>
        <td><strong>Ecart</strong></td>
        <td></td>
	</tr>
	<?php
    // On fait une boucle qui va faire un tour pour chaque enregistrement
    $i = 0;
    while($data = mysql_fetch_assoc($req))
        {
		?>
        <tr align="center" style="border:1px solid black;" bordercolor="#000000" <?php if($data['Ecart'] == "Oui") { echo "class=\"couleur3\""; $i = (($i++%2)+1); } else { echo "class=\"couleur".(($i++%2)+1)."\""; } ?>>
            <td><?php echo htmlspecialchars($data['Id']); ?></td>
            <td><?php echo htmlspecialchars($data['Dispo']); ?></td>
            <td><?php echo htmlspecialchars($data['Type']); ?></td>
            <td><?php echo htmlspecialchars($data['Etat']); ?></td>
            <td><?php echo htmlspecialchars($data['Ref']); ?></td>
            <td><?php echo htmlspecialchars($data['Date']); ?></td>
            <td align="left"><?php echo htmlspecialchars($data['Commentaire']); ?></td>
            <td><?php echo htmlspecialchars($data['Donateur']); ?></td>
            <td><?php echo htmlspecialchars($data['Collection']); ?></td>
            <td><?php if($data['Acqui'] == "Achat") { echo "<font color=\"#990000\">".htmlspecialchars($data['Acqui'])."</font>"; } else { echo htmlspecialchars($data['Acqui']); } ?></td>
            <td><?php if($data['Valorisation'] == "Oui") { echo "<img src=\"http://wda-fr.org/test/SQL/Destock/dollars.png\" title=\"Oui\" border=\"0\""; } else { echo htmlspecialchars($data['Valorisation']); } ?></td>
            <td><?php echo htmlspecialchars($data['Ecart']); ?></td>
            <td><?php echo "<a href=\"modif.php?idFiche=".$data['Id']."\">Modifier</a>"; ?></td>
        </tr>
		<?php 
        } 
    	?>
	<tr>
    	<td colspan="10" align="right"><em>Nombre d'enrengistrements : <font color="#FF0000"><strong><? echo $abo; ?></strong></font> !</em></td>
</table>

<br /><br />

<?php
mysql_close($connexion);
?>


Bon, je sais, c'est moche, redondant et loin d'être optimisé, mais, pour ma défense, prenez juste en considération que je suis un gros newbie. Smiley smile

Mes questions :
1/ Le code est-il réellement immonde ? Si oui, comment l'optimiser ?
2/ Je souhaite y rajouter la possibilité via invent-lst.php de supprimer un enregistrement (ou tout du moins modifier le contenu du champ 'Dispo'. de 'Oui' à 'Non') juste en cliquant sur un lien 'Supprimer' à chaque fin de ligne du listing de invent-lst.php ou, au mieux, de pouvoir ré-éditer la fiche via saisie.php ou une nouvelle page nommée modif.php (tests en cours actuellement comme vous pouvez le voir dans le code). Mais je n'arrive pas à grand chose car les champs ne prennent pas les bonnes variables... Smiley decu Et vu le bordel de l'ensemble, je me dis qu'il faudrait peut-être commencer par faire un peu de ménage.
3/ Question subsidiaire : On me parle d'une évolution à venir du PHP en PDO (?!?), et du coup, je me demande si cela ne peut pas être initié maintenant, mais vu déjà que je ne connais rien au PHP (voir l'ampleur des dégâts ci-haut), est-ce vraiment raisonnable, surtout en se basant sur le concept que je suis hébergé chez 1and1 qui sont un peu en retard généralement ?

Bref, tout avis bienvenu Smiley smile

A vous lire,
Modifié par Casio (24 Jul 2013 - 20:55)
a écrit :

1/ Le code est-il réellement immonde ? Si oui, comment l'optimiser ?


Immonde c'était le palier avant, et même encore avant...

Comment l'optimiser ? Faut juste comprendre que les taches répétitives, en commençant par le copier/coller sont à confier à l'ordinateur.
jb_gfx a écrit :
(...)
Immonde c'était le palier avant, et même encore avant...
(...)

Me voici rassuré, heureusement donc que ce n'est pas mon métier.
Ceci mis à part, et ma fierté rengainée ?
Smiley cligne
Bonjour,
Difficile de t'aider, même en te consacrant deux trois heures Smiley decu
Je te conseilles de relire ce code et de nous questionner sur l'optimisation de tel ou tel morceau de ton code, comprends bien que tout le monde est bénévole ici, mais il y a des limites... Smiley ohwell

par exemple pourquoi ces MySQL alors que tu devrais tout obtenir en une seule requête ...