Jump to content

I'm seriously a PHP noob...3 problems. LONG read. Makes NO sense. PHP driving me nuts.


gottalearnphp

Recommended Posts

Hi everyone. I'm completely new to PHP. I've been trying to teach myself to code with it and learn as much as I can for the past few days because it'll definitely come in handy. So far, everything I've learned is just from articles and videos.

 

Anyway, let's skip the boring stuff.

 

For literally the whole day today, I've been trying to figure out what the heck is wrong with a script I'm working with. I didn't code it myself. I'm pretty much just modifying it to fit my needs from the generic "template" it comes in.

 

 

So here's the issue:

 

The script is basically used to run a website with user generated content. Users can upload images and write about them. One file of the script deals with the page where the user writes and submits his/her content. Before, I had no issues. I could write a title, a few sentences, upload an image and submit it to the server. Now, seemingly out of nowhere, I'm getting problems everywhere.

 

Here are the issues:

 

1. After I fill out the form and hit submit, the page doesn't redirect to my content.

2. As soon as I hit the submit button, the page goes blank (white screen) and gets stuck on mydomain.com/submit (which is the same page where I filled out the form)

3. Along with the white screen, I'm getting the following error on top of it:

 

Notice: Undefined index: name in .../public_html/include/p-page-ask.php on line 126

 

 

 

I've spent the last 12 hours trying to fix this. For issue 3, I've read that you can use the "isset" function to fix it. But I have no idea how to code that into it. I tried different variations, but none worked to make it go away. For issue 2, I'm guessing this is a fatal php error? I have no idea what's causing it. If I view source, I just get a blank page. For issue 1, I'm guessing this has to do with issue 2 halting the page from redirecting? I'm pretty sure 2 and 3 are different errors because I've read that even if 3 occurs, the page still loads.

 

 

I've turned on all the error reporting and display functions in my php.ini file. I made sure that the server is using that particular file with phpinfo(). (Although I didn't restart my server. I have no idea how to. I'm on a shared environment). After making these changes, I still don't see any additional errors, just the notice on a blank page.

 

I've looked through the code for syntax errors, but couldn't find any.

 

I've even installed xampp and made a test environment. I read through the documentation and watched tutorials on YouTube to set it up. (I've had absolutely 0 experience with this kind of stuff). I downloaded all the exact files from my online server into my localhost environment. Funny enough, it works just fine on my machine. It doesn't even throw errors locally. However, it doesn't work online. What the heck is going on?

 

The only differences I can think of between the two environments are the php versions and sql database versions (xampp is newer)...but I don't know if that really makes a difference because the script USED to work on my server, so it must be compatible with the set versions.

 

I've been editing the files in the script for quite a while now. I know when I first started, the uploads would work just fine. Then I didn't upload for a while because I already tested it out and knew it worked, so I just continued working on the script. I may have modified something that's now causing the errors. But then wouldn't that cause the localhost environment to fail too? If the files are exactly the same, how could one fail to work? That makes no sense at all. I'm looking at this code lost and hopeless. I'm getting sad.

 

 

 

If ANYONE has any suggestions on fixing this, PLEASE let me know. I don't know what to do anymore.

 

If you need me to upload any of the other files, just ask.

 

 

Here are the error logs from the server:

 

PHP Notice: Undefined index: name in .../public_html/include/p-page-ask.php on line 126, referer:mydomain.com/submit 

...public_html/submit: No such file or directory
WARNING: .../public_html/submit: Can't access file

 

 

 

 

Here's the code for the page with the notice:

 

<?php



	if (!defined('QA_VERSION')) { // don't allow this page to be requested directly from browser
		header('Location: ../');
		exit;
	}


	require_once QA_INCLUDE_DIR.'p-app-format.php';
	require_once QA_INCLUDE_DIR.'p-app-limits.php';
	require_once QA_INCLUDE_DIR.'p-db-selects.php';
	require_once QA_INCLUDE_DIR.'p-util-sort.php';


//	Check whether this is a follow-on question and get some info we need from the database

	$in=array();
	
	$followpostid=qa_get('follow');
	$in['categoryid']=qa_get_category_field_value('category');
	if (!isset($in['categoryid']))
		$in['categoryid']=qa_get('cat');
	$userid=qa_get_logged_in_userid();
	
	list($categories, $followanswer, $completetags)=qa_db_select_with_pending(
		qa_db_category_nav_selectspec($in['categoryid'], true),
		isset($followpostid) ? qa_db_full_post_selectspec($userid, $followpostid) : null,
		qa_db_popular_tags_selectspec(0, QA_DB_RETRIEVE_COMPLETE_TAGS)
	);
	
	if (!isset($categories[$in['categoryid']]))
		$in['categoryid']=null;
	
	if (@$followanswer['basetype']!='A')
		$followanswer=null;
		

