Avatar billede dennisnn Nybegynder
21. april 2008 - 19:10 Der er 13 kommentarer og
1 løsning

Valider tekstboks

Heysan

Nogen der kan fortælle mig hvorfor dette script ikke virker? Man kan poste en besked uden at den melder fejl i nogen af felterne. Skal desuden have feltet "calculate" til at tjekke om man har regnet regnestykket 2*1 rigtigt ud. hvordan filan gør jeg det?

Dennis

<?
if ($side == "guestbook") {
?>
            </span>
            <table width="100%" border="0" class="Main_Text">
              <tr>
                <td><p>
                  <?php
// include the database configuration and
// open connection to database
include 'library/config.php';
include 'library/opendb.php';

// check if the form is submitted
if(isset($_POST['btnSign']))
{
    // get the input from $_POST variable
    // trim all input to remove extra spaces
    $name    = trim($_POST['txtName']);
    $email  = trim($_POST['txtEmail']);
    $url    = trim($_POST['txtUrl']);
    $message = trim($_POST['mtxMessage']);
    $calculate = trim($_POST['txtcalculate']);
   
    // escape the message ( if it's not already escaped )
    if(!get_magic_quotes_gpc())
    {
        $name    = addslashes($name);
        $message = addslashes($message);
        $calculate = addslashes($calculate);
    }
   
    // if the visitor do not enter the url
    // set $url to an empty string
    if ($url == 'http://')
    {
        $url = '';
    }
   
    // prepare the query string
    $query = "INSERT INTO guestbook (name, email, url, message, calculate, entry_date) " .
            "VALUES ('$name', '$email', '$url', '$message', '$calculate', current_date)";

    // execute the query to insert the input to database
    // if query fail the script will terminate       
    mysql_query($query) or die('Error, query failed. ' . mysql_error());
   
    // redirect to current page so if we click the refresh button
    // the form won't be resubmitted ( as that would make duplicate entries )
    header('Location: ' . $_SERVER['REQUEST_URI']);
   
    // force to quite the script. if we don't call exit the script may
    // continue before the page is redirected
    exit;
}
?>

                  <script language="JavaScript">
/*
    This function is called when
    the 'Sign Guestbook' button is pressed
    Output : true if all input are correct, false otherwise
*/
function checkForm()
{
    // the variables below are assigned to each
    // form input
    var gname, gemail, gurl, gmessage. gcalculate;
    with(window.document.guestform)
    {
        gname    = txtName;
        gemail  = txtEmail;
        gurl    = txtUrl;
        gmessage = mtxMessage;
        gcalculate = txtCalculate;
    }
   
    // if name is empty alert the visitor
    if(trim(gname.value) == '')
    {
        alert('Please enter your name');
        gname.focus();
        return false;
    }
   
    // if calculate is empty alert the visitor
    else if(trim(gcalculate.value) == '')
    {
        alert('Please do the calculation');
        gcalculate.focus();
        return false;
    }
   
    // alert the visitor if email is empty or the format is not correct
    else if(trim(gemail.value) != '' && !isEmail(trim(gemail.value)))
    {
        alert('Please enter a valid email address or leave it blank');
        gemail.focus();
        return false;
    }
    // alert the visitor if message is empty
    else if(trim(gmessage.value) == '')
    {
        alert('Please enter your message');
        gmessage.focus();
        return false;
    }
    else
    {
        // when all input are correct
        // return true so the form will submit       
        return true;
    }
}

/*
Strip whitespace from the beginning and end of a string
Input  : a string
Output : the trimmed string
*/
function trim(str)
{
    return str.replace(/^\s+|\s+$/g,'');
}

/*
Check if a string is in valid email format.
Input  : the string to check
Output : true if the string is a valid email address, false otherwise.
*/
function isEmail(str)
{
    var regex = /^[-_.a-z0-9]+@(([-a-z0-9]+\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i;
    return regex.test(str);
}
                  </script>

</p>
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                  <form method="post" name="guestform">
<table width="550" border="0" cellpadding="2" cellspacing="1">
  <tr>
  <td width="100">Name *</td> <td>
    <input name="txtName" type="text" id="txtName" size="30" maxlength="30"></td>
</tr>
  <tr>
  <td width="100">Email</td>
  <td>
    <input name="txtEmail" type="text" id="txtEmail" size="30" maxlength="50"></td>
</tr>
  <tr>
  <td width="100">Website URL</td>
  <td>
    <input name="txtUrl" type="text" id="txtUrl" value="http://" size="30" maxlength="50"></td>
</tr>
  <tr>
  <td width="100">Message *</td> <td>
    <textarea name="mtxMessage" cols="80" rows="5" id="mtxMessage"></textarea></td>
</tr>
  <tr>
  <td width="100">&nbsp;</td>
  <td>Calculate this: 2*1=?</td>
</tr>
  <tr>
    <td>&nbsp;</td>
    <td><input name="txtcalculate" type="text" id="txtcalculate" size="30" maxlength="30" /></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input name="btnSign" type="submit" id="btnSign" value="Sign Guestbook" onclick="return checkForm();" /></td>
  </tr>
</table>
</form>
<?php


// =======================
// Show guestbook entries
// =======================

// how many guestbook entries to show per page
$rowsPerPage = 5;

// by default we show first page
$pageNum = 1;

// if $_GET['page'] defined, use the value as page number
if(isset($_GET['page']))
{
    $pageNum = $_GET['page'];
}

// counting the offset ( where to start fetching the entries )
$offset = ($pageNum - 1) * $rowsPerPage;

// prepare the query string
$query = "SELECT id, name, email, url, message, DATE_FORMAT(entry_date, '%d.%m.%Y') ".
        "FROM guestbook ".
        "ORDER BY id DESC ".            // using ORDER BY to show the most current entry first
        "LIMIT $offset, $rowsPerPage";  // LIMIT is the core of paging

// execute the query
$result = mysql_query($query) or die('Error, query failed. ' . mysql_error());

// if the guestbook is empty show a message
if(mysql_num_rows($result) == 0)
{
?>
<p>  Guestbook is empty </p>
<?php
}
else
{
    // get all guestbook entries
    while($row = mysql_fetch_array($result))
    {
        // list() is a convenient way of assign a list of variables
        // from an array values
        list($id, $name, $email, $url, $message, $date) = $row;

        // change all HTML special characters,
        // to prevent some nasty code injection
        $name    = htmlspecialchars($name);
        $message = htmlspecialchars($message);       

        // convert newline characters ( \n OR \r OR both ) to HTML break tag ( <br> )
        $message = nl2br($message);
?>
<table width="550" border="0" cellpadding="0" cellspacing="0" class="Main_Text">
<tr>
  <td width="80" align="left"> <a href="mailto:<?=$email;?>" class="email">
  <?=$name;?>
  </a> </td>
  <td align="right"><small>
  <?=$date;?>
  </small></td>
</tr>
<tr>
  <td colspan="2">
  <?=$message;?>
  <?php
          // if the visitor input her homepage url show it
        if($url != '')
        { 
            // make the url clickable by formatting it as HTML link
            $url = "<a href='$url' target='_blank'>$url</a>";
?>
  <br> <small>Homepage : <?=$url;?></small>
 
 
 
  <?php
        }
?>
  <br />
  <img src="dots.gif" />  </td>
</tr>
</table>
<br>
<?php
    } // end while

// below is the code needed to show page numbers

// count how many rows we have in database
$query  = "SELECT COUNT(id) AS numrows FROM guestbook";
$result  = mysql_query($query) or die('Error, query failed. ' . mysql_error());
$row    = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];

// how many pages we have when using paging?
$maxPage  = ceil($numrows/$rowsPerPage);
$nextLink = '';

// show the link to more pages ONLY IF there are
// more than one page
if($maxPage > 1)
{
    // this page's path
    $self    = $_SERVER['PHP_SELF'];
   
    // we save each link in this array
    $nextLink = array();
   
    // create the link to browse from page 1 to page $maxPage
    for($page = 1; $page <= $maxPage; $page++)
    {
        $nextLink[] =  "<a href=\"$self?side=guestbook&page=$page\">$page</a>";
    }
   
    // join all the link using implode()
    $nextLink = "Go to page : " . implode(' &raquo; ', $nextLink);
}

// close the database connection since
// we no longer need it
include 'library/closedb.php';

?>
<table width="550" border="0" cellpadding="2" cellspacing="0">
<tr>
  <td align="right" class="text">
  <?=$nextLink;?>  </td>
</tr>
</table>
<?php
}
?>

                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                  </div>
                <span class="style17"></span></td>
              </tr>
            </table>
            <?
}
?>
Avatar billede w13 Novice
21. april 2008 - 19:15 #1
Måske hvis du flytter:

onclick="return checkForm();"

op i form-tag'et?
Avatar billede w13 Novice
21. april 2008 - 19:16 #2
Og til regnestykker kan du rette:

    // if calculate is empty alert the visitor
    else if(trim(gcalculate.value) == '')
    {
        alert('Please do the calculation');
        gcalculate.focus();
        return false;
    }

til:

    // if calculate is empty alert the visitor
    else if(trim(gcalculate.value) == '')
    {
        alert('Please do the calculation');
        gcalculate.focus();
        return false;
    }

    else if(trim(gcalculate.value)!="2"){
        alert('The calculation was incorrect!');
        gcalculate.focus();
        return false;
    }
Avatar billede dennisnn Nybegynder
21. april 2008 - 19:28 #3
Hmm forstår ik helt hvad du mener i den første besked?
Avatar billede w13 Novice
21. april 2008 - 19:32 #4
Mener:
--------------------------
Ret:
    <td><input name="btnSign" type="submit" id="btnSign" value="Sign Guestbook" onclick="return checkForm();" /></td>
til:
    <td><input name="btnSign" type="submit" id="btnSign" value="Sign Guestbook" /></td>

Og ret:
                  <form method="post" name="guestform">                  <form method="post" name="guestform" onclick="return checkForm();">
til:
                  <form method="post" name="guestform" onclick="return checkForm();">
Avatar billede w13 Novice
21. april 2008 - 19:32 #5
Hov:

*Og ret:
                  <form method="post" name="guestform">
til:
                  <form method="post" name="guestform" onclick="return checkForm();">
Avatar billede dennisnn Nybegynder
21. april 2008 - 21:26 #6
Problemet er det samme :/ tjek evt. http://blog.danziger.dk/index.php under guestbook
Avatar billede w13 Novice
21. april 2008 - 21:28 #7
Hvis du slår visning af JavaScript-fejl til (og det er en rigtig god idé, når man arbejder med hjemmesider), så får du at vide, at der er et problem med et tegn i linjen:

    var gname, gemail, gurl, gmessage. gcalculate;

som jo skulle have været:

    var gname, gemail, gurl, gmessage, gcalculate;

Den stopper derved alle andre scripts fra at køre, og det burde være fejlen.
Avatar billede dennisnn Nybegynder
21. april 2008 - 22:10 #8
Hmm sys ik jeg kan slå det til i Safari (bruger mac) og den reagerer stadig på samme måde :(
Avatar billede w13 Novice
21. april 2008 - 22:22 #9
Så er det derfor. =) Jeg ved faktisk ikke, hvordan man får vist fejl i Safari, hvis man da overhovedet kan.
Avatar billede w13 Novice
21. april 2008 - 22:25 #10
Prøv lige at rette:

    <td><input name="txtcalculate" type="text" id="txtcalculate" size="30" maxlength="30" /></td>

til:

    <td><input name="txtCalculate" type="text" id="txtcalculate" size="30" maxlength="30" /></td>

Den brokker sig over, at txtcalculate står med små bogstaver, når den prøver at validere på "txtCalculate", dvs. med stort C. (JavaScript er jo casesensitive.)
Avatar billede olebole Juniormester
21. april 2008 - 22:35 #11
<ole>

Du bør bruge en browser, når du udvikler ... så kan du altid teste i Safari bagefter  ;o)

/mvh
</bole>
Avatar billede dennisnn Nybegynder
21. april 2008 - 22:44 #12
Tror sgu det virker nu! :D Der skal bare ikke meget til før den brokker sig, men det virker :) Tak skal du ha!
Avatar billede dennisnn Nybegynder
21. april 2008 - 22:52 #13
Sådan, smed lige onclick="return checkForm();" tilbage på plads igen, så brokker den sig først når man poster. igen tusind tak
Avatar billede w13 Novice
22. april 2008 - 07:58 #14
Og tak for point! :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester