kingnutter Posted May 14, 2010 Share Posted May 14, 2010 Hi everyone, The JQ form in tracks.php below is working fine on first submit. However a subsequent entry will append (and be entered into my database add_track_to_db.php) twice. A third time it will do it three times etc. Should I be clearing variables somehow or is a page refresh necessary? Any thoughts welcome, Thanks KN tracks.php <?php define ('ROOT', $_SERVER['DOCUMENT_ROOT']); // start session. Put it above define /* session_start('username'); $username = ($_SESSION['username']); */ ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta http-equiv="Content-Language" content="EN" /> <meta name="charset" content="ISO-8859-1" /> <meta name="robots" content="index,follow" /> <meta name="copyright" content="Copyright © 2010" /> <link rel="shortcut icon" href="../images/favicon.ico" type="images/favicon" /> <link type="text/css" href="/style/mojo_home.css" rel="stylesheet" /> <script src="/style/jquery-1.4.2.min.js" type="text/javascript"></script> <script type="text/javascript" src="/style/prepareImageSwap.js"></script> </head> <body> <?php if (isset($_POST['submit'])) { // nothing happens with these errors yet. Could apend to form or just highlight bad fields in red. $errorList = array(); if (trim($_POST['track_no']) == '') { $errorList[] = 'Invalid Entry: Track No.'; } if (trim($_POST['track_title']) == '') { $errorList[] = 'Invalid Entry: Track Title'; } if (trim($_POST['track_artist']) == '') { $errorList[] = 'Invalid Entry: Track Artist'; } // Check for errors. If none found go to add_to_db page and insert data. if (sizeOf($errorlist) == 0) { $moj_id = $_POST['moj_id']; $track_no = ($_POST['track_no']); $track_title = ($_POST['track_title']); $track_artist = ($_POST['track_artist']); $track_asinuk = (trim($_POST['track_asinuk'])); $track_asinus = (trim($_POST['track_asinus'])); include '../includes/add_track_to_db.php'; // } dont forget to put this back when reinstating error check } } ?> <div id = "wrapper"> <div id = "left"> <?php include (ROOT.'/includes/header.php'); include (ROOT.'/includes/conf.php'); // Check for issue number if(!isset($_GET['id']) || trim($_GET['id'] == '')) { trigger_error('No issue present' . mysql_error($db), E_USER_ERROR); } // Open DB connection $connection = mysql_connect($host, $user, $pass) or trigger_error('Unable to connect: ' . mysql_error($connection), E_USER_ERROR); // Select database mysql_select_db($db) or trigger_error('Unable to select database: ' . mysql_error($connection), E_USER_ERROR); // Retrieve current "issue" (Will be project dependent too) $id = $_GET['id']; $query = " SELECT moj_title, moj_date, moj_issue, moj_summary FROM mojocd WHERE moj_id = '$id'"; $result = mysql_query($query) or trigger_error('Query failed: ' . mysql_error($connection), E_USER_ERROR); // There should only be one issue if (mysql_num_rows($result) > 0) { while($row = mysql_fetch_object($result)){ ?> <p /> <div id="cover"> <img src="../images/<?php echo $id; ?>.jpg" width="200" height="200" alt="Mojo CD: <?php echo $row->moj_title; ?>" title="mojo CD: <?php echo $row->moj_title; ?>"/> </div> <!-- closes cover --> <div id="cover-text"> <h1 class="top"><?php echo $row->moj_title; ?></h1> <h2 class="top"><font size="4">Issue No. <?php echo $row->moj_issue; ?> (<?php echo $row->moj_date; ?>) </font></h2> <b><?php echo $row->moj_summary; ?></b> <?php } // end while } // end if else { ?> <font size="-1">NO ISSUE PRESENT</font> <?php } // end else ?> </div> <!-- close cover-text --> <div id = "content"> <?php // Retrieve the tracks $id = $_GET['id']; $query = " SELECT track_id, track_no, track_title, track_artist, track_asinuk, track_asinus FROM tracks WHERE moj_id = '$id' ORDER BY track_no "; $result = mysql_query($query) or trigger_error('Query failed: ' . mysql_error($connection), E_USER_ERROR); ?> <p /> <?php // if records present if (mysql_num_rows($result) > 0) { ?> <p class="strap"><b>Links go directly to full artist's album on which each track appears</b> <!-- removed to allow simple list while experimenting <div="tracks-table"> <p> <table class = "tracks"> --> <ul id="tracks"> <?php while($row = mysql_fetch_object($result)) { echo '<li>' . $row->track_no . ': ' . $row->track_title . ' - ' . $row->track_artist . ' ::: UK:' . $row->track_asinuk . ' ::: US:' . $row->track_asinus . '</li>'; } // end while echo '</ul>'; } // end if (rows present) else { echo '<p /><b>NO TRACKS ENTERED.</b>'; } // end else ?> <a href="add_track.php?id=<?php echo $id; ?>" id="add">Add a "track"</a><p /> <!-- FORM CODE GOES HERE. IDEALLY IT WILL DROP OUT AS ANOTHER TABLE ITEM IN REAL THING $_SERVER['PHP_SELF']--> <div id="form_block"> <form action="tracks.php?id=<?php echo $id; ?>" method="post" id="form" name="form"> <input type="hidden" name="moj_id" id="moj_id" value="<?php echo $id; ?>"> <label for="track_no">Track No:</label> <input type="text" size="4" maxlength="4" name="track_no" id="track_no" value="<?php if (sizeOf($errorlist)== 0) { echo $_POST['track_no']; } ?>" /><br /> <!-- add this IF to all --> <label for="track_title">Track Title:</label> <input type="text" size="50" maxlength="254" name="track_title" id="track_title" value="<?php if (sizeOf($errorlist)== 0) { echo $_POST['track_title']; } ?>" /><br /> <label for="track_artist">Track Artist:</label> <input type="text" size="50" maxlength="254" name="track_artist" id="track_artist" value="<?php if (sizeOf($errorlist)== 0) { echo $_POST['track_artist']; } ?>" /><br /> <label for="track_asinuk">Amazon Asin UK:</label> <input type="text" size="50" maxlength="254" name="track_asinuk" id="track_asinuk" value="<?php if (sizeOf($errorlist)== 0) { echo $_POST['track_asinuk']; } ?>" /><br /> <label for="track_asinus">Amazon Asin US:</label> <input type="text" size="50" maxlength="254" name="track_asinus" id="track_asinus" value="<?php if (sizeOf($errorlist)== 0) { echo $_POST['track_asinus']; } ?>" /> <input type="submit" name="submit" id="submit" value="Add" /> </form> </div> <!-- end form_block --> <p /> <?php if (isset ($_GET['fromsearch'])) { ?> <br /> <form> <input type="button" value="Back to search results" onClick="history.back()"> </form> <?php } //end if (fromsearch) include(ROOT.'/includes/random_cds.php'); ?> </div> <!-- closes Content --> <!-- PAGE SPECIFIC CONTENT ENDS HERE --> <?php // Sidebar, Tag Cloud and Footer as include include(ROOT.'/includes/footer.php'); ?> </div> <!-- closes left --> <div id = "right"> <?php include (ROOT.'/includes/extra.php'); ?> </div> <!-- closes right --> </div> <!-- closes wrapper --> <?php include_once(ROOT.'/includes/analyticstracking.php'); ?> <script type="text/javascript" charset="utf-8"> $(function(){ $('a#add').click(function(){ $('#form_block').slideDown(1000); $('#submit').click(function() { var moj_id = $('#moj_id').val(), track_no = $('#track_no').val(), track_title = $('#track_title').val(), track_artist = $('#track_artist').val(), track_asinuk = $('#track_asinuk').val(), track_asinus = $('#track_asinus').val(); $.post('../includes/add_track_to_db.php', { 'moj_id' : moj_id, 'track_no' : track_no, 'track_title' : track_title, 'track_artist' : track_artist, 'track_asinuk' : track_asinuk, 'track_asinus' : track_asinus }, function(r) { $('<div class="overlay"></div>') .appendTo('#form_block') .fadeIn(1000, function() { $('<li>' + r + '</li>') .appendTo('ul#tracks') .hide() .slideDown(1000, function(){ $('#form_block').slideUp(1000, function() { $('.overlay').hide() }); }); // clears form document.getElementById('form').reset('track_no', 'track_title', 'track_artist', 'track_asinuk', 'track_asinus'); // }); } ); return false; // disable submit click }); return false; }); }); </script> </body> </html> add_track_to_db.php <?php include ('conf.php'); if(IS_AJAX) { $moj_id = $_POST['moj_id']; $track_no = $_POST['track_no']; $track_title= $_POST['track_title']; $track_artist= $_POST['track_artist']; $track_asinuk= "Its JQ"; // $_POST['track_asinuk']; $track_asinus= $_POST['track_asinus']; } $connection = mysql_connect($host, $user, $pass) or trigger_error('Unable to connect: ' . mysql_error($connection), E_USER_ERROR); // select database mysql_select_db($db) or trigger_error('Query failed: ' . mysql_error($connection), E_USER_ERROR); // generate and execute query $query = "INSERT INTO tracks(moj_id, track_no, track_title, track_artist, track_asinuk, track_asinus) VALUES ('$moj_id', '$track_no', '$track_title', '$track_artist', '$track_asinuk', '$track_asinus')"; $result = mysql_query($query) or trigger_error('Query failed: ' . mysql_error($connection), E_USER_ERROR); $_POST = array(); if (!$result){ echo "There was an error on the add_track_to_db page"; } else{ if(IS_AJAX) { /* echo '<h3>' . $track_title . '</h3>'; echo '<li>' . $row->track_no . ': ' . $row->track_title . ' - ' . $row->track_artist . ' ::: UK:' . $row->track_asinuk . ' ::: US:' . $row->track_asinus . '</li>'; echo '<p>' . $track_artist . '</p>'; */ echo $track_no . ': ' . $track_title . ' - ' . $track_artist . ' ::: UK:' . $track_asinuk . ' ::: US:' . $track_asinus; } /* else{ header("location:ROOT.'/pages/tracks.php?id=$moj_id'"); } */ } ?> Link to comment https://forums.phpfreaks.com/topic/201783-js-jq-variable-problem/ Share on other sites More sharing options...
kingnutter Posted May 16, 2010 Author Share Posted May 16, 2010 OK I've done a bit of error checking and I'm pretty sure the error is to do with this section: $('#submit').click(function() { var moj_id = $('#moj_id').val(); var track_no = $('#track_no').val(); var track_title = $('#track_title').val(); var track_artist = $('#track_artist').val(); var track_asinuk = $('#track_asinuk').val(); var track_asinus = $('#track_asinus').val(); $.post('../includes/add_track_to_db.php', { 'moj_id' : moj_id, 'track_no' : track_no, 'track_title' : track_title, 'track_artist' : track_artist, 'track_asinuk' : track_asinuk, 'track_asinus' : track_asinus }, ... I expect it is due to the fact that as the page is unrefreshed, the script is actioning previous submit clicks as well. So what I need to know is how do I only allow it to fire the post once only for each submit click? Cheers, KN Link to comment https://forums.phpfreaks.com/topic/201783-js-jq-variable-problem/#findComment-1059164 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.