almostbob 866 Retired: passive income ROCKS

I have an course_enrollment table, and I have a group_student table. The group_student table has the students that belong to the groups. But there a students that have enrolled for courses and they has not been placed in a group yet. Do you know how can I make an query in access that can give me the students that have not been enrolled in a group yet.

Sorry to bother you, but you seems to me a good help.

making assumptions
course_enrolment:id unique autoincrement, lastname,firstname, //and others
group_students:id unique autoincrement,group,student_id, //and others where student_id is the foreign key relating the two tables
select from course_enrollment * where id .... is not in the groups table, table joins mess me up
TRY

SELECT * FROM course_enrolment WHERE id NOT IN (SELECT student_id FROM group_student)

in access it would be something like

SELECT course_enrollement.[*],group_student.[id]
FROM course_enrollment INNER JOIN group_student ON course_enrolment.id = group_students.student_id HAVING (((group_students.[student_id]) Is Null));

have used access twice in my life, don't trust this code

almostbob 866 Retired: passive income ROCKS
<a href='download.php?$filename=whilemyguitar.mp3'>the beatles-while my guitar gently weeps</a>
<?php /* download.php */
if(!session_id) { $hiddenfile="../absolutepath/polkamusic.mp3"; } // evil laugh
else $hiddenfile="../absolutepath/$filename";
header('Content-type: file/mp3'); // I dunno and I'm too lazy to look up (audio/mpeg)?
header('Content-Disposition: attachment; filename="$filename"');
readfile("$hiddenfile");
?>

!logged_in users get polka music for every mp3 they download

slyme commented: Very helpful, thank you. +1
almostbob 866 Retired: passive income ROCKS

using php the user neve sees the url of the file
and without a logged in session nothing

<?php /* download.php */
if(!session_id) { die ('only registered users'); } // better session validation than that but its a thought example
$hiddenfile="../absolutepath/$filename";
header('Content-type: file/mp3'); // I dunno and I'm too lazy to look up (audio/mpeg)?
header('Content-Disposition: attachment; filename="$filename"');
readfile("$hiddenfile");
?>

very poor code unchecked dont think it works its a concept example

almostbob 866 Retired: passive income ROCKS

you already have a query that prints a list of the students able to take the exams
ingonring the bad code for the moment (really bad code)
and the poor field names
output a table in a form something like

<?php echo '<table>';
for each $output ++{echo "<tr><td>$lastname</td><td>$firstname</td><td>$coursename</td><td><input 'name='mark' value='$mark'></td></tr>"; }
echo "</table><input type='submit'value='update marks'></form>"; }

and have the form submit to a script(or self) to update table marks with the marks data
it is a thought exercise this code does not work

almostbob 866 Retired: passive income ROCKS

if a student can only attend 1 course, add the column to the student table
if the student can attend more than one course create a table
marks (id,student_id,course_id,mark)

almostbob 866 Retired: passive income ROCKS

add the marks column to the database default blank/fail
enable it with a query that enumerates the same output as the prior attendance query and asks you to update the mark fields, for each row in the result array
can be all records or single records

almostbob 866 Retired: passive income ROCKS
almostbob 866 Retired: passive income ROCKS

the student table does not need the text course names
the reporting logic can print the text names if necessary from the course table

student (studentNum,firstName,lastName,),
course (courseID, CourseName,courseTotalCapacity),
course_allocation (studentNum,courseID)

one link between each datatable

almostbob 866 Retired: passive income ROCKS

the php string to time function strtotime() allows this

<?php echo date('l dS \o\f F Y h:i:s A', strtotime('+7 day')); ?>

format the date() how you need,

storing the timestamp in the db is more efficient than storing any text representation of the date and time
comparisons are simpler, date ranges are simpler, each record is only 10bytes
it is easier to process a numeric timestamp and echo the formatted version on output

almostbob 866 Retired: passive income ROCKS
insert into #temptable ( IDENTITY(int, 1,1) AS number, select * FROM table ORDER BY score desc) SELECT * FROM #temptable ORDER BY number DROP TABLE #temptable

