Forum Moderators: coopster

Message Too Old, No Replies

echo not working?

         

wincode

6:26 pm on Jan 31, 2010 (gmt 0)

10+ Year Member



Hello. On one page, called editor.php, I have a tinymce editor with a text area that can be submitted. It has a name of "elm1". On a second page (the page that submit directs to called outputpage.php) I have
<?php
$content = $_POST[elm1];
echo $content
?>

But it won't show what was in the elm1 text area.

Here's the code for the editor page.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Full featured example</title>

<!-- TinyMCE -->
<script type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript">
tinyMCE.init({
// General options
mode : "textareas",
theme : "advanced",
plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount,advlist,autosave",

// Theme options
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : true,

// Example content CSS (should be your site CSS)
content_css : "css/content.css",

// Drop lists for link/image/media/template dialogs
template_external_list_url : "lists/template_list.js",
external_link_list_url : "lists/link_list.js",
external_image_list_url : "lists/image_list.js",
media_external_list_url : "lists/media_list.js",

// Style formats
style_formats : [
{title : 'Bold text', inline : 'b'},
{title : 'Red text', inline : 'span', styles : {color : '#ff0000'}},
{title : 'Red header', block : 'h1', styles : {color : '#ff0000'}},
{title : 'Example 1', inline : 'span', classes : 'example1'},
{title : 'Example 2', inline : 'span', classes : 'example2'},
{title : 'Table styles'},
{title : 'Table row 1', selector : 'tr', classes : 'tablerow1'}
],

// Replace values for the template plugin
template_replace_values : {
username : "Some User",
staffid : "991234"
}
});
</script>
<!-- /TinyMCE -->

</head>
<body>

<form method="post" action="outputpage.php">
<div>
<h3>Full featured example</h3>

<p>
This page shows all available buttons and plugins that are included in the TinyMCE core package.
There are more examples on how to use TinyMCE in the <a href="http://tinymce.moxiecode.com/examples/">Wiki</a>.
</p>

<!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded -->
<div>
<textarea id="elm1" name="elm1" rows="15" cols="80" style="width: 80%">
&lt;p&gt;
This is some example text that you can edit inside the &lt;strong&gt;TinyMCE editor&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
Nam nisi elit, cursus in rhoncus sit amet, pulvinar laoreet leo. Nam sed lectus quam, ut sagittis tellus. Quisque dignissim mauris a augue rutrum tempor. Donec vitae purus nec massa vestibulum ornare sit amet id tellus. Nunc quam mauris, fermentum nec lacinia eget, sollicitudin nec ante. Aliquam molestie volutpat dapibus. Nunc interdum viverra sodales. Morbi laoreet pulvinar gravida. Quisque ut turpis sagittis nunc accumsan vehicula. Duis elementum congue ultrices. Cras faucibus feugiat arcu quis lacinia. In hac habitasse platea dictumst. Pellentesque fermentum magna sit amet tellus varius ullamcorper. Vestibulum at urna augue, eget varius neque. Fusce facilisis venenatis dapibus. Integer non sem at arcu euismod tempor nec sed nisl. Morbi ultricies, mauris ut ultricies adipiscing, felis odio condimentum massa, et luctus est nunc nec eros.
&lt;/p&gt;
</textarea>
</div>

<!-- Some integration calls -->
<a href="javascript:;" onmousedown="tinyMCE.get('elm1').show();">[Show]</a>
<a href="javascript:;" onmousedown="tinyMCE.get('elm1').hide();">[Hide]</a>
<a href="javascript:;" onmousedown="tinyMCE.get('elm1').execCommand('Bold');">[Bold]</a>
<a href="javascript:;" onmousedown="alert(tinyMCE.get('elm1').getContent());">[Get contents]</a>
<a href="javascript:;" onmousedown="alert(tinyMCE.get('elm1').selection.getContent());">[Get selected HTML]</a>
<a href="javascript:;" onmousedown="alert(tinyMCE.get('elm1').selection.getContent({format : 'text'}));">[Get selected text]</a>
<a href="javascript:;" onmousedown="alert(tinyMCE.get('elm1').selection.getNode().nodeName);">[Get selected element]</a>
<a href="javascript:;" onmousedown="tinyMCE.execCommand('mceInsertContent',false,'<b>Hello world!</b>');">[Insert HTML]</a>
<a href="javascript:;" onmousedown="tinyMCE.execCommand('mceReplaceContent',false,'<b>{$selection}</b>');">[Replace selection]</a>

<br />
<input type="submit" name="save" value="Submit" />
<input type="reset" name="reset" value="Reset" />
</div>
</form>

</body>
</html>

But my problem is that when I click submit, the outputpage.php does not show anything...

Please, your help is much appreciated.

rocknbil

7:01 pm on Jan 31, 2010 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



If this is how you have it in your script,

<?php
$content = $_POST[elm1];
echo $content
?>

It's erroring due to the missing semicolon after content. Also, the unquoted index may kick undesired warnings, sometimes it will interpret it as a constant ("undefined constant "elm1", presuming 'elm1'). If your server is not reporting errors (which is good) you can find such warnings and errors in your error log.

Even so, it lacks error checking, which will lead to the problem.


<?php
if (isset($_POST['elm1'])) {
$content = $_POST['elm1'];
echo "<p>$content</p>";
}
else { echo "<p>The element was not set!</p>"; }
?>

The above does two things: obviously tells you if it's not set. If it **is** set but is an empty value, you can view source and will see <p></p>.

If it still doesn't work, maybe your JS is doing something to the form. See if anything at all is coming in:


<?php
if (isset($_POST['elm1'])) {
$content = $_POST['elm1'];
echo "<p>$content</p>";
}
else {
echo "<p>The element was not set!</p>";
echo "<p>Request:</p>";
foreach ($_REQUEST as $key => $value) {
echo "<p>k $key: v: $value</p>";
}
}
?>

wincode

8:11 pm on Jan 31, 2010 (gmt 0)

10+ Year Member



The first code you provided worked perfectly! Thanks! (:
But, I don't understand what the difference is? How come one works, and the other doesn't? Also what does "isset" do?

Thanks.

rocknbil

10:54 pm on Jan 31, 2010 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



But, I don't understand what the difference is?

Look closely, I gave you a hint:

It's erroring due to the missing semicolon after content.

PHP syntax error. Or, maybe, in addition, the unquoted index I mentioned.

Also what does "isset" do?

Checks if a value was set. The set value may be an empty string, and would pass empty($value), but it does not pass a nonexistent or null value. If errors are enabled, and some value is not set, it will issue a warning, like

undefined index "elm1" in yourscript.php on line 2

They are horridly ugly on a live site. So always, always, always check if the value is set before arbitrarily "expecting" it to be there. This is what I meant by error checking.

Edit: I wanted to make sure null fails on isset. It does.


<?php
header("content-type:text/html");
$thisthing = null;
echo (isset($thisthing))?'Null but set':'not set';
?>

Note to self: don't ever use $this anywhere but within a class object . . . :-P