Im trying to make an array of some inputs that have been posted to the controller with a form, but when i try to send that array to my view, i get the error Uninitialized string offset: 5 when i try use the $array[5], i will put my code beneath for clarification. I'm using Kohana btw.
Controller:
<?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]);
}
}
View:
<?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" }
This destroys your array $agenda
:
foreach ( $agenda as $agenda){
}
Rename the value to a new name:
foreach ($agenda as $value) {
}
Your agenda isn't an array you should be iterating over. Remove the foreach
loop, and just process $agenda
once with the code you have in the body of the loop.
I also suggest that you redesign your controller, to have it set $agenda
to an associative array or object. Numeric arrays should be used for uniform data, associative arrays should be used for collections of related data that isn't linear.
I could be wrong but doesn't the line:
foreach ( $agenda as $agenda){
Overwrite the first $agenda var so inside the loop $agenda is actually $_POST['begintijd'] making $agenda[5] no longer point to what you expect.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.