我正在尝试从URL中提取一些数据并将其存储到我在Moodle中创建的表中,并在Title中显示错误。我的目标是在cursos> curso上提取属性“nome”中的所有值,并将它们放在我的表ecoclipaluno上。 示例链接。构建URL的参数在更改时可以提供更多值来存储。或者更少。
https://clip.unl.pt/sprs?lg=pt&year=2013&uo=97747&srv=rsu&p=1&tp=s&md=3&rs=8145&it=5&it=1030123459
function buildURL($year, $period, $typeperiod,$course)
{
return 'https://clip.unl.pt/sprs?lg=pt&year='.$year.'&uo=97747&srv=rsu&p='.$period.'&tp='.$typeperiod.'&md=3&rs='.$course.'&it=5&it=1030123459';
}
function doRequest_with_FileGetContents($url)
{
return file_get_contents($url);
}
function processXMLforCourse($xmlContent){
$xmlObj= new SimpleXMLElement($xmlContent);
$result=array();
foreach($xmlObj->unidade_curricular->cursos->curso as $curso){
$result[]= $curso->attributes()->nome;
}
return $result;
}
$context=get_context_instance(CONTEXT_COURSE,$courseid);
//$shortname=$course->shortname;
$idnumber=$course->idnumber;
$timecreated=$course->startdate;
$typeperiod='s';
if(date("m",$timecreated) >07 && date("m",$timecreated) <13){
$period='1';
$url=buildURL(date("Y",strtotime('+1 year',$timecreated)),$period,$typeperiod,$idnumber); // 1st semester
}
else{
$period='2';
$url=buildURL(date("Y",$timecreated),$period,$typeperiod,$idnumber); // 2nd semester
}
$content_b=doRequest_with_FileGetContents($url);
$dataClipCourse= processXMLforCourse($content_b);
$DB->insert_record('ecoclipaluno',$dataClipCourse);
从数据操作的Moodle API,方法insert_record有4个参数,最后2个是可选的,但它们都没有指定字段。我想将$ dataClipCourse插入到字段coursename中。我该怎么办呢?
array(8){[0] =&gt; object(SimpleXMLElement)#37(1){[0] =&gt; string(54)“Licenciatura emEngenhariaInformática(Tronco comum)”} 1 =&gt; object(SimpleXMLElement)#36(1){[0] =&gt; string(38)“MestradoemMatemáticaapaplicações”} 2 =&gt; object(SimpleXMLElement)#44(1){[0] =&gt; string(92)“MestradoemMatemáticaapaplicações,EspecializaçãoemÁlgebra,LógicaeComputação”} 3 =&gt; object(SimpleXMLElement)#45(1){[0] =&gt; string(82)“MestradoemMatemáticaapaplicações,EspecializaçãoemMatemáticaFinanceira”} [4] =&gt; object(SimpleXMLElement)#46(1){[0] =&gt; string(104)“MestradoemMatemáticaeElicações,EspecializaçãoenanáliseNuméricaequaçõesDiferenciais”} [5] =&gt; object(SimpleXMLElement)#47(1){[0] =&gt; string(114)“MestradoemMatemáticaePlicççes - EspecializaçãoemAtuariado,EstatísticaeInvestigaçãoOperaracional”} [6] =&gt; object(SimpleXMLElement)#48(1){[0] =&gt; string(74)“Licenciatura emEngenhariaInformática,PerfildeCiênciasdaEngenharia”} [7] =&gt; object(SimpleXMLElement)#49(1){[0] =&gt; string(72)“Licenciatura emEngenhariaInformática,PerfildeInformáticaAplicada”}}
编辑:
答案 0 :(得分:2)
错误消息表示在删除$ dataClipCourse中与表格中的字段名称不匹配的所有成员变量后,没有剩余数据可供插入。
我建议您拨打&#39; var_dump($ dataClipCourse);&#39;要查看正在插入的数据,请将其与表格的定义进行比较&#39; mdl_ecoclipaluno&#39;在你的数据库中。
答案 1 :(得分:2)
insert_record()的第二个参数需要是一个对象而不是一个数组,并将字段名称作为属性。例如:
$result = new stdClass();
$result->codigo = xxx;
$result->qualificacao_atribuida = xxx;
http://docs.moodle.org/dev/Data_manipulation_API#Inserting_Records
编辑:我刚注意到processXMLforCourse()函数返回一个名字数组 - 所以可能是这样的$dataClipCourse= processXMLforCourse($content_b);
foreach ($dataClipCourse as $nome) {
$data = new stdClass();
$data->nome = $nome->__toString();
$DB->insert_record('ecoclipaluno', $data);
}