//	Check for permission error

	$permiterror=qa_user_maximum_permit_error('permit_post_q', QA_LIMIT_QUESTIONS);

	if ($permiterror) {
		$qa_content=qa_content_prepare();
		
		// The 'approve', 'login', 'confirm', 'limit', 'userblock', 'ipblock' permission errors are reported to the user here
		// The other option ('level') prevents the menu option being shown, in qa_content_prepare(...)

		switch ($permiterror) {
			case 'login':
				$qa_content['error']=qa_insert_login_links(qa_lang_html('question/ask_must_login'), qa_request(), isset($followpostid) ? array('follow' => $followpostid) : null);
				break;
				
			case 'confirm':
				$qa_content['error']=qa_insert_login_links(qa_lang_html('question/ask_must_confirm'), qa_request(), isset($followpostid) ? array('follow' => $followpostid) : null);
				break;
				
			case 'limit':
				$qa_content['error']=qa_lang_html('question/ask_limit');
				break;
				
			case 'approve':
				$qa_content['error']=qa_lang_html('question/ask_must_be_approved');
				break;
				
			default:
				$qa_content['error']=qa_lang_html('users/no_permission');
				break;
		}
		
		return $qa_content;
	}
	

//	Process input
	
	$captchareason=qa_user_captcha_reason();
	
	$in['title']=qa_post_text('title'); // allow title and tags to be posted by an external form
	$in['extra']=qa_opt('extra_field_active') ? qa_post_text('extra') : null;
	$in['tags']=qa_get_tags_field_value('tags');

	if (qa_clicked('doask')) {
		require_once QA_INCLUDE_DIR.'p-app-post-create.php';
		require_once QA_INCLUDE_DIR.'p-util-string.php';
		
		$categoryids=array_keys(qa_category_path($categories, @$in['categoryid']));
		$userlevel=qa_user_level_for_categories($categoryids);
		
		
		$in['notify']=qa_post_text('notify') ? true : false;
		$in['email']=qa_post_text('email');
		$in['queued']=qa_user_moderation_reason($userlevel) ? true : false;
			
		qa_get_post_content('editor', 'content', $in['editor'], $in['content'], $in['format'], $in['text']);
		
		$errors=array();

		if (!qa_check_form_security_code('ask', qa_post_text('code')))
			$errors['page']=qa_lang_html('misc/form_security_again');
		
		else {
			$filtermodules=qa_load_modules_with('filter', 'filter_question');
			foreach ($filtermodules as $filtermodule) {
				$oldin=$in;
				$filtermodule->filter_question($in, $errors, null);
				qa_update_post_text($in, $oldin);
			}
			
			if (qa_using_categories() && count($categories) && (!qa_opt('allow_no_category')) && !isset($in['categoryid']))
				$errors['categoryid']=qa_lang_html('question/category_required'); // check this here because we need to know count($categories)
			elseif (qa_user_permit_error('permit_post_q', null, $userlevel))
				$errors['categoryid']=qa_lang_html('question/category_ask_not_allowed');
			
			if ($captchareason) {
				require_once 'p-app-captcha.php';
				qa_captcha_validate_post($errors);
			}
			
			if (empty($errors)) {
				$cookieid=isset($userid) ? qa_cookie_get() : qa_cookie_get_create(); // create a new cookie if necessary
				
				$questionid=qa_question_create($followanswer, $userid, qa_get_logged_in_handle(), $cookieid,
					$in['title'], $in['content'], $in['format'], $in['text'], qa_tags_to_tagstring($in['tags']),
					$in['notify'], $in['email'], $in['categoryid'], $in['extra'], $in['queued'], $in['name']);
				
				qa_redirect(qa_q_request($questionid, $in['title'])); // our work is done here
			}
		}
	}


