Voor een tweetalige website gebruik in op de pagina waar een nieuws item kan worden togevoegd het volgende formuliers:

    <form action="/admin/add_news_item" method="post" name="news-form" id="news-form" enctype="multipart/form-data">
      <h2><?php echo $heading; ?></h2>
      <p>Use the form below to add a new news item. To add a news item fill out a title and content in Dutch followed by a title and content in English , and choose a photo. When you're don click the <strong>Add news item</strong> button.</p>
      <input name="language_abbr_nl" id="language_abbr_nl" type="hidden" value="nl">
      <fieldset>
        <label>News title (Dutch)&nbsp;<span>*</span></label>
        <input name="news_title_nl" id="news_title_nl" type="text" class="textfield" tabindex="1" required>     
      </fieldset>
      <fieldset >
        <label>News content (Dutch)</label>
        <textarea name="news_content_nl" id="news_content_nl" class="textarea h100" tabindex="2"></textarea> 
      </fieldset>
      <input name="language_abbr_en" id="language_abbr_en" type="hidden" value="en">
      <fieldset>
        <label>News title (English)&nbsp;<span>*</span></label>
        <input name="news_title_en" id="news_title_en" type="text" class="textfield" tabindex="3" required>     
      </fieldset>
      <fieldset >
        <label>News content (English)</label>
        <textarea name="news_content_en" id="news_content_en" class="textarea h100" tabindex="4"></textarea> 
      </fieldset>
      <fieldset>
        <label>News photo&nbsp;&nbsp;<span>(<a href="#" title="The best dimensions for a photo are 1000 x 400 px." class="masterTooltip">?</a>)</span></label>
        <input name="file" id="file" type="file" tabindex="5" required>
      </fieldset>
      <fieldset class="top-margin"> 
        <button type="submit" class="form_button" tabindex="6">Add news item</button>
      </fieldset>
    </form>


De bedoeling van het formulier is dat er eerst een record aan de database tafel (news) word toegevoegd met de Nederlandse waarden (language_abbr_nl,news_title_nl,news_content_nl), gevolgd door een foto die in de tafel news_photos terecht moet komen (news_id, photo) en die geupload moet worden naar een bepaalde folder. Welke weer gevolgd word door de tweede insert in de tafel news, dit keer met de Engelse waarden (language_abbr_en,news_title_en,news_content_en)

Note: door de opbouw van de database heb ik voor beide records slechts 1 foto nodig.

In mijn controller heb ik de volgende actie:


	public function add_news_itemAction()
	{
		$photo_path   = APP_PATH.'/../httpdocs/images/news_photos/';		
		include_once   (APP_PATH.'/helpers/zebra_image.php');
		
		$validextensions        = array("jpeg", "jpg", "png");
		$original_name          = $_FILES['file']['name'];
		$ext                    = explode('.', basename($original_name));
		$file_extension         = strtolower(end($ext));
		$new_name               = md5(uniqid()) . "." . $file_extension; 
		$new_photo_path         = $photo_path . $new_name;
		
		$language_abbr_el = filter_input(INPUT_POST, 'language_abbr_el', FILTER_SANITIZE_STRING);
		$language_abbr_en = filter_input(INPUT_POST, 'language_abbr_en', FILTER_SANITIZE_STRING);		
		$news_title_el    = filter_input(INPUT_POST, 'news_title_el', FILTER_SANITIZE_STRING);
		$news_title_en    = filter_input(INPUT_POST, 'news_title_en', FILTER_SANITIZE_STRING);
		$news_content_el  = filter_input(INPUT_POST, 'news_content_el', FILTER_UNSAFE_RAW);
		$news_content_en  = filter_input(INPUT_POST, 'news_content_en', FILTER_UNSAFE_RAW);
		
		$news_id          = $this->page->add_news_item($language_abbr_el,$news_title_el,$news_content_el);
		
		if(!empty($_FILES['file']))
		
		if ( is_uploaded_file($_FILES['file']['tmp_name']) )
		{
			$this->create_image($_FILES['file']['tmp_name'], $new_photo_path , 1000, 400, ZEBRA_IMAGE_CROP_CENTER);
			$this->page->add_news_photo($news_id,$new_name);
			$insert = $this->page->add_news_item($language_abbr_en,$news_title_en,$news_content_en);
		}
		
	}	


Die volgens mij goed zou moeten zijn. De taal rows gaan inderdaad de database in, maar de insert in de news_photos tafel en de upload werken niet. Ik blijf Undefined Index: file errors krijgen

Wat doe ik hier fout? Alle hulp is van harte welkeom
Die foutmelding die meldt als het goed is ook in welk bestand en op welke regel het fout gaat. Heb je hier al naar gekeken ?

Toevoeging op 14/06/2015 21:55:02:

zet die print_r eens BOVEN de if(!isset($_FILES['file']))
>> Hi Ozzie bedankt voor je reactie. Heb gedaan wat je aanrade en ik krijg een lege array terug. Ik heb geen idee hoe dat kan

Toch even om eventuele misverstanden te voorkomen ... je hebt toch wel daadwerkelijk een bestandje geselecteerd voordat je het formulier ging verzenden?
Ja absoluut. Ik zie het zelfs in devtools op Chrome
Gebruik je een of ander framework?

Zet voor de grap deze regel eens in de (hoofd)index.php file

var_dump($_FILES);
Waarschijnlijk worden de superglobals omgezet naar request object?
>> Waarschijnlijk worden de superglobals omgezet naar request object?

Daar zat ik dus inderdaad ook aan te denken. Maar dan zou hij dus een framework moeten gebruiken.
Ja scherp van je Ozzie. Donald schrijft over een controller dus een framework is aannemelijk.
>> Ja scherp van je Ozzie.

En dat voor de late avond ;-) Over late avond gesproken ... het lijkt erop dat Donald z'n bed heeft opgezocht ...
Ozzie PHP op 14/06/2015 23:41:51

... het lijkt erop dat Donald z'n bed heeft opgezocht ...


Moesten wij straks ook maar doen... (Volgens mij ben jij net zo PHP verslaafs als ik :p)
hehe ... ja af en toe wel ;)

Welterusten alvast.

Reageren