未初始化的字符串偏移量:5

时间:2014-01-09 10:59:26

标签: php html kohana

我试图创建一些已经使用表单发布到控制器的输入数组,但是当我尝试将该数组发送到我的视图时,我得到错误未初始化的字符串偏移量: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" }

3 个答案:

答案 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]不再指向你的期望。