上下文 :
我正在使用 php 语言在Dolibarr 软件上开发一个新模块,我需要你的帮助,因为自 2 天以来我没有克服解决我的问题。
过程:
我创建了一个非常简单的 php 表单,只有 2 个字段:(lastname
法语中的“nom”)和firstname
(法语中的“prénom”)。我填写我的表格,然后我提交它,我应该将我的对象保存到我的 MySQL 数据库中。
问题 :
我得到一个空白页,并且没有任何对象保存到我的数据库中。
文件:
根据新表的第一个:
#llx_moduletest_myobject.sql
CREATE TABLE llx_moduletest_myobject(
-- BEGIN MODULEBUILDER FIELDS
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(255) NOT NULL,
prenom VARCHAR(255) NOT NULL
-- END MODULEBUILDER FIELDS
) ENGINE=innodb;
第二个对应于 action 和 view :
#card.php
<?php
// Load traductions files requiredby by page
$langs->loadLangs(array("moduletest@moduletest","other"));
// Get parameters
$id = GETPOST('id', 'int');
$ref = GETPOST('ref', 'alpha');
$action = GETPOST('action', 'alpha');
$cancel = GETPOST('cancel', 'aZ09');
$backtopage = GETPOST('backtopage', 'alpha');
// Initialize technical objects
$object=new MyObject($db);
/*
* Actions
*
* Put here all code to do according to value of "action" parameter
*/
// If create a request
if ($action == 'create')
{
$object = new FormFile($db);
$db->begin();
$nom = GETPOST('nom');
$prenom = GETPOST('prenom');
// If no name
if (empty($nom))
{
setEventMessages($langs->trans("Pas de nom"), null, 'errors');
$error++;
$action='create';
}
// If no firstname
if (empty($prenom))
{
setEventMessages($langs->trans("Pas de prénom"), null, 'errors');
$error++;
$action='create';
}
$result = 0;
if (! $error)
{
$object->nom = $nom;
$object->prenom = $prenom;
$result = $object->create($user); //return int
if ($result <= 0)
{
setEventMessages($object->errors, 'errors');
$error++;
}
}
// If no SQL error we redirect to the request card
if (! $error)
{
print $db->commit();
$db->commit();
header("Location: ".$_SERVER['PHP_SELF'].'?id='.$id);
exit;
}
else
{
$db->rollback();
}
}
/* ************************
View
*********************** */
$form=new Form($db);
$formfile=new FormFile($db);
llxHeader('', $langs->trans('Formulaire de test'));
// Part to create
if ($action == 'create')
{
// Formulaire de test
print load_fiche_titre($langs->trans('Formulaire de test'), '', 'title_hrm.png');
// Formulaire de test
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'" onsubmit="return valider()" name="Formulaire de test">'."\n";
print '<input type="hidden" name="action" value="create" />'."\n";
dol_fiche_head();
print '<table class="border" width="100%">';
print '<tbody>';
// Nom
print '<tr>';
print '<td class="fieldrequired">'.$langs->trans("Nom").'</td>';
print '<td>';
print '<input type="text" name="nom" value="'.$object->nom.'">';
print '</td></tr>';
// Prenom
print '<tr>';
print '<td class="fieldrequired">'.$langs->trans("Prenom").'</td>';
print '<td>';
print '<input type="text" name="prenom" value="'.$object->prenom.'">';
print '</td></tr>';
print '</tbody>';
print '</table>';
dol_fiche_end();
print '<div class="center">';
print '<input type="submit" value="'.$langs->trans("Valider le formulaire").'" name="bouton" class="button">';
print ' ';
print '<input type="button" value="'.$langs->trans("Cancel").'" class="button" onclick="history.go(-1)">';
print '</div>';
print '</form>'."\n";
}
// End of page
llxFooter();
$db->close();
我有一个create()
功能:$result = $object->create($user); //return int
此函数允许在我的数据库中创建对象:
#moduletestmyobject.class.php
function create($user, $notrigger=0)
{
global $conf, $langs;
$error=0;
// Clean parameters
if (isset($this->prop1)) $this->prop1=trim($this->prop1);
if (isset($this->prop2)) $this->prop2=trim($this->prop2);
// Check parameters
// Put here code to add control on parameters values
// Insert request
$sql = "INSERT INTO ".MAIN_DB_PREFIX."moduletest_myobject(";
$sql.= " field1,";
$sql.= " field2";
$sql.= ") VALUES (";
$sql.= " '".$this->prop1."',";
$sql.= " '".$this->prop2."'";
$sql.= ")";
$this->db->begin();
dol_syslog(get_class($this)."::create sql=".$sql, LOG_DEBUG);
$resql=$this->db->query($sql);
if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
if (! $error)
{
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."moduletest_myobject");
}
// Commit or rollback
if ($error)
{
foreach($this->errors as $errmsg)
{
dol_syslog(get_class($this)."::create ".$errmsg, LOG_ERR);
$this->error.=($this->error?', '.$errmsg:$errmsg);
}
$this->db->rollback();
return -1*$error;
}
else
{
$this->db->commit();
return $this->id;
}
}
我在 apache2 日志中遇到了这个问题:
Uncaught Error: Call to undefined method FormFile::create()