Jump to content

Malevolence

Members
  • Posts

    102
  • Joined

  • Last visited

    Never

Everything posted by Malevolence

  1. I had to fix a couple of things, but the main things were PHP upload limits in the php.ini file(s) as well as the mysql config to allow such a big request. I know that normal file storage is reccomended but this way is better for what I am doing, and the site is very exclusive and protected so not just anyone will upload several server-speed-crunching files. Solved! - I guess...
  2. I never thought of those optional fields however for the current CMS I won't need all that data, but perhaps in my other CMS I will use it. Thanks for the info. gnet, seeing as you seem so confused- and I'm not sure where you are at with coding php, can I have the database layout for the current table you have (as well as the table name) and all of your login script minus the db password and username? that way we can give you a code to work with straight off the bat rather than us giving you snippets all over the show.
  3. darn you ignace! foiled again! Absolutely fair enough gnet, Ignace has clearly been learning php longer than me, kudos to him. If you have a webpage you can add a mysql table on, create one - it could have failed because the table `users` has been taken. -Try creating `activeUsers`, there will be 2 fields (as phpmyadmin and similar control panels require this number with the table name). -Then you need to make field 1 "users_last_click_at" and make the field type 'DATETIME' under Date and Time in the list. -Then name the other field "users_id" and make this field a VARCHAR or SMALLINT (small integer). If varchar, make it about 6 chars wide. Shove this at the top of every PHP page: (you may find it worth converting ALL your pages to .php by renaming the filetype as it could get sloppy) <?php include(sesschk.php); include(dbconnect.php); $q = "UPDATE users SET users_last_click_at = now() WHERE users_id = $id"; $q2 = "SELECT * FROM users WHERE users_last_click_at BETWEEN now() - 300 AND now()"; mysql_query($q) or die("MySQL Error: ".$mysql_error()); $r2 = mysql_query($q2); $u = mysql_num_rows($r2); ?> the includes at the top will include your 'logged-in' checker, so you may want to replace this line with your code or the file you use. The same goes for the database connection file, you may want to put your db connection script in a similarly named file or replace the line with your code. - It is a lot easier to put them in files to include to be honest. To show how many users are logged in: Users online: <?php echo $u; ?>
  4. Curse you ignace! curse you! He's right, my post is a waste of time. Lol, Do I get banned for "self-flaming"?
  5. When I say fails, it doesn't seem to recognise a file has been uploaded, however I echoed $_FILES['supload']['tmp_name'] and found that nothing was there. I then uploaded a small jpg file, which successfully uploaded and the if statement did work. The problem therein lies that either mp3 files aren't allowed by my home webserver (unlikely) or that the filesize cannot be handled by my webserver. I will look at httpd.conf and see what I can fix, if anyone can point me to the main things I should be looking for, that would be helpful. Also, would 6-10mb be an allowed upload size on a conventional web host? seeing as you can't change this factor if you're paying for a host rather than a home-hosted server.
  6. Sorry I seemed to have answered the wrong question... Ignace's table seems a bit much just to see how many people are online, but would work with the correct PHP code (something he didn't include). What you could do is create a file somewhere in your root directory, something like userLog.dat or userLog.txt and then have some php code open the file, add an entry in a new line with an IP address (or a username from a session variable) and a timestamp on it. Then you'd parse the file finding every entry that is recent (your choice of time) and only allow one ip per entry in that timespan. Then you'd have the amount of users online recently. I would have to write this code up if you aren't sure how, or I could point you to a tutorial. The other downside is that you'd have to delete the contents of this file after a while or it would become huge.
  7. On the basis that you've used sessions for the login: sessChk.inc.php: <?php if (!isset($_SESSION['sessName']) { header("Location: login.php"); exit; } $user['name'] = $_SESSION['sessName']; This is how you would create that session in the login parser page: session_start(); $_SESSION['sessName'] = $username; Simples! By the way, replace $username with the username found in the login form i.e. $_POST['usr'], replace sessName in the sessions with whatever you like. Hope that helps!
  8. 1. Is $id set? 2. Are there more than 2 rows with that id? 3. Good practise to use backticks (`) the button above the tab button around SQL Tables e.g. SELECT genre_id FROM `genrelinked` WHERE etc.... although this wont fix your problem. That's all I can help you with as I don't understand the foreach statement :\ lol. http://www.brainbell.com/tutors/php/php_mysql/Using_foreach_Loops_with_Arrays.html - this looks helpful and I'm starting to understand it already =D oh and I thought of ignace's answer but then I thought the associative bit is useless however he may be correct....
  9. I have a form that lets one upload a file. If there is no file present, then the if statement only uploads the strings from the other fields. If however, the file is present, then the script will upload the text and parse the file into binary which is then uploaded to the database alongside the simple string data. The HTML for the Form: <form enctype="multipart/form-data" name="addSong" action="addSong.php" method="POST"> <div style="float: right; font-size: 0.9em;" align="right"> <strong>Tip</strong> | Use the tag buttons found at the bottom left of the toolbar to structure your song. </div> Song Title: <input type="text" class="regField" name="stitle" value="" tabindex="1" /> <br /><br /> <textarea cols="95" rows="20" name="slyrics" value="" tabindex="2"></textarea> <br /> <div align="right" style="float: right;"> <input type="checkbox" name="sdraft" value="true"> Save as draft? <input name="submit" type="submit" value="Save" /> </div> Upload: <input type="hidden" name="MAX_FILE_SIZE" value="20000000" /><input name="supload" type="file" /> </form> The PHP IF Statement that fails: (the rest is irrelevant) if(!empty($_FILES['supload']) && $_FILES['supload']['size'] > 0) // If the upload field is not empty, set up the file upload. { // ^^^ THE ABOVE BIT DOESNT WORK ^^^ ... ... } else // Otherwise just upload the lyrics { ... ... } If anyone can help, thanks in advance.
  10. just ensure you use the code I put in my last post to retrieve their ip address, as that will ensure that you're logging their true ip whether they're behind a proxy or not.
  11. I'm surprised mine didn't work, so long as you define the session with: session_start(); $_SESSION['bob'] = "storeanythingyoulike"; you can call it any time on that website echo $_SESSION['bob'] and 1 the session returns true and 2 it stores "storeanythingyouilke" which is useful if you wanna call a username or match a user id against a database in order to refer to that user in something they post.
  12. Thanks, I'll have a look at those, the file upload bit was just from a tutorial example so I didn't go over those. I will have a look at the error returned, I would have thought it would have echoed the error anyway... thanks for the quick reply.
  13. You can try doing this instead too: session_start(); // PHP will tell you if its already been set in an error. if so, delete this line $_SESSION['passed'] = true; You would only put it in login.php as that's the page that will destroy the session (obviously, you could in essence put it in every page, but in pages locked to members only, the session would be destroyed and they would be greeted with a blank page. By only having it in login.php it simply shows them the login screen after they've logged out.
  14. @MrAdam - You can't work with sessions until you initialise the session function. @craigtolputt: Use an if statement to detect if ?act=logout was sent to the page and then delete the session. <?php //include the global settings require_once('../settings.php'); //hold the target url $_refURL = $_SERVER['QUERY_STRING']; //if the query string is empty, use chooseTable if(empty($_refURL)){$_refURL = 'chooseTable.php';} $_GET['act'] = strip_tags($_GET['act']); // Filter out any html found in the get variable. if(isset($_GET['act']) && $_GET['act'] == "logout") // If there is an action set and it is equal to logout... { session_start(); unset $_SESSION['passed']; // Unset the session. // we won't destroy the session as any other sessions linked to this site will be lost too. } if(isset($_POST['submit'])){ //reset the target url if(isset($_POST['ref'])){$_refURL = $_POST['ref'];} //init the errors $err = "the following errors occurred:\n"; if(!empty($_POST['user'])){ $_un = $_POST['user']; }else{ $err .= "Username was not set.\n"; } if(!empty($_POST['pwd'])){ $_pw = $_POST['pwd']; }else{ $err .= "Password was not set.\n"; } //check for match if(array_key_exists($_un, $users_login)){ if($users_login[$_un] == $_pw){ session_register('passed'); header("Location: $_refURL"); }else{ $error= 'The password was not correct. Please try again.'; } }else{ $error= 'The username and/or password was not correct. Please try again.'; } } ?> <!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><?=$pageTitle?></title> <style type="text/css" media="all">@import "../blogStyles.css";</style> <style type="text/css" media="all">@import "http://www.tktest.co.uk/clinigen/news_articles/cms/css/screen.css";</style> <style type="text/css" media="all">@import "http://www.tktest.co.uk/clinigen/stylesheet.css";</style> <script type="text/javascript" src="js/inits.js"></script> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <!--******* Wrapper *******--> <div id="wrap"> <!--******* Header *******--> <div id="logo"> <a href="../../biopharmaceutical_partnering.php" target="_self">CLINIGEN</a></div> <div id="bullets"> <p>Management and supply of unlicensed and specialist medicines<br /> Structured implementation of named patient programmes<br /> Partnership approach to Global Market Access Planning<br /> Patient Access and Product Life Cycle support </p> </div> <div id="slogan"> <h1>UNLICENSED WITHOUT UNCERTAINTY</h1> </div> <!--******* END - Header - END *******--> <!--******* Top Image *******--> <div id="topimg"> <h1>Unlicensed and Specialist Medicine Management and Supply</h1> </div> <!--******* END - Top Image - END *******--> <!--******* Navigation *******--> <div id="nav"> <ul id="navbut"> <li><a href="../../biopharmaceutical_partnering.php">Home Page</a></li> <li><img src="../images/dot.png" alt="" /></li> <li><a href="../../about_clinigen.php">About Clinigen</a></li> <li><img src="../images/dot.png" alt="" /></li> <li><a href="../../global_named_patient_distribution.php">Global Named Patient Distribution</a></li> <li><img src="../images/dot.png" alt="" /></li> <li><a href="../../patient_access_and_product_life_cycle_support.php">Patient Access & Product Life Cycle Support</a></li> <li><img src="../images/dot.png" alt="" /></li> <li><a href="../../market_access_planning.php">Market Access Planning</a></li><br /> <li><a href="../../our_people.php">Our People</a></li> <li><img src="../images/dot.png" alt="" /></li> <li><a href="../../case_studies.php">Case Studies</a></li> <li><img src="../images/dot.png" alt="" /></li> <li><a href="../../management_and_supply.php">Management & Supply</a></li> <li><img src="../images/dot.png" alt="" /></li> <li><a href="../../partnerships.php">Partnerships</a></li> <li><img src="../images/dot.png" alt="" /></li> <li><a href="../../stakeholders.php">Stakeholders</a></li> <li><img src="../images/dot.png" alt="" /></li> <li><a href="../../regulatory.php">Regulatory</a></li> <li><img src="../images/dot.png" alt="" /></li> <li><a href="../news_articles/">News/Articles</a></li> <li><img src="../images/dot.png" alt="" /></li> <li><a href="../../contact_us.php">Contact Us</a></li> </ul> </div> <!--******* END - Navigation - END *******--> <!--******* Content *******--> <div id="content"> <div id="contact"> <form action="<?=$_SERVER['PHP_SELF']?>" method="POST" > <h1>LOGIN</h1> <input type="hidden" name="ref" value="<?=$_refURL ?>" /> <br /> <label for=phone accesskey=P>USERNAME:</label> <input type="text" name="user" /> <br /> <label for=phone accesskey=P>PASSWORD:</label> <input type="password" name="pwd" /> <br /> <input type="submit" name="submit" value="Submit" id="contactus" class="submit" /><br /> <?=$error ?> </form> </div> </div> <!--******* END - Content - END *******--> <!--******* Footer *******--> <div id="footer"> <hr /> <p class="copyright">© 2009 Clinigen Online</p> <a href="http://www.tolputtkeeton.co.uk" target="_blank" class="tolputt">Designed by Tolputt Keeton</a> <div id="nav"> <ul id="navbutbot"> <li><a href="../../biopharmaceutical_partnering.php">Home Page</a></li> <li><img src="../images/greydot.png" alt="" /></li> <li><a href="../../about_clinigen.php">About Clinigen</a></li> <li><img src="../images/greydot.png" alt="" /></li> <li><a href="../../global_named_patient_distribution.php">Global Named Patient Distribution</a></li> <li><img src="../images/greydot.png" alt="" /></li> <li><a href="../../patient_access_and_product_life_cycle_support.php">Patient Access & Product Life Cycle Support</a></li> <li><img src="../images/greydot.png" alt="" /></li> <li><a href="../../market_access_planning.php">Market Access Planning</a></li><br /> <li><a href="../../our_people.php">Our People</a></li> <li><img src="../images/greydot.png" alt="" /></li> <li><a href="../../case_studies.php">Case Studies</a></li> <li><img src="../images/greydot.png" alt="" /></li> <li><a href="../../management_and_supply.php">Management & Supply</a></li> <li><img src="../images/greydot.png" alt="" /></li> <li><a href="../../partnerships.php">Partnerships</a></li> <li><img src="../images/greydot.png" alt="" /></li> <li><a href="../../stakeholders.php">Stakeholders</a></li> <li><img src="../images/greydot.png" alt="" /></li> <li><a href="../../regulatory.php">Regulatory</a></li> <li><img src="../images/greydot.png" alt="" /></li> <li><a href="../news_articles/">News/Articles</a></li> <li><img src="../images/greydot.png" alt="" /></li> <li><a href="../../contact_us.php">Contact Us</a></li> </ul> </div> </div> <!--******* END - Footer - END *******--> </div> <!--******* END - Wrapper - END *******--> </body> </html> Shove this anywhere in your site (obviously in the logged in areas) <a href="login.php?act=logout" alt="Log out">Log Out</a> Hope this helps.
  15. I'm not sure if printing within a function works. If it does, you get an instant result, whereas you have far more to play with if its returned. ... } else { $errMsg = "<p style='font: verdana;font-size:10px;font-weight:bold;color:red;'>Error: ". $error[$error_id] ."</p>"; return $errMsg; } } ... $err = WriteError(2); print $err; but you could also pass the error on in a GET variable or session.
  16. maybe try $error['$error_id'] instead of $error[$error_id]. - if you have done this: WriteError("1"); then 1 is a varchar rather than a number. You have to treat it like text now. If you do WriteError(1); it will be set as a number and your current code should work, however you could just change the function to accept a varchar (hence the $error['$error_id'] with the inverted commas) Also, it may be better practise to return a variable with that print statement and then echo the function. i.e. echo WriteError("5"); ... } else { $errMsg = "<p style='font: verdana;font-size:10px;font-weight:bold;color:red;'>Error: ". $error[$error_id] ."</p>"; return $errMsg; } } ...
  17. I dunno if this is true but its a possibility that there are too many people to each have a static ip. Also, its a lot safer having a dynamic IP. I use freedns.afraid.org and then use one of their background-service ip updaters that runs with the other services (rather than an app) this worked best for me when I had a dynamic ip- never really failed me either. There is a way you can get the user's actual IP even if they're behind a proxy. I found this code, and it's probably the most popular approach. function getRealIpAddr() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip=$_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //this bit is a proxy-forwarded address { $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip=$_SERVER['REMOTE_ADDR']; } return $ip; } I will say that if you just use email and ip address as protection, it's not gonna stop people. What you can do is have an admin approve section before that person can actually register, however that requires an admin to physically activate their account which could mean them having to wait. Waiting is bad in this day and age. What you can do is store a cookie, log their IP, check for a valid e-mail address (send email with activation link) and have a Captcha to stop adbots/spambots from signing up. The Cookie means that if the user has a dynamic IP, they will still not be able to access the site based on the script stopping anyone with that cookie in their browser. Obviously if they clear their cookies, this is rendered useless, but it's definately another stage of security- plus most rulebreakers (i.e. petty crimes like flaming, swearing, posting a bad link) will get the idea the first 5 attempts to access the site.
  18. Probably not allowed but bump? Also I doubt the problem area is big, just run through it in notepad++ or whatever and check for errors, im stumped personally...
  19. I've now set the blob field (the file content binary field) to null and now I can insert rows within phpmyadmin without warnings... its gotta be something in this script.
  20. Sha1 is stronger encryption, yes. Also, it may be worth generating a random salt (short) and then store the salt in the database too.
  21. Hi there, I have a website I've designed and developed from the ground up. The page I am working on lets you add a song (the site is for songwriters). This page lets users add lyrics and chords as well as a title and they have the choice to upload a music file linked to that song. The final thing to note is that they can save it as a draft (checkbox). With all that in mind, the page will tell the user if he or she has 1. Missed out a field and 2. If there's been a database error. This error system works on my other pages so it's not that (however the script may be sloppy after my attempted debugging). The upload works by uploading a binary version of the file uploaded to the database in a mediumblob field. This is untested due to simpler problems getting in the way. For some reason when I type the title and fill in the lyrics field, sometimes click the draft button, I am redirected to the database error page (aka, the query was unsuccessful) I've commented the redirect out, and all I get is a white page... What could be happening? Do I need to set the file fields to null so I can submit? Is it a problem with the checkbox parsing? I am growing a bit tired of this script and need a second pair of eyes. Note that dbConn.inc.php is a valid file and works for the login script. The database works fine, the registration script works, its all good, just this page fails... Please note that session_start(); is found in the included file 'sessChk.inc.php', a page which simply checks if the user is logged in, nothing fancy there either. The standstill or error takes place under the comment '// Otherwise just upload the lyrics' is. The statements above work, perhaps its a var error? I am about to check db user privelages now... <?php include "sessChk.inc.php"; if(isset($_POST['submit'])) { $sttl = strip_tags($_POST['stitle']); $slyr = $_POST['slyrics']; if (isset($_POST['sdraft'])) { $sdra = "1"; } else { $sdra = "0"; } if (empty($sttl) || empty($slyr)) { $_SESSION['newsong'] = $sttl."|".$slyr."|".$sdra; header("location: addSong.php?err=1"); exit(); } if(!empty($_FILES['supload']) && $_FILES['supload']['size'] > 0) // If the upload field is not empty, set up the file upload. { $fileName = $_FILES['supload']['name']; $tmpName = $_FILES['supload']['tmp_name']; $fileSize = $_FILES['supload']['size']; $fileType = $_FILES['supload']['type']; $fp = fopen($tmpName, 'r'); $content = fread($fp, filesize($tmpName)); $content = addslashes($content); fclose($fp); if(!get_magic_quotes_gpc()) { $fileName = addslashes($fileName); } include("dbConn.inc.php"); $q1 = "INSERT INTO `songs` (sName, sLyrics, sFlags, sfName, sfSize, sfType, sfContent) ". "VALUES ('$sttl', '$slyr', '$sdra', '$fileName', '$fileSize', '$fileType', '$content')"; if($r1 = mysqli_query($dbConn,$q1)) { header("location: mySongs.php"); exit(); } else { //header("location: addSong.php?err=3"); exit(); } } else // Otherwise just upload the lyrics { include("dbConn.inc.php"); $q2 = "INSERT INTO `songs` (sName,sLyrics,sFlags) VALUES ('$sttl', '$slyr', '$sdra')"; if($r2 = mysqli_query($dbConn,$q2)) { header("location: mySongs.php"); exit(); } else { //header("location: addSong.php?err=3"); //exit(); } } mysqli_close($dbConn); } else if (isset($_GET['err'])) { $sessReg = explode("|",$_SESSION['newsong']); $sttl = $sessReg[0]; $slyr = $sessReg[1]; $sdra = $sessReg[2]; $err=$_GET['err']; switch($err) { case 0: $errMsg = "Sucessful Upload, There was a mistake directing you to the My Songs page, however you can <a href=\"mySongs.php\">click here</a> to see your new song."; break; case 1: $errMsg = "You have failed to fill in the Title field or the Lyrics/Chord Sheet is empty."; break; case 2: $errMsg = "There was an error uploading the file to the server. Try again later."; break; case 3: $errMsg = "There was an error submitting your song to the database. Try again later."; break; default: $errMsg = "An unknown error occured, please try again"; } // Includes the Head of the page $js['tinymce'] = true; include "head.inc.php"; ?> <!-- BEGIN PAGE --> <div class="titleBox errTitle" id="errBox"><?php echo $errMsg; ?> <span style="position:relative; top:-20px; left:-2px; float:right;"><a onClick="javascript:hidediv();"><img src="im/errx.gif" alt="Dismiss" /></a></span></div> <img src="./im/gen_now.gif" alt="generation :Now" class="nowHeading" /> <div class="mainContBox"> <div class="titleBox mainTitle">ADD A SONG</div> <div class="titleBox sideTitle">MENU</div> <div class="mainBox"> <form enctype="multipart/form-data" name="addSong" action="addSong.php" method="POST"> <div style="float: right; font-size: 0.9em;" align="right"> <strong>Tip</strong> | Use the tag buttons found at the bottom left of the toolbar to structure your song. </div> Song Title: <input type="text" class="regField" name="stitle" value="<?php echo $sttl; ?>" tabindex="1" /> <br /><br /> <textarea cols="95" rows="20" name="slyrics" tabindex="2"><?php echo $slyr; ?></textarea> <br /> <div align="right" style="float: right;"> <input type="checkbox" name="sdraft" value="true"<?php if (!empty($sdra)) { echo "checked=\"yes\""; } ?>> Save as draft? <input name="submit" type="submit" value="Save" /> </div> Upload: <input type="hidden" name="MAX_FILE_SIZE" value="20000000" /><input name="supload" type="file" /> </form> </div> <?php include "sidebar.inc.php"; ?> </div> <!-- END PAGE --> <?php // Includes the Foot of the page include "foot.inc.php"; } else { // Includes the Head of the page $js['tinymce'] = true; include "head.inc.php"; ?> <!-- BEGIN PAGE --> <img src="./im/gen_now.gif" alt="generation :Now" class="nowHeading" /> <div class="mainContBox"> <div class="titleBox mainTitle">ADD A SONG</div> <div class="titleBox sideTitle">MENU</div> <div class="mainBox"> <form enctype="multipart/form-data" name="addSong" action="addSong.php" method="POST"> <div style="float: right; font-size: 0.9em;" align="right"> <strong>Tip</strong> | Use the tag buttons found at the bottom left of the toolbar to structure your song. </div> Song Title: <input type="text" class="regField" name="stitle" value="" tabindex="1" /> <br /><br /> <textarea cols="95" rows="20" name="slyrics" value="" tabindex="2"></textarea> <br /> <div align="right" style="float: right;"> <input type="checkbox" name="sdraft" value="true"> Save as draft? <input name="submit" type="submit" value="Save" /> </div> Upload: <input type="hidden" name="MAX_FILE_SIZE" value="20000000" /><input name="supload" type="file" /> </form> </div> <?php include "sidebar.inc.php"; ?> </div> <!-- END PAGE --> <?php // Includes the Foot of the page include "foot.inc.php"; } ?> Thanks if anyone can help :S Dan.
  22. Hi all, I have a flash file that cycles through a couple of events to be displayed at the top of a page in my website. The transition for each 'event' is a black box with an alpha gradient on each side. the box passes the viewpoint or whatever from the right to the left, and gives a wipe effect. The text fades in as well I think. Now what I want to do is have a dynamic file where the animation(s) and layout is there, but the pictures and text are based on the contents of say a php page, xml file or database (whichever is best). There is no limit or minimum to how many events are shown and the banner is loopable, which is why I can't think how I would automatically create new instances of the animation within the flash file based on the amount of events in the page/file/db. Can anyone help? Perhaps point me to some actionscript/xml and tips?
  23. Here's the image of the fixed version for your pleasure I've also included what it did look like... Can I ask what is the best way to add shadows to the left and right without using alpha transparency pngs? keeping in mind there are gradients in the background and I want the background to repeat for infinity... and the shadows need to repeat to the bottom, after the gradient. obviously, the shadows would have to be in a div seperately... the site is a centred site and is fixed width if that helps... [attachment deleted by admin]
  24. Thanks a bunch, the px thing fixed it... I also fixed a capital letter in the class for the bullet list... The </div> thing I haven't tried but its perfectly compliant code...
  25. I should imagine you're using float, as opposed to fixed or relative positioning *lowers eyebrows* you'd start by mapping out your html so... <div class="boxContainer"> <div class="usrImgBox"></div> <div class="updStatBox"></div> <div class="mailReqBox"></div> <div class="recPhActBox"></div> <div class="frndActBox"></div> </div> then you'd use CSS (provided you understand what CSS is) to position the boxes: div.usrImgBox { width: 150px; height: 200px; float: left; padding: 20px; } I've gotta go now but If nobody/you does anything between now and say a few hours mess around with floats, make sure they are in a container, right works as well just so ya know, the css clear: left, clear: right and clear: both will fix any kind of problem to do with staggering and stuff, work it out, i may help if as i say you can't sort it. bye.
×
×
  • 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.