//	Prepare content for theme

	$qa_content=qa_content_prepare(false, array_keys(qa_category_path($categories, @$in['categoryid'])));
	
	$qa_content['title']=qa_lang_html(isset($followanswer) ? 'question/ask_follow_title' : 'question/ask_title');
	$qa_content['error']=@$errors['page'];

	$editorname=isset($in['editor']) ? $in['editor'] : qa_opt('editor_for_qs');
	$editor=qa_load_editor(@$in['content'], @$in['format'], $editorname);

	$field=qa_editor_load_field($editor, $qa_content, @$in['content'], @$in['format'], 'content', 12, false);
	$field['label']=qa_lang_html('question/q_content_label');
	$field['error']=qa_html(@$errors['content']);
	
	$custom=qa_opt('show_custom_ask') ? trim(qa_opt('custom_ask')) : '';

	$qa_content['form']=array(
		'tags' => 'name="ask" method="post" action="'.qa_self_html().'"',
		
		'style' => 'tall',
		
		'fields' => array(
			'custom' => array(
				'type' => 'custom',
				'note' => $custom,
			),
			
			'title' => array(
				'label' => qa_lang_html('question/q_title_label'),
				'tags' => 'name="title" id="title" autocomplete="off"',
				'value' => qa_html(@$in['title']),
				'error' => qa_html(@$errors['title']),
			),
			
			'similar' => array(
				'type' => 'custom',
				'html' => '<span id="similar"></span>',
			),
			
			'content' => array(
				'tags' => 'name="content" id="content" autocomplete="off" class="hide"',
				'value' => qa_html(@$in['content']),
				'error' => qa_html(@$errors['content']),
			),
			
			'imgupload' => array(
				'type' => 'custom',
				'html' => '<label class="imguploadbtn" for="checkbox-menu3">Upload image</label>',
			),
			
			'imgprev' => array(
				'type' => 'custom',
				'html' => '<div class="imgprev"><img id="imgprev" />or</div>',
			),			
			
			'imgurl' => array(
				'type' => 'custom',
				'html' => '<input id="imgurl" placeholder="image url" type="text" autocomplete="off" ><input type="checkbox" name="check1" id="imgurlc" class="hide" onclick="copyTextValue();"/>
				<label class="imgurlb" for="imgurlc">Add</label><script>$("#imgurl").on({
				keydown: function(e) {
				if (e.which === 32)
				return false;
				},
  change: function() {
    this.value = this.value.replace(/\s/g, "");
  }
});</script>',
			),			
		),
		
		'buttons' => array(
			'ask' => array(
				'tags' => 'onclick="qa_show_waiting_after(this, false); '.
					(method_exists($editor, 'update_script') ? $editor->update_script('content') : '').'"',
				'label' => qa_lang_html('question/ask_button'),
			),
		),
		
		'hidden' => array(
			'editor' => qa_html($editorname),
			'code' => qa_get_form_security_code('ask'),
			'doask' => '1',
		),
	);
			
	if (!strlen($custom))
		unset($qa_content['form']['fields']['custom']);

	if (qa_opt('do_ask_check_qs') || qa_opt('do_example_tags')) {
		$qa_content['script_rel'][]='p-content/p-ask.js?'.QA_VERSION;
		$qa_content['form']['fields']['title']['tags'].=' onchange="qa_title_change(this.value);"';
		
		if (strlen(@$in['title']))
			$qa_content['script_onloads'][]='qa_title_change('.qa_js($in['title']).');';
	}
	
	if (isset($followanswer)) {
		$viewer=qa_load_viewer($followanswer['content'], $followanswer['format']);
		
		$field=array(
			'type' => 'static',
			'label' => qa_lang_html('question/ask_follow_from_a'),
			'value' => $viewer->get_html($followanswer['content'], $followanswer['format'], array('blockwordspreg' => qa_get_block_words_preg())),
		);
		
		qa_array_insert($qa_content['form']['fields'], 'title', array('follows' => $field));
	}
		
	if (qa_using_categories() && count($categories)) {
		$field=array(
			'label' => qa_lang_html('question/q_category_label'),
			'error' => qa_html(@$errors['categoryid']),
		);
		
		qa_set_up_category_field($qa_content, $field, 'category', $categories, $in['categoryid'], true, qa_opt('allow_no_sub_category'));
		
		if (!qa_opt('allow_no_category')) // don't auto-select a category even though one is required
			$field['options']['']='';
			
		qa_array_insert($qa_content['form']['fields'], 'content', array('category' => $field));
	}
	
	
		$field=array(
			'label' => qa_html(qa_opt('extra_field_prompt')),
			'tags' => 'name="extra" placeholder="image url" id="extra" class="hide"',
			'value' => qa_html(@$in['extra']),
			'error' => qa_html(@$errors['extra']),
		);
		
		qa_array_insert($qa_content['form']['fields'], null, array('extra' => $field));

	
	if (qa_using_tags()) {
		$field=array(
			'error' => qa_html(@$errors['tags']),
		);
		
		qa_set_up_tag_field($qa_content, $field, 'tags', isset($in['tags']) ? $in['tags'] : array(), array(),
			qa_opt('do_complete_tags') ? array_keys($completetags) : array(), qa_opt('page_size_ask_tags'));
	
		qa_array_insert($qa_content['form']['fields'], null, array('tags' => $field));
	}
	
	if (!isset($userid))
		qa_set_up_name_field($qa_content, $qa_content['form']['fields'], @$in['name']);
	

	
	if ($captchareason) {
		require_once 'p-app-captcha.php';
		qa_set_up_captcha_field($qa_content, $qa_content['form']['fields'], @$errors, qa_captcha_reason_note($captchareason));
	}
			
	$qa_content['focusid']='title';

	
	return $qa_content;


