Undefined Index: file
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 ?
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.
Dump $_FILES eens. $_FILES['file']['error'] geeft een Zorg ook dat het uploaden is toegestaan.
Daarnaast zou je ook de veel voorkomende vallen eens kunnen bekijken.
@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
if(!isset($_FILES['file']))
print_r($_FILES)
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
Wat staat er op je scherm als je $_FILES dumpt?
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
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
Toevoeging op 14/06/2015 21:55:02:
zet die print_r eens BOVEN de if(!isset($_FILES['file']))
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
Zet voor de grap deze regel eens in de (hoofd)index.php file
var_dump($_FILES);
Gewijzigd op 14/06/2015 23:20:58 door Frank Nietbelangrijk
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.
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)
Welterusten alvast.