Jump to content

Alternamaton

Members
  • Posts

    20
  • Joined

  • Last visited

    Never

Profile Information

  • Gender
    Not Telling

Alternamaton's Achievements

Newbie

Newbie (1/5)

0

Reputation

  1. Not that doing so will be very hard. It's just that, well...JavaScript is such an ugly language. And most of the functions that you really want to use are "black boxes"--that is, they're hidden from you, and you have to test any script that uses them via trial and error rather than simply knowing precisely how the function works. But I don't think that one can create a professional website with only HTML, CSS, PHP, and MySQL. There's a little something missing--the interface isn't slick enough--and that's where JavaScript comes in. For instance, one of my pages is going to have a central block with three tabs at the top, and the content of the block will depend on which tab is clicked. I certainly can't do this server-side, and have the entire page reload every time one of the tabs is clicked; that wouldn't be slick enough. This isn't really a help thread, I'm just venting.
  2. $_SESSION['form'] = ''; if (isset($_POST['add_number'])) { $_SESSION['form'] .= "<br>Enter another number: <input type = 'text' name = 'number[" . $_SESSION['counter'] . "]' size = 5>"; $_SESSION['counter']++; } ?> echo $_SESSION['form']; So you store the HTML code for the form as a $_SESSION variable, and then when the user clicks "Another number!" the $_SESSION variable is simply appended, and then the whole form is echoed. I take it that this is because every time the user clicks a submit button the page is refereshed, and the script doesn't remember that the LAST time the submit button was clicked, the form had ALREADY been added to. D'oh. I think I understand now. Thank you! Oh, and I don't know Javascript, but I will look into learning it. I am going to be taking the input variables and feeding them to MySQL, though. Would JavaScript be able to handle that?
  3. Edit: Updated to give the additional form inputs the correct names ("name = number[" . $_SESSION['counter'] . "...", not "name = " . $counter . "..."). Still doesn't work. That's good to know, but even if every form input after the fist has the same name ('number[2]'), they should still show up every time you hit the submit button, shouldn't they? In other words, thank you for pointing that out, but that's not the main problem with the script. The main problem is that after you click the submit button the first time, nothing happens on subsequent clicks. Here's the updated version of the code, with a bit at the end to see if clicking the submit button adds to the $_SESSION['counter'] variable. <?php session_start(); $_SESSION['counter'] = 2; ?> <HTML> <BODY> <?php echo "<FORM method = 'post'> Enter a number: <input type = 'text' name = 'number[1]' size = 5> <br>"; while (isset($_POST['add_number'])) { echo "<br>Enter another number: <input type = 'text' name = 'number[" . $_SESSION['counter']. "]' size = 5>"; $_SESSION['counter']++; unset($_POST['add_number']); } ?> <br> <input type = 'submit' name = 'add_number' value = 'Another number!'> </FORM> <?php echo $_SESSION['counter']; ?> </BODY> </HTML> It still doesn't work, and no matter how many times you click the submit button $_SESSION['counter'] is echoed as 3.
  4. This isn't the actual script I'm using, it's just an example of the functionality that I'm going for. <HTML> <BODY> <?php $counter = 2; echo "<FORM method = 'post'> Enter a number: <input type = 'text' name = 'number[1]' size = 5> <br>"; while (isset($_POST['add_number'])) { echo "<br>Enter another number: <input type = 'text' name = 'number[" . $counter . "]' size = 5>"; $counter++; unset($_POST['add_number']); } ?> <br> <input type = 'submit' name = 'add_number' value = 'Another number!'> </FORM> </BODY> </HTML> If you click the 'Another number!' button once, the script echoes another input field. However, if you continue clicking the button after that, nothing happens. It should ( "should"... ) echo another input field every time you click the button, because every time you click it the variable $_POST['add_number'] is first set and then unset (and therefore ready to be set again, at least in theory...). I tried it with "if" instead of "while" (though in this case I don't really see the difference), but that didn't work either. What gives?
  5. Thank you for your help, thorpe! I will go ahead and mark this as solved, but I just want to clarify one thing before I do that. Am I right in thinking that I will only need to use one $_GET variable for every user, and then use that $_GET variable to query the database and get all kinds of other variables for that user? For example, I use a single $_GET variable whenever I need to have a link to someone's profile, but then on profile.php I take that $_GET variable and make repeated queries of the database to get all of that user's other information. If so, then I think I'm well on my way, because I got listusers.php and profile.php to work perfectly. Edit: Just a minor question. In listusers.php, I formatted the link like so: echo "<a href='http://localhost/profile.php?username=" . $row['username'] . "'>" . $row['username'] . "</a><br>"; Are the curly brackets you used just another way to concatenate strings with variables? I wasn't sure about the way you did it so I just concatenated them manually (after some trial and error). I will look in the manual under strings and see if I see anything about curly brackets. I know that they are used as quantifiers in regular expressions, but I'm not sure about how you used them here.
  6. Thank you for the help. Where in the PHP or MySQL manual would I find information about how to format URLs with regard to MySQL records? I think I understand your code but I'm not sure how you came up with the URL \"profile.php?id={$row['id']}\". Also, I don't see where you passed the user id to the $_GET variable. I see where you used it (in profile.php), but not where you actually set it.
  7. I was just wondering how a PHP/MySQL-based website usually handles user profile pages. My thought is that there should only be one "profile.php", but that different values should be passed to it from the MySQL database depending on whose homepage it is. I'm just curious as to how one would go about implementing this. Say you're logged into a website such as Myspace, and you're looking at a list of user profiles. When you click on one of the user profiles, "profile.php" opens, and the data for the user whose profile you are trying to view is passed from the MySQL database to "profile.php". Then if you go back and click on a different user's profile, the same page opens, but with different data loaded from the MySQL database. Now, I already know that to log a user in, I can use the $_SESSION array and pass the user's information from the MySQL database as session variables which are then used in "homepage.php". I suppose that I could simply start the session with extra sessoin variables such as $_SESSION["profile_user"], $_SESSION["profile_user_avatar"], etc., and just leave them empty or NULL until "profile.php" is opened, and then pass the correct data to the $_SESSION array depending on whose profile was picked. I guess I understand how to do it, but my only problem is triggering the necessary PHP scripts when an HTML link is clicked. I know that I could create a page called "userlist.php" which queried the database and displayed a list of users, with a form-style SUBMIT button next to each user's name, which ran the necessary PHP scripts and then opened up "profile.php" with that user's information loaded, but I don't want to use submit buttons. And the fact that most large multi-user sites have links for user profiles makes me doubt my conception of how to most efficiently organize user pages. Here's an idea (and now I'm thinking out loud): Could it be as simple as having a list of links to the same website ("profile.php") on a page ("userlist.php" or some such) along with a script that sets session variables (i.e., $_SESSION["user_profile"], etc.) based on the string between the <*a href=> and <*/a> tags of the link that's clicked? I would still need the scripts to be triggered by the act of clicking a specific link. So I guess my question boils down to: what are the PHP functions, if any, for running scripts when a user clicks on an HTML link? And I suppose you could also respond to my whole conception of organizing and displaying user profiles if you think it's hare-brained.
  8. Ahhhhh, I remember now that in the php.ini file there is a setting to determine the probability of garbage collection taking place when you run a script. I think mine is like 1/100. So, the sessions can coexist peacefully, and the browser will always know to use the current session (rather than an old session that hasn't been deleted).
  9. Oh my god, I can't believe that was it. With every new thread that I post here, I become more and more embarrassed, because there's always some very simple solution that I've missed. The PHP editor that I downloaded starts each file with: <HTML> <TITLE>New Document</TITLE> <HEAD></HEAD> <BODY> <? ?> </BODY> </HTML> And sometimes I forget to change it. Sorry to waste everyone's time. LOL. EDIT: That worked (sessiontest2.php displayed the session variable), but the session file in c:/wamp/tmp still isn't deleted when I close the browser window. If I close the browser and restart it, another session file is created, alongside the first (which remains).
  10. This is apparently a common problem, but none of the threads that I found when I did various searches ("Windows PHP sessions", "Windows 'PHP 5' sessions", etc.) actually had an answer that worked for me. I'm running WAMP on Windows XP Home Edition. Here are the two scripts that I'm trying to get to work (using sessions): sessiontest.php: <?php session_start(); $_SESSION["var"] = 1; ?> sessiontest2.php: <?php session_start(); ?> <HTML> <HEAD> <TITLE>New Document</TITLE> </HEAD> <BODY> <? echo $_SESSION['var']; ?> </BODY> </HTML> sessiontest2.php doesn't display the session variable when I load the script after running sessiontest.php. I tried using session_register(), but apparently that's defunct as of PHP 5. I tried removing the session_start() from sessiontest2.php, and nothing happened. Here is the relevant portion of my php.ini file: [session] ; Handler used to store/retrieve data. session.save_handler = files ; Argument passed to save_handler. In the case of files, this is the path ; where data files are stored. Note: Windows users have to change this ; variable in order to use PHP's session functions. ; ; As of PHP 4.0.1, you can define the path as: ; ; session.save_path = "N;/path" ; ; where N is an integer. Instead of storing all the session files in ; /path, what this will do is use subdirectories N-levels deep, and ; store the session data in those directories. This is useful if you ; or your OS have problems with lots of files in one directory, and is ; a more efficient layout for servers that handle lots of sessions. ; ; NOTE 1: PHP will not create this directory structure automatically. ; You can use the script in the ext/session dir for that purpose. ; NOTE 2: See the section on garbage collection below if you choose to ; use subdirectories for session storage ; ; The file storage module creates files using mode 600 by default. ; You can change that by using ; ; session.save_path = "N;MODE;/path" ; ; where MODE is the octal representation of the mode. Note that this ; does not overwrite the process's umask. session.save_path = "c:\wamp\tmp" ; Whether to use cookies. session.use_cookies = 1 ; This option enables administrators to make their users invulnerable to ; attacks which involve passing session ids in URLs; defaults to 0. ; session.use_only_cookies = 1 ; Name of the session (used as cookie name). session.name = PHPSESSID ; Initialize session on request startup. session.auto_start = 0 ; Lifetime in seconds of cookie or, if 0, until browser is restarted. session.cookie_lifetime = 0 ; The path for which the cookie is valid. session.cookie_path = / ; The domain for which the cookie is valid. session.cookie_domain = ; Handler used to serialize data. php is the standard serializer of PHP. session.serialize_handler = php ; Define the probability that the 'garbage collection' process is started ; on every session initialization. ; The probability is calculated by using gc_probability/gc_divisor, ; e.g. 1/100 means there is a 1% chance that the GC process starts ; on each request. session.gc_probability = 1 session.gc_divisor = 100 ; After this number of seconds, stored data will be seen as 'garbage' and ; cleaned up by the garbage collection process. session.gc_maxlifetime = 1440 ; NOTE: If you are using the subdirectory option for storing session files ; (see session.save_path above), then garbage collection does *not* ; happen automatically. You will need to do your own garbage ; collection through a shell script, cron entry, or some other method. ; For example, the following script would is the equivalent of ; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): ; cd /path/to/sessions; find -cmin +24 | xargs rm ; PHP 4.2 and less have an undocumented feature/bug that allows you to ; to initialize a session variable in the global scope, albeit register_globals ; is disabled. PHP 4.3 and later will warn you, if this feature is used. ; You can disable the feature and the warning seperately. At this time, ; the warning is only displayed, if bug_compat_42 is enabled. session.bug_compat_42 = 1 session.bug_compat_warn = 1 ; Check HTTP Referer to invalidate externally stored URLs containing ids. ; HTTP_REFERER has to contain this substring for the session to be ; considered as valid. session.referer_check = ; How many bytes to read from the file. session.entropy_length = 0 ; Specified here to create the session id. session.entropy_file = ;session.entropy_length = 16 ;session.entropy_file = /dev/urandom ; Set to {nocache,private,public,} to determine HTTP caching aspects ; or leave this empty to avoid sending anti-caching headers. session.cache_limiter = nocache ; Document expires after n minutes. session.cache_expire = 180 ; trans sid support is disabled by default. ; Use of trans sid may risk your users security. ; Use this option with caution. ; - User may send URL contains active session ID ; to other person via. email/irc/etc. ; - URL that contains active session ID may be stored ; in publically accessible computer. ; - User may access your site with the same session ID ; always using URL stored in browser's history or bookmarks. session.use_trans_sid = 0 ; Select a hash function ; 0: MD5 (128 bits) ; 1: SHA-1 (160 bits) session.hash_function = 0 ; Define how many bits are stored in each character when converting ; the binary hash data to something readable. ; ; 4 bits: 0-9, a-f ; 5 bits: 0-9, a-v ; 6 bits: 0-9, a-z, A-Z, "-", "," session.hash_bits_per_character = 4 ; The URL rewriter will look for URLs in a defined set of HTML tags. ; form/fieldset are special; if you include them here, the rewriter will ; add a hidden <input> field with the info which is otherwise appended ; to URLs. If you want XHTML conformity, remove the form entry. ; Note that all valid entries require a "=", even if no value follows. url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset=" I tried adding c:\wamp\tmp to my PATH variable, and that didn't do anything. I tried leaving session.save_path and session.cookie_path blank (because it worked for someone in one of the threads that I found when I did my searches), and that didn't do anthing, so I put the defaults back. I opened the c:\wamp\tmp directory, and when I run sessiontest.php a session file is saved there, but when I exit the window the file remains, and if I refresh the browser the file remains. I tried changing session.auto_start to 1 and that didn't work, so I set it back to 0. Every time I made a change to php.ini I restarted Apache. There's probably something that I'm overlooking, but I've tried numerous things and nothing has worked.
  11. So you can have the conditional statements before the header statement; you just have to do it before <html>. I thought that the header statement had to be the very first thing, period (which would make it hard to do anything with PHP before the header!). Simpy putting all the php before <html> works beautifully. Sorry if I came off sounding impatient. I didn't understand that "before any output to the browser" simply means "before <html>".
  12. I thought that there had to be no output to the browser before the header function, period (i.e., before even <html>). Okay, here's a simplified example of the code I'm working with: <html> <body> <form method="post"> <input type="submit" name="redirect" value="Home page"> </form> <?php if (isset($_POST['redirect'])) { header("Location: http://localhost/homepage.php"); } ?> http://localhost/homepage.php exists. When I click the submit button, I receive the following error message: Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\redirecttest.php:6) in C:\wamp\www\redirecttest.php on line 9 Line 9 is: header("Location: http://localhost/homepage.php"); And homepage.php (which is nothing more than <html><body>Welcome.</body></html>) doesn't load.
  13. That makes no sense. How can there be no output to the browser before the header if I have an HTML form that the user has to fill out before they're redirected? Is there really no built-in PHP function that acts just like an HTML link? I.E., if (isset($_POST['login'])) { # Some conditionals to authenticat the form... open_page("http://www.google.com"); } And boom, they fill out the form, it's authenticated, and if everything checks out, they go to www.google.com.
  14. I can't figure out how to use a submit button to open a new web page. I don't want to use "action=somepage.php" because I'm doing the form authentication on the form's page. Basically, a user puts in their username and password, and I run some conditional statements which check my database and make sure that the user is valid, and if they are valid I want them to be redirected to homepage.php. But again, I don't want the authentication to be done on homepage.php. Shouldn't there be some simple built-in function to go to a new page? I looked through my reference manual and did several searches on here, and all I found was fopen and header, neither of which are what I'm looking for.
×
×
  • 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.