/*
	Omit PHP closing tag to help avoid accidental output
*/

 

 
 

 

 

 

 

 

Link to comment
Share on other sites

Hi everyone. I'm completely new to PHP. I've been trying to teach myself to code with it and learn as much as I can for the past few days because it'll definitely come in handy. So far, everything I've learned is just from articles and videos.

 

Anyway, let's skip the boring stuff.

 

For literally the whole day today, I've been trying to figure out what the heck is wrong with a script I'm working with. I didn't code it myself. I'm pretty much just modifying it to fit my needs from the generic "template" it comes in.

When I first started out I found it easier to write my own script than try to use someone else's script (Trust me I found out the hard way), for I found out that there is a lot of bad scripts on the Internet, scripts that use obsolete techniques or scripts that are way above by level of understanding (as a beginner). My opinion if you do use a script be it a library of some kind. From quickly glancing over you issue(s) I see that it deals with uploading images and maybe editing them. If you do an internet search I know you will find some pretty good php image libraries (I know I have used some of them myself). I think that would be better than trying to modifying someone's script to fit your need and I think you would find understanding PHP better. Just my opinion. 

 

You might even consider using a PHP framework that too would probably be better than using someone's script. 

Edited by Strider64
Link to comment
Share on other sites

You are on the right track about setting up error displaying.  Doing so is your number one troubleshooting technique.  I will also add the following "just to be sure", but if you have php.ini setup right, you shouldn't need to.

ini_set('display_errors', 1);
error_reporting(E_ALL);

As for as the following error:  Notice: Undefined index: name in .../public_html/include/p-page-ask.php on line 126

 

You will see it references the following line of code.

$questionid=qa_question_create($followanswer, $userid, qa_get_logged_in_handle(), $cookieid,$in['title'], $in['content'], $in['format'], $in['text'], qa_tags_to_tagstring($in['tags']),$in['notify'], $in['email'], $in['categoryid'], $in['extra'], $in['queued'], $in['name']);

Specifically, it is describing $in['name'], and says that the array named $in doesn't have an element named "name".

 

Right before this line, add the following.    What does it display?  Do you understand "ternary operators".  This is just a shortcut IF/THEN statement.  Make sure you understand strings.  See http://php.net/manual/en/language.types.string.php.  Basically, you could use single and double quotes around text, and double quote will convert PHP variables.

echo('Element $in '.(isset($in['name'])?'contains':'does not contain').' element "name"');

Instead of looking specifically at $in['name'], for troubleshooting, you normally look at the whole array.  Try the following.  Both do the same thing, and while the first gives a bit more information, I typically like the second because it is easier to read.  You will find your self doing this very often.

var_dump($in['name']);
echo('<pre>'.print_r($in['name'],1).'</pre>');

Lastly, when troubleshooting, add "traps" when you are confused on what you are seeing.  Add script like exit('something='.$something); at different locations to make sure you are getting there and using the values that you expect.

 

And most of all, have fun and don't get frustrated :)

 

Link to comment
Share on other sites

Additionally, regards use of the isset() function, it would be used similarly to examples below...but php.net is the place for discovering the use of PHP functions, it has a lot of documentation. (http://php.net/isset)

 

Here's a code example:

$a = 1;
 
if (isset($a)) { echo 'The variable exists'; } // $a exists and therefore 
message shown
if (isset($b)) { echo 'The variable exists'; } // $b does not exist and 
therefore the message will NOT be shown

You can also use:

if (!isset($a)) { echo "The variable doesn't exist"; } // the message will be 
shown because the variable does NOT exist

I hope the examples help a little bit in your understanding of the isset() function.

Edited by wezhind
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.