2013-06-01 5 views
1

Dans un script PHP/MySQL, je suis en train de lire les fichiers XLS et de les vérifier en fonction d'un ensemble de règles et de messages d'erreur afin qu'ils sachent quoi corriger. La plupart des règles sont communes à de nombreuses colonnes. La seule chose qui change dans le message d'erreur est le nom de la colonne ou la valeur avec laquelle elle doit être vérifiée. Au lieu de coder en dur les messages en PHP, je veux les extraire de la table mysql error_messages mais aussi pouvoir les changer en fonction de chaque colonne.Comment créer des chaînes dynamiques à partir de données statiques

Exemple: Erreur1: "Nom de la colonne" contient des caractères invalides. " Erreur2: "Nom de colonne 'contient des caractères invalides."

Si je stocke la colonne XXX contient des caractères invalides. Dans la table mysql error_messages, comment l'afficher en changeant seulement XXX à chaque nom de colonne?

Je pourrais utiliser une fonction PHP qui remplace XXX par n'importe quelle chaîne et qui envoie le message mais est-ce la meilleure solution? Des moyens plus intelligents?

Répondre

0

Store dans votre base de données:

colonne '% s' contient les caractères non valides.

et utiliser sprint()

$message = "Column '%s' contains invalid chars."; 
$display = sprint($message, 'surname'); 
echo $display; 
+0

omg ... bien sûr! Je l'utilise un million de fois par jour pour construire des requêtes, merci Mark. – bikey77

+0

Parfois, les choses sont __too__ aveuglément évidentes :) –

1

Comme vous le trouverez en général lorsque vous posez des questions de conception, il y a plusieurs façons de résoudre ce problème.

Une solution consiste à stocker printf chaînes de -Formatez comme ceci: Column %s contains invalid chars.

Mais vous courez dans la question du stockage des tonnes de données redondantes. Vous pouvez placer toutes les erreurs distinctes dans une autre table, puis stocker les ID dans les chaînes d'erreur de votre table d'origine. Cette approche vous donnerait l'avantage de pouvoir modifier les chaînes d'erreur dans un emplacement et de faire en sorte que la modification se propage automatiquement partout.

Une autre possibilité serait d'utiliser le type MySQL ENUM (doc) et de gérer toutes les impressions en PHP.

Questions connexes