Undefined Index: file
Voor een tweetalige website gebruik in op de pagina waar een nieuws item kan worden togevoegd het volgende formuliers:
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:
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<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) <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) <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 <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>
<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) <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) <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 <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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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);
}
}
{
$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 ?
vervang empty() voor isset()
Dump $_FILES eens. $_FILES['file']['error'] geeft een errorcode terug die je meer vertelt over mogelijke problemen.
Zorg ook dat het uploaden is toegestaan.
Daarnaast zou je ook de veel voorkomende vallen eens kunnen bekijken.
Zorg ook dat het uploaden is toegestaan.
Daarnaast zou je ook de veel voorkomende vallen eens kunnen bekijken.
@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?
@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?
Gewijzigd op 14/06/2015 17:06:40 door Donald Boers
Doe maar boven
if(!isset($_FILES['file']))
print_r($_FILES)
if(!isset($_FILES['file']))
print_r($_FILES)
Hoi Frank. Ik heb het laatste gedeelte van de action op de volgende wijze aangepast
Maar ik blijf die undefined indexen houden
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
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);
}
}
{
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?
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:
en de de action tijdelijk uit het form gehaald. Maar als ik het form submit gebeurt er niets?
Ja het uploaden is toegestaan!
Om het te testen heb ik vervolgens de var_dump aan de pagina waar het formulier in staat toegevoegd:
en de de action tijdelijk uit het form gehaald. Maar als ik het form submit gebeurt er niets?
Gewijzigd op 14/06/2015 20:06:02 door Donald Boers
>> ... 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:
Waarom? Laat het eens gewoon zoals het was.
Zet vervolgens deze 2 regels even helemaal bovenaan in je functie:
Ozzie PHP op 14/06/2015 20:29:45:
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
Gewijzigd op 14/06/2015 21:18:35 door Donald Boers
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']))
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?
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);
Zet voor de grap deze regel eens in de (hoofd)index.php file
var_dump($_FILES);
Waarschijnlijk worden de superglobals omgezet naar request object?
Gewijzigd op 14/06/2015 23:20:58 door Frank Nietbelangrijk
>> 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.
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 ...
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.
Welterusten alvast.




