Hallo Chio,
jo, da wird auch wesentlich mehr abgefragt. In der install.php beschränktst du dich auf die reine Ausführung der SQL Befehle:
$database->query("INSERT INTO ".TABLE_PREFIX."search (name,value,extra) VALUES ('module', 'code', '$field_info')");
Wenn hierbei ein Fehler auftritt hast du diesen netten weißen Bildschirm mit den aussagekräftigen Texten vor dir.
Bei der upgrade.php
$thisQuery = "ALTER TABLE ".TABLE_PREFIX."mod_code ADD whatis INT NOT NULL DEFAULT 0";
$oldErrorReporting = error_reporting(0);
$sql_result = $database->query($thisQuery);
error_reporting($oldErrorReporting);
if ($database->is_error()) {
// Fehler beim Einfuegen des Feldes
$upgradeError = true;
$prompt .= sprintf(dl_error_insert_field,'whatis',$database->get_error()); }
else {
// Feld erfolgreich eingefuegt
$prompt .= sprintf(dl_upgrade_insert_field,'whatis'); }
wird zunächst die Standard Fehlermeldung ausgeschaltet, danach der SQL Befehl ausgeführt und die Standard Fehlermeldung wieder eingeschaltet. Wenn bei der Ausführung des SQL Befehl ein Fehler aufgetreten ist ist $database->error() == true und du hast die Möglichkeit dem Anwender eine Fehlermeldung zu zeigen:
$prompt .= sprintf(dl_error_insert_field,'whatis',$database->get_error());
die Konstante dl_error_insert_fie
ld stammt aus der Sprachdatei des DirList Modul, das wird so bei dir nicht funktionieren, die Meldung lautet:
'<p>Beim Einfügen des Feldes "<strong>%s</strong>" ist ein Fehler aufgetreten.</p><p><strong>Fehlermeldung:</strong> %s</p>'
Der erste Platzhalter %s wird durch 'whatis' ersetzt, der zweite enthält die ausführliche MySQL Fehlerbeschreibung. Die Fehlermeldungen sind normalerweise aussagekräftig genug um sofort zu sehen wo der Haken ist...
Mein Code ist meistens umfangreicher, eben weil ich versuche Fehler abzufangen und möglichst sauber abzuhandeln.
Hier habe ich die DirList Konstanten entfernt und die Klarmeldungen eingefügt, ich glaube jetzt wird es klarer:
<?php
/*
WebsiteBaker Project <http://www.websitebaker.org/>
Copyright (C) 2004-2007, Ryan Djurovich
*/
//require('../../config.php');
//require(WB_PATH.'/framework/functions.php');
$database = new database(DB_URL);
// Adding the new field to the database table mod_code
/**
* Upgrade from 0.10 to 0.11
*
* --> add row "sort" for options sorting DirList
*
*/
$prompt = '';
$upgradeError = false;
$thisQuery = "DESCRIBE ".TABLE_PREFIX."mod_code";
$oldErrorReporting = error_reporting(0);
$sql_result = $database->query($thisQuery);
error_reporting($oldErrorReporting);
if ($database->is_error()) {
// Fehlermeldung anzeigen
$upgradeError = true;
$prompt .= sprintf('<p>Die Tabellenbeschreibung konnte nicht ausgelesen werden.</p><p><strong>Fehlermeldung:</strong> %s</p>',$database->get_error()); }
else {
$fields = array();
$searchField = 'whatis';
while (($data = $sql_result->fetchRow())) {
$fields[] = $data["Field"]; }
if (in_array($searchField, $fields)) {
// Spalte bereits vorhanden
$prompt .= sprintf('<p>Das Feld "<strong>%s</strong>" existiert bereits.</p>','whatis'); }
else {
// Tabelle muss ergaenzt werden
$thisQuery = "ALTER TABLE ".TABLE_PREFIX."mod_code ADD whatis INT NOT NULL DEFAULT 0";
$oldErrorReporting = error_reporting(0);
$sql_result = $database->query($thisQuery);
error_reporting($oldErrorReporting);
if ($database->is_error()) {
// Fehler beim Einfuegen des Feldes
$upgradeError = true;
$prompt .= sprintf('<p>Beim Einfügen des Feldes "<strong>%s</strong>" ist ein Fehler aufgetreten.</p><p><strong>Fehlermeldung:</strong> %s</p>','whatis',$database->get_error()); }
else {
// Feld erfolgreich eingefuegt
$prompt .= sprintf('<p>Das Feld "<strong>%s</strong>" wurde in die Tabelle eingefügt.</p>','whatis'); }
}
}
// Ergebnis des Upgrade melden
if ($upgradeError) {
$admin->print_error($prompt); }
else {
$admin->print_success($prompt); }
?>
Ich hoffe, ich habe jetzt nicht noch mehr Verwirrung erzeugt...
Gruß
Ralf