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
Zou dit kunnen komen doordat "file" een gereserveerd woord is ?
@Pipo Clown. Ik maak heel vaak gebruik van file, zonder enig probleem. Heb een andere naa geprobeerd maar zonder succes

@Frank Nietbelangrijk Ik heb !empty() vervangen door isset() maar zonder resultaat

@Thomas van den Heuvel. Waar denk je dat ik het beste de VAR_DUMP kan plaatsen?
Doe maar boven

if(!isset($_FILES['file']))


print_r($_FILES)
Hoi Frank. Ik heb het laatste gedeelte van de action op de volgende wijze aangepast

		if(!isset($_FILES['file']))
		{
			print_r($_FILES);
			if ( is_uploaded_file($_FILES['file']['tmp_name']) )
			{
				$this->create_image($_FILES['file']['tmp_name'], $new_photo_path , 1000, 400);
				$this->page->add_news_photo($news_id,$new_name);
				$insert = $this->page->add_news_item($language_abbr_en,$news_title_en,$news_content_en);
			}
		}


Maar ik blijf die undefined indexen houden
Heb je gecontroleerd of het uploaden van bestanden is toegestaan?

Wat staat er op je scherm als je $_FILES dumpt?
Hoi Thomas.

Ja het uploaden is toegestaan!

Om het te testen heb ik vervolgens de var_dump aan de pagina waar het formulier in staat toegevoegd:

    <?php
	if(isset($_FILES['file']))
	{
		var_dump ($_FILES['file']['error']);
	}
	?>


en de de action tijdelijk uit het form gehaald. Maar als ik het form submit gebeurt er niets?
>> ... en de de action tijdelijk uit het form gehaald.

Waarom? Laat het eens gewoon zoals het was.

Zet vervolgens deze 2 regels even helemaal bovenaan in je functie:

<?php
public function add_news_itemAction()
{
var_dump($_FILES);
exit;

?>
Ozzie PHP op 14/06/2015 20:29:45

>> ... en de de action tijdelijk uit het form gehaald.

Waarom? Laat het eens gewoon zoals het was.

Zet vervolgens deze 2 regels even helemaal bovenaan in je functie:

<?php
public function add_news_itemAction()
{
var_dump($_FILES);
exit;

?>

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


Edit heb alle andere velden even uit het form gehaald maar dat had geen invloed. De array blijft leeg

Reageren