thought process only, cant guarantee the code
mysql is likely buggy its been a while
select the data you need into a temp table with an autoincrementing field
print the temp table
drop the temp table

almostbob 866 Retired: passive income ROCKS

http://devphp.sourceforge.net/
using the portable version on a thumbdrive in customer offices
the full version on my pc

leviathan185 commented: Just what i needed, Thanks +1
almostbob 866 Retired: passive income ROCKS

as noelthefish wrote, the elseif is redundant and takes (miniscule) resources to run, the ! means not,
If (not$variable) {do something;}
else {do something else}

almostbob 866 Retired: passive income ROCKS
AND Ships.Dest_State IN ('LA') ORDER BY 'PU_Date ASC'

Try removing the ASC from the quotes !

good catch, stared at it and didnt see

jay.barnes commented: Thanks for the help with my MySQL query issue! +1
almostbob 866 Retired: passive income ROCKS
<FORM encType='text/plain' action='mailto:recipient@mydomain.co.uk'>

quotes, validate the html

<FORM method='post' action='full-url-to-form-handler-script-including-SELF-if-mail-handler-is-declared-within-the-same-file'>

generic mailer use

<?php ob_start("ob_gzhandler"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<htm>
<head>
<title>Tell A friend -</title>
<P>Tell a friend about our site!</p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method='post'>
<input type='hidden' value="add this message to everything the user sends" name='essage1'>
<div style='width:100%; float:left;'>
<div style='width:39%; text-align: right; float:left;'>To (Friend's name) : </div>
<div style='width:59%; text-align: left; float:right;'><input class='infor' type='text' size='40' value='<?php echo $to_name; ?>' name='to_name'>
</div>
<div style='width:100%; float:left;'>
<div style='width:39%; text-align: right; float:left;'>To (Friend's email) :  </div>
 <div style='width:59%; text-align: left; float:right;'><input  type='text' size='40' value='<?php echo $to_email; ?>' name='to_email'>
 </div>
</div>
<div style='width:100%; float:left;'>
<div class='required' style='width:39%; text-align: right; float:left;'>From (Your name) :
 </div>
 <div class='required' style='width:59%; text-align: left; float:right;'><input class='infor' type='text' size='40' value='<?php echo $from_name; ?>' name='from_name'>
</div>
</div>
<div style='width:100%; float:left;'>
<div style='width:39%; text-align: right; float:left;'>From (Your email) :   </div>
 <div style='width:59%; text-align: left; float:right;'><input class='infor' type='text' size='40' value='<?php echo $from_email; ?>' name='from_email'>
  </div>
 </div>
<div style='width:100%; float:left;'>
 <div style='width:39%; text-align: right; float:left;'>Message :
 </div>
<div class='required' style='width:59%; text-align: left; float:right;'><textarea name='message' cols='45' rows='6'></textarea>
  </div>
 </div>
</div>
<div class="dontprint" style='width:100%; float:left;'>
 <center>
  <button type="submit" name="subm" value="submit" onclick="return(confirm('Are all fields complete?'));" >Submit</button>
<button name="reset" type="reset" VALUE="Reset" >Reset</button>
</div>
</form>
<?php If ($to_email && $message1 && $subject) {
$to = "\"$to_name\" <$to_email>";
$from = "\"$from_name\" <$from_email>";
$to = str_replace("\\'", "'", $to);
$from = str_replace("\\'", "'", $from);
$subject = str_replace("\\'", "'", $subject);
$message = str_replace("\\'", "'", $message);
mail($to, $subject, "Hi $to_name $message1 …
almostbob 866 Retired: passive income ROCKS

most server language have a mail function
php
asp
perl
without coding your own you could google
cgi mail script,,php mail script,,asp mail script,,
Big nose bird http://bignosebird.com/cgi.shtml has a cgi script, auto reply, address verification, required fields, redirect on success, etc etc all bells and whistles very configurable from within the html forms, easy to setup while you learn to code your own

almostbob 866 Retired: passive income ROCKS
if ($checkbox) {
$file = 'downloads/Tutorial1.wmv.zip';
// Set headers
header("Cache-Control: public ;");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=Tutorial1.wmv.zip");
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($file) ."; ");

maybe, going to think

almostbob 866 Retired: passive income ROCKS

if the file is stored in a blob in the database, print the database field
if the filename only is stored in the database, without the directory structure

readfile('./pathtofolder/'.$file); //or
readfile("./pathtofolder/$file");

always forget which one is the right form

almostbob 866 Retired: passive income ROCKS

.REPLACE works exactly like INSERT,..except that if an old row in the table has the same value as a new row for a PRIMARY KEY or a UNIQUE index

http://dev.mysql.com/doc/refman/5.1/en/replace.html

the primary key ID is not referenced by the replace statement, the replace wont work as you intend, it becomes an insert statemen

almostbob 866 Retired: passive income ROCKS

dont use category names in the posted urls http://bla.com/?1=something&2=somethingelse

$category = $_GET['cat'];
$subcategory = $_GET['subcat'];
if iset($1) { $category=$1; }
if($category=="") { header("Location: index.php"); } 
elseif ( iset($2)) {  $subcategory=$2; )
if($subcategory=="")
$result=mysql_query("SELECT * FROM ".$category." ORDER BY RAND() LIMIT 1");
else $result=mysql_query("SELECT * FROM ".$category." WHERE Category LIKE '".$subcategory."' ORDER BY RAND() LIMIT 1");
$row = mysql_fetch_assoc($result);
$data=$row['column'];
header("Location: ".$data);
echo $data;
if (!mysql_num_rows($result));
  echo "No records found";
}

ignore syntax errors, just a thought process
Bob

almostbob 866 Retired: passive income ROCKS

Government department, nuff said, in government mediocre is up

almostbob 866 Retired: passive income ROCKS

get a google webmaster tools account,
Follow all the directions
I get my sitemaps made from the sitemap tool at http://www.auditmypc.com/
Google have a good set of howtos to tell google how to index your site called webmaster 101

this code in your .htaccess file redirects external sites accessing images

<Files .htaccess>
order allow,deny
deny from all
</Files>

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?MYSITE\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

The <file></file> block prevents anyone reading your .htaccess file
the second block protects images being accessed from offsite

almostbob 866 Retired: passive income ROCKS

I'm using Google analytics to track the traffic sources of 404 pages. Most of them are from images.google.com. How can I correct the broken link from google?

resubmit your sitemap to google, to update all old links
tell google not to index images
use apache mod_rewrite to redirect all direct calls to images to the homepage.
put a sitesearch widget on the 404 page
put your site menu on the 404 page
put a "did you mean" widget on the 404 page
if you have protected the images, so they can only be accessed from your site, the google links will always fail, unprotect the images, but that allows bandwidth theft. have mod_rewrite replace all external calls to images with the attachment or similar

almostbob 866 Retired: passive income ROCKS

Im pretty sure the point at which the images go behind, is the edge of the table cell<td>
example of css to lyout columns

<style type='text/css'>
.left { text-align:right;
float:left;
width:25%;
font-size:100%;
margin:0;
margin-right:10px; }
.right { float:right;
width:10%;
font-size:85%;
margin:0;
margin-left:10px; }
.center { margin:0;
font-size:100%;
z-index:1000; }</style>
<div class='left'>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc fringilla, turpis ut viverra aliquet, nibh metus facilisis purus, ut ultrices est diam quis neque. Proin lobortis purus sit amet lacus laoreet imperdiet. Suspendisse at nulla rutrum quam volutpat convallis. Morbi non orci neque, quis vulputate neque.</div>
<div class='right'>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc fringilla, turpis ut viverra aliquet, nibh metus facilisis purus, ut ultrices est diam quis neque. </div>
<div class='center'>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc fringilla, turpis ut viverra aliquet, nibh metus facilisis purus, ut ultrices est diam quis neque. Proin lobortis purus sit amet lacus laoreet imperdiet. Suspendisse at nulla rutrum quam volutpat convallis. Morbi non orci neque, quis vulputate neque. Vestibulum tellus massa, vestibulum vitae pulvinar vel, interdum vitae nunc. Mauris tristique malesuada diam id bibendum. Sed vehicula aliquet quam vitae porta. </div>

If you put the flash in a div with class='center' it should inherit the z-index of the center class and float above other elements

almostbob 866 Retired: passive income ROCKS

Your layout problems may be cause by the tables used for positioning, tables are not meant for layout
remove the tables and position the elements with css
the css that does the positioning can set the z-index of the element, to an arbitrarily high number (1000), and cause it to remain on top of all other elements

almostbob 866 Retired: passive income ROCKS

the php is not being parsed in the form
is the form extension .php so that php in the form will be recognized
or is it still labelled .htm/.html
I have a mental blank on any other reason

bbqkaren commented: Thank you +3
almostbob 866 Retired: passive income ROCKS

nope, the inputs are not special, IDs etc

thinking
back soon

almostbob 866 Retired: passive income ROCKS
<a href='..'>Go up one level</a>
<a href='.'>reload index on this level</a>
<a href='../adjacentfolder/'>Go across to another folder at the same level (up one then down)</a>
<a href='./folder'>Go down one level</a>
<a href='../..'>Go up two levels</a>
<a href='/'>Go up to html_root</a>
<a href='/folder'>Go to folder off the html_root</a>
almostbob 866 Retired: passive income ROCKS

can you post a few of the other form input fields from

<table>
<tr>
<td><input>
<tr><td><input>
<!--bla bla-->

the table may matter,
not sure of the format,

almostbob 866 Retired: passive income ROCKS

Thinking

back soon

almostbob 866 Retired: passive income ROCKS

Who says it HAS TO be available anywhere?
If a website is designed for China, it has to work for the Chinese.
When I design a website in Norwegian, meant for Norwegians, I make sure that most users in my target area can read it without annoyance. That requires more than a 7-bit character set. Using UTF-8 solves the problem for all but those who still stick with Windows and IE5.

only 1 difficulty
Chinese, Norwegian, or Martians, do not control the path the information takes to get from the server to the pc, very seldom is the path direct, any of the devices in the path could fail handling unsupported codesets in filenames.
UTF-8, is an 8bit code, it uses two, three, four 8bit bytes to represent characters outside ASCII,
it works,
a Chinese file being sent to Norway needs to readable in NorseChinese(?sorry) but the name and routing information needs to be understandable to the server routing it through Gibraltar Estonia Kazakhstan and Mars, UTF-8 is a winner for filename compatibility the ascii character set represents itself, hi byte characters appear as ascii to dumb routers,
intermediates that cannot handle 2byte characters 'see' two single bytes.
multibyte encoding makes a file larger than it need be for a specific language.
my site is in twenty six languages, some hi order, but the filenames are in ascii,
other codesets do get lost on 'redneck' servers
utf-8/unicode/utf-16 implemented on …

almostbob 866 Retired: passive income ROCKS

this

<?php
              
<input id="ip" name="ip" size='25' value='<?php echo $_server["remote_address"]; ?>' type='text'>
<input id="host" name="host" value='<?php echo $_server["remote_host"]; ?>' type='hidden'>

?>

will fail, the outer <?php ?> is unneccesary,
dont make the fields text unless you want the user to see and alter them,
try

<input id="ip" name="ip"  value='<?php echo $_server["remote_address"]; ?>' type='hidden'>
<input id="host" name="host" value='<?php echo $_server["remote_host"]; ?>' type='hidden'>

or

<?php echo "<input id=\"ip\" name=\"ip\" value=\"".$_server['remote_address']."\" type=\"hidden\">";
echo "<input id=\"host\" name=\"host\" value=\"".$_server['remote_host']."\" type=\"hidden\">"; ?>

For php includes, or php embedded in the original html form, did you rename the "outer"form from "formname".html to "formname".php so the server will know to parse it for php
else the html parser will just find 'wrong' tags instead of the php parser parsing the php then sending the generated stuff on as html

almostbob 866 Retired: passive income ROCKS

most godaddy hosting includes php
the php $_server[] array used in the godaddy form already includes this information
its a matter of changing your html form to a php form (by changing the file extension)
and coding something like

<input type='hidden' id='ip' name='ip' value='<?php echo $_server["remote_address"]; ?>'>
<input type='hidden' id='host' name='host' value='<?php echo $_server["remote_host"]; ?>'>

Very few IP address change except those on dialup.
the ISP has to retain the information for billing and liability protection,
the more often they alter the ip,
the more data they have to retain
mine usually alters every 6 months
the ip data and all page access data is retained in the server logs, this is no ideal world, everything is logged
:attachment: server log image

almostbob 866 Retired: passive income ROCKS

there is a tutorial http://www.bleepingcomputer.com/forums/topic56091.html
this one makes the list
1 2 3
4 5 6
7 8 9
it may not take much rewriting to have ajax count the total number of return values /3 then assign the classes appropriately to produce
1 4 7
2 5 8
3 6 9

almostbob 866 Retired: passive income ROCKS

.... but you still think the system needs no update? :)

I did not write anywhere that the system needs no update
I wrote that the 'system' was written by English speakers, for English speakers.
Until rewritten to accomodate other character sets, that can be a lifetimes work for any number of people, you have to use it the way it was written.
It works, just.
Midimagic explains well

almostbob 866 Retired: passive income ROCKS

savefile.php

<?php 
if(!$file) return false;
elseif(!$content) return false;
else { header("Content-disposition: attachment; filename=$file");
header('Content-type: $content');
readfile("$file"); }
?>
<a href='./savefile.php?file=filename&content=contenttype'>download filename</a>

keep a folder full of downloads
this script as index.php in that folder lets me dump anything in it and it autoupdates the displayed list
line 20 lets you set the filetypes it will handle

<?php ob_start("ob_gzhandler"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>forms</title>
<H4>Forms</h4>
<?php $p = split('/', $_SERVER['SCRIPT_FILENAME']);
$script_name = $p[count($p)-1];
$path = str_replace($script_name, '', $_SERVER['SCRIPT_FILENAME']);
$dir_handle = @opendir($path) or die("Unable to open $path");
Function get_Extension($m_FileName){
$path_parts = pathinfo($m_FileName);
if ($path_parts["extension"]) { $m_Extension = strtolower($path_parts["extension"]);
return(strtoupper($m_Extension));  		}
else { return "unknown file types"; }
 }
 function check_image($filename){
 $temp=strtoupper(get_Extension($filename));
 if(($temp=="PDF")||($temp=="XLS")||($temp=="DOC")) return (true);
 else return (false);
 }
 Function get_Files($path) {
if ($handle = opendir($path)) {	
while (false !== ($file = readdir($handle))) { 
if(!is_dir($file) && substr($file,O,1) != "."){ $m_Files[]=$file; 	}
}
 closedir($handle); 
}
 if(sizeof($m_Files)>1) asort($m_Files);
 return $m_Files;
 }
 $files=get_Files($path); 
 $filter_files=array_filter($files,"check_image");
 $maxnr=sizeof($filter_files)-1;
 sort($filter_files);
for ($i=0;$i<sizeof($filter_files);$i++){
echo "<div style='margin:4px;'><a href='./savefile.php?file=$filter_files[$i]'>";
echo substr($filter_files[$i], 0, strlen($filter_files[$i])-4);
echo "</a></div>";
 }
closedir($dir_handle); ?>
</body></html>
<?php ob_flush(); ?>
almostbob 866 Retired: passive income ROCKS

An aside, something unrelated to the question

radio buttons,
label tag makes the radio button title/name clickable as well as the checkbox, matches common user interfaces

<div>
<p class=" p2">Would you like to be informed all the time there is something new? By this we add you in our database: </p>
<label for='b1'>Yes </label><input name='inform' id='b1' type='radio'  value='yes' /> 
<label for='b2'> No </label><input name='inform' id='b2' type='radio' value='no' />
</div>

edit:: ->xhtml or html ?
some tags are self closed, some arent, browser quirks mode(s) really make code results difficult to predict

almostbob 866 Retired: passive income ROCKS

where javascript is used, it is the initial script trappping the 3 events separately, more currently use css to change appearance on mouseover(css hover), javascsript is often disabled as a security issue
havent seen any generic onEvent handler except in tutorial pages where it is a teaching aid followed up with the list of possible events.
You could write a onevent handler, but it would add complexity and slow things down, rather than simplify and speed up

/* css for mouseover */

td { text-decoration:none; }
td:hover { background-color:#66cdaa; text-decoration:bold; }

its a pale turquoise color background, its awful , but it suits my layout

almostbob 866 Retired: passive income ROCKS

the system was written by, and for, English speakers,
at the time of the development of the system there was the opportunity for other language speakers to develop part or all of competing, complimentary, or parallel 'system's.
Such language systems were not developed, yet there is the perceived requirement that the commercial property of those with a little thought and a lot of luck accomodate those with less
DARPAnet, the forerunner of the communication system is an entirely American military entity. ASCII leading initial is for American.
There always was/is the chance of development of Xscii where X is the language/country of choice, but as yet, X has not bothered to do so.
An individual can do whatever they want with their copy of the system.
However, if that individual requires their copy of the system to be able to communicate with, within, or across, the system, then they use the protocols and restrictions of the larger system
no different to any other activity, if an individual wants to drive on the other side of the road, they can do so, until the intervention of the operating restrictions of the road system, in the form of a bloody big truck coming the other way.
My small business web site supports 43 languages
Albanian, Arabic, Bulgarian, Catalan, Chinese, Croatian, Czech, Danish, Dutch, English, Estonian, Filipino, Finnish, French, Galician, German, Greek, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Latvian, Lithuanian, Maltese, Norwegian, Persian, …

almostbob 866 Retired: passive income ROCKS

There's a world outside of USA. If a system doesn't allow characters outside the limited ASCII set, it's the system that needs to be changed.

The system dont really give a flying f___, the software was written in English
the internet, shipping, airtravel, native language is English.
A limited character set for transport protocols is probably a good thing, there are too many translation versions of 2byte codes that there would be less compatibility if each server were to try to interpret them, according to its installed version.If you invent something(or steal it convincingly enough), the microcode would probably be in that language of the inventor(theif)

almostbob 866 Retired: passive income ROCKS

You can include the font file on your site, and reference it in the html, so that those browsers without native unicode for Kannada can get it from the font file
a list of fonts containing support for Kannada http://www.wazu.jp/gallery/Fonts_Kannada.html#samples from which you can download a font to your site
and

@font-face {
font-family: kannada;
src: url(resolved-path-to-downloaded-kannada-font.ttf);
}

in the css should permit access

almostbob 866 Retired: passive income ROCKS
@echo off
if %2=="" goto oops 
start /w c:\folders\do.exe %1 %2
goto end
:oops
echo Proper format is %0 parameter1 parameter2
:end

how do i pass parameters to a batch file

almostbob 866 Retired: passive income ROCKS

Interesting solution, I might think about doing that. Thanks for the idea.

I was thinking that spambots search for email addresses that always contain a '@' SO something that doesnt include a @ will get past <input type='text' id='mailaccount'>@<input type='text' id='maildomain'>

$mail = $_post['mailaccount'].'@'.$_post['maildomain'];

I put a link to this page in all my home pages
http ://w ww.auditmypc.com/freescan/antispam.html
(link broken not sure if I would be violating DaniWeb policy),
it generates 50 fake email addresses every load to poison spambots

almostbob 866 Retired: passive income ROCKS

that address is sent in clear text through however many relays, proxies, exist in the traceroute between your host and the user,
any one of them could be compromised
with an appropriate packet sniffer no plain text is safe
how likely do you enticipate interception
you could use something like
break the address at the @ sign, send two parts to
2 text boxes
1 for user name
1 for domain
and not sent the @ sign at all, and reconstruct the address in php/asp before submitting to the database,

almostbob 866 Retired: passive income ROCKS

This is Joomla's spam protection
Joomla has a plugin that obfuscates email addresses, to make it harder for scrapers and bots.
The visible address and effective address are not changed, just what robots can see.
you can probably disable the plugin somewhere in Joomla configuration.
There is likely a 'howto' on setting up the editbox without disabling spam protection, somewhere on the web. Joomla is a popular cms

Sometimes the help, is worse than the problem

almostbob 866 Retired: passive income ROCKS

a gradient fill is 1 px x huge, or huge x 1px
you repeat the 1px side,
_______________________ << example repeat-y becomes a red rectangle
the attachment is a gradient fill for repeat-y where the larest possible x dimension for the div its from is 390px,
on repeat-x/y/both there are no margins borders padding in the repeat, so that there are no blank spaces

W3C recommendations, font sizes be set in relative sizes, ems and % in screen display,
the 12pt 16px fonts set throughout your css are not good, I am visually restricted, not bad enough to consider myself impaired, but I loathe web sites with fixed fonts set in the stylesheets, it makes it that much harder to read, as the fonts override my browser settings, 16px on a 24inch 2850 * 2140px screen is .15inch high very very small,
screens get bigger, dot sizes on those screens get smaller with each generation, pixels get smaller and smaller
the 12pt font set in @media print in the demo css is a print(paper) setting, not a screen setting,
target cost $1million because their site uses fixed fonts, is not lawfully accessible and they got sued..
onscreen fixed font sizes cannot be resized to suit the visual impairment of the user,
you lose customers, and the law suit.
one lawsuit has created precedent, there is likely to be a rash of them.

keep ahead, its easier than …

almostbob 866 Retired: passive income ROCKS
body { font:100% verdana,arial; text-align:left;  }
@media all {
.dontall {display:none; }
}
@media print {
body { line-height:100%; font-size:12pt; font-family: verdana, arial; }
.dontprint { display:none; }
p { padding: 1px; margin:0; line-height:100%; list-style-type:square; }
p:first-line { font-weight:bold; }
p:first-letter { font-size:150%; float:left; }
}
@media screen {
.dontshow { display:none; }
.doshow { display:inline; }
}
a { text-decoration: none; }
a:hover { background-color: #66cdaa; text-decoration: none; }
a:focus { background-color: #66cdaa; text-decoration: none; }
a:active { background-color: #66cdaa; text-decoration: none; }
a.button { background-color: #e4e0d8; color: #000000; cursor: pointer; }
a.button:hover  { background-color: #66cdaa; }
a.button:focus  { background-color: #66cdaa; }
a.button:active { background-color: #66cdaa; }
img { border: 0px; }
p { padding: 1px; font-size: 100%; line-height:135%; list-style-type:square; }
p:first-line { font-weight:bold; }
p:first-letter { font-size:200%; float:left; }
table { padding: 1px; }
td { background:url('YOUR GRADIENT IMAGE.gif') repeat-x; }
td > p { font-size: 85%; font-weight:bold; float:right; }
td > div { font-size:150%; font-weight:bold; float:right color:#ff00ff; }

I'm not going to create the page for you,

almostbob 866 Retired: passive income ROCKS

the table is styled directly

table { bla bla }
td { bla blah }

where you want to style elements inside the table

td > p { bla bla ]
td > div { bla bla }

these demonstrate the form for a <p> or <div> that is the directly inside a table [element] >(first child) [element] generic

td * { bla bla }

styles any element that is any child grandchild or lower child of a td

td > p > h1 {bla bla }

any h1 child of a p child of a td

a gradient background ius usually a 1px * (huge)px or a (huge)px * 1px gradient image repeated in the 1px direction
for a 1*100 image background:#0f0 url('gradient.gif') repeat-x;

almostbob 866 Retired: passive income ROCKS

sorry, out of brain space,
redirect to a html page instead of an image ??
not sure it can be done either
it should be cause you can make <img src='filename'php'> for generated images
how about a html file with a breakout script that loads your page

Our image protect looks like this and has the site address

almostbob 866 Retired: passive income ROCKS

this is a hot topic and there are tutorials

AltLab

has my favorite, easy to follow, flexible

almostbob 866 Retired: passive income ROCKS

round the sub totals to two(2) decimal places
the totals are 10.216 and 13.077 (or similar) displayed to two decimal places

round(10.216+13.076,2) = 23.29
round(10.216,2) + round(13.077,2) = 23.30