我试图创建一些已经使用表单发布到控制器的输入数组,但是当我尝试将该数组发送到我的视图时,我得到错误未初始化的字符串偏移量:5当我尝试使用$时数组[5],我将把我的代码放在下面以便澄清。我正在使用Kohana btw。
控制器:
<?php
defined('SYSPATH') or die('No direct script access.');
class Controller_Handmatigconvert extends Controller_Base_Main {
public function action_index() {
$this->template->content = View::factory('handmatigconvert')
->bind('agenda',$agenda);
$this->template->title = 'iCalender generator';
//inputs that have been posted on form
$agenda=array($_POST['agendanaam'],$_POST['agendaomschrijving'],$_POST['onderdeelnaam'],$_POST['onderdeelomschrijving'],$_POST['begintijd'],$_POST['eindtijd'],$_POST['locatie'],$_POST['samenvatting']);
var_dump($agenda[5]);
}
}
查看:
<?php
//Converter van database gegevens naar .ics bestand
//zodat je de evenementen uit de database op je smartphone's agenda kunt bekijken
//Wanneer het script succcesvol gelopen heeft, wordt een er een ics bestand gegenereert.
//dit bestand kun je plaatsen op de webhost, zodat je via je telefoon alleen de url ervan hoeft in te voeren
//bijvoorbeeld: webcal://www.kj.nu/Agenda.ics
//variablen
echo $agenda[1];
$uniekid = "";
$bestandsnaam = "";
$bestandspad = "";
$tijdzone = "Europe/Amsterdam";
//functie class includen
require_once('assets/php/iCalcreator.class.php'); //class requiren
//tijdzone bepalen
$config = array( "unique_id" => "".$uniekid."", // Unieke ID zetten
// Deze wordt gebruikt wanneer er geen ID bij een event is meegegeven
"TZID" => $tijdzone ); // TZID de waarde van de timezone variable geven
//nieuwe agenda aanmaken
$v = new vcalendar( $config ); // Nieuw agenda object aangeven
$v->setProperty( "method", "PUBLISH" ); // required of some calendar software
$v->setProperty( "x-wr-calname", "Agenda" ); // Naam van agenda aangeven
$v->setProperty( "X-WR-CALDESC", "Agenda omschrijving" ); // Omschrijving van agenda aange
$v->setProperty( "X-WR-TIMEZONE", $tijdzone ); // Timezone uit variable zetten(+1 in dit geval)
$xprops = array( "X-LIC-LOCATION" => $tijdzone ); // Locatie aangeven
iCalUtilityFunctions::createTimezone( $v, $tijdzone, $xprops ); // create timezone component(-s) opt. 1
var_dump($agenda);
//nieuw onderdeel in agenda aanmaken
$vevent = & $v->newComponent( "vevent" ); // Nieuw onderdeel object aanmaken
foreach ( $agenda as $agenda){
$begintijd = $agenda[5];
$eindtijd = $agenda[4];
//converten van tijd string naar aparte onderdelen indien nodig
//dit doen we doormiddel van een substring, de manier waarop substring gebruikt kan verschillen ivm de indeling van de tijdstring(in ons geval YYYY-MM-DD: HH-MM)
$bjaar = substr($eindtijd, 0, 4); //0,4 houdt in dat de eerste 4 tekens van de string worden gescheden, YYYY in dit geval
$bmaand = substr($eindtijd, 6, 8); //6,8 houdt in dat de 6 tm 8 tekens van de string worden gescheden, MM in dit geval
$bdag = substr($eindtijd, 10, 12); //10,12 houdt in dat de 10 tm 12 tekens van de string worden gescheden, DD in dit geval
$buur = substr($eindtijd, 13, 14); //13,14 houdt in dat de 13 tm 14 tekens van de string worden gescheden, HH in dit geval
$bminuut = substr($eindtijd, 16, 18); //16,18 houdt in dat de 16 tm 18 tekens van de string worden gescheden, MM in dit geval
//$btotaletijd = $bjaar + $bmaand + $bdag + $buur + $bminuut; alle delen weer bij elkaar
$sjaar = substr($begintijd, 0, 4); //0,4 houdt in dat de eerste 4 tekens van de string worden gescheden, YYYY in dit geval
$smaand = substr($begintijd, 6, 8); //6,8 houdt in dat de 6 tm 8 tekens van de string worden gescheden, MM in dit geval
$sdag = substr($begintijd, 10, 12); //10,12 houdt in dat de 10 tm 12 tekens van de string worden gescheden, DD in dit geval
$suur = substr($begintijd, 13, 14); //13,14 houdt in dat de 13 tm 14 tekens van de string worden gescheden, HH in dit geval
$sminuut = substr($begintijd, 16, 18); //16,18 houdt in dat de 16 tm 18 tekens van de string worden gescheden, MM in dit geval
//start van evenement aangeven
$vevent->setProperty( "dtstart", array( "year" => $sjaar
, "month" => $smaand
, "day" => $sdag
, "hour" => $suur
, "min" => $sminuut
, "sec" => "00" ));
//einde van evenement aangeven
$vevent->setProperty( "dtend", array( "year" => $bjaar
, "month" => $bmaand
, "day" => $bdag
, "hour" => $buur
, "min" => $bminuut
, "sec" => "00" ));
$vevent->setProperty( "LOCATION", $onderdelen->location ); // Naam van locatie – hoofdletter gevoelig
$vevent->setProperty( "summary", $onderdelen->summary ); //samenvatting
$vevent->setProperty( "description", $onderdelen->description ); //omschrijving van onderdeel
$vevent->setProperty( "comment", $onderdelen->comment ); //comment aan onderdeel toevoegen
$vevent->setProperty( "attendee", $onderdelen->attendee ); //andere personen in dit onderdeel
};
//tijdzone toevoegen aan .ics bestand
iCalUtilityFunctions::createTimezone( $v, $tijdzone, $xprops);
//bestandsdirectory bepalen en .ics opslaan
$config = array("filename" => "".$agendanaam.".ics" );
$v->setConfig( $config ); // set directory and file name
$v->saveCalendar();
//url van de website ophalen en http:// vervangen door webcal://
$base_url = URL::site(NULL, TRUE);
//base url geeft een site met http:// ervoor, dit vervangen we door webcal://
$new_string = str_replace("http://", 'webcal://', $base_url);
$URL = "".$new_string."/".$agendanaam.".ics";
echo "Voor de volgende URL in bij uw agenda App";
echo "<html><br></html>";
echo $URL;
?>
Vardump
array(8) { [0]=> string(4) "Test" [1]=> string(4) "Test" [2]=> string(4) "Test" [3]=> string(4) "Test" [4]=> string(16) "2014-01-09:19:00" [5]=> string(16) "2014-01-09:21:00" [6]=> string(4) "Test" [7]=> string(4) "Test" }
答案 0 :(得分:0)
这会破坏你的阵列$agenda
:
foreach ( $agenda as $agenda){
}
将值重命名为新名称:
foreach ($agenda as $value) {
}
答案 1 :(得分:0)
你的议程不是你应该迭代的数组。删除foreach
循环,然后使用循环体中的代码处理$agenda
一次。
我还建议您重新设计控制器,让它将$agenda
设置为关联数组或对象。数字数组应该用于统一数据,关联数组应该用于非线性相关数据的集合。
答案 2 :(得分:0)
我可能错了但不行:
foreach ( $agenda as $agenda){
覆盖第一个$ agenda var,所以在循环$议程实际上是$ _POST ['begintijd']使$ agenda [5]不再指向你的期望。