micky007 Posted February 15, 2019 Share Posted February 15, 2019 Hi Guys, I have a question, is it possible to leave an ELSE statement open within an Include file and end the ELSE statement later in the main page? For example: <?php include 'PHP/db.php'; //include database info include 'PHP/login-top.php'; //include PHP code for Login functions info ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Untitled Document</title> <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <!-- Optional theme --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"> <link rel="stylesheet" href="CSS/login.css"> <!-- Latest compiled and minified JavaScript --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <form class="form-signin" method="POST"> <?php if(isset($fmsg)){ ?> <div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div> <?php } ?> <h2 class="form-signin-heading">Please Login</h2> <div class="input-group"> <span class="input-group-addon" id="basic-addon1">@</span> <input type="text" name="Email" class="form-control" placeholder="Email" required> </div> <label for="inputPassword" class="sr-only">Password</label> <input type="password" name="Password" id="inputPassword" class="form-control" placeholder="Password" required> <button class="btn btn-lg btn-primary btn-block" type="submit">Login</button> <a class="btn btn-lg btn-primary btn-block" href="register.php">Register</a> </form> </body> </html> <?php } ?> At the moment I'm getting the following error: Quote Parse error: syntax error, unexpected '}', expecting end of file in C:\xampp\htdocs\BETA\login.php on line 46 But the } on line 46 is the closing of the ELSE { part within login-top.php include file. If i take all the code out of the include file (login-top.php) and place it in the same file as login.php it all works fine. But my aim to try and make the pages less cluttered and more easy to edit the design/HTML side of things which is why im placing the important PHP code in seperate files and including them when they need to be included. Any help would be great, and thank you! Quote Link to comment Share on other sites More sharing options...
Cobra23 Posted February 15, 2019 Share Posted February 15, 2019 This is a problem I had long ago with the same error. Include files allow the php closing tag of ?> but for closing brace } to not be closed in the include files, you will get that error. To make it work, you will need to move all that code with the opening and closing braces into the code you showed above or close it with a closing brace inside the include file. Quote Link to comment Share on other sites More sharing options...
requinix Posted February 15, 2019 Share Posted February 15, 2019 In other words, no: each file has to be syntactically valid in its own right. An include means to run the file, not to "insert" the code at that point. Quote Link to comment Share on other sites More sharing options...
benanamen Posted February 15, 2019 Share Posted February 15, 2019 (edited) 1 hour ago, requinix said: ...... An include means to run the file, not to "insert" the code at that point. Perhaps I am misunderstanding you because you are referencing the OP's post. Include does in fact "insert" the code at the point you include the file. An included file may not have anything that "runs". It could just be some HTML. As the manual says, include "evaluates the specified file". It is the same as though you cut and pasted whatever is in the include into the place the include is called. So OP, to see what you are actually doing, cut and past the contents of the include as a replacement to the include line and you will see the code as PHP is seeing it. Edited February 15, 2019 by benanamen Quote Link to comment Share on other sites More sharing options...
requinix Posted February 15, 2019 Share Posted February 15, 2019 1 minute ago, benanamen said: Perhaps I am misunderstanding you. Include does in fact "insert" the code at the point you include the file. An included file may not have anything that "runs". It could just be some HTML. As the manual says, include " evaluates the specified file ". It is the same as though you cut and pasted whatever is in the include into the place the include is called. No, it does not work like that. Consider this: <?php // one.php if (false) include "two.php"; <?php // two.php echo "first statement\n"; echo "second statement\n"; and compare with <?php if (false) echo "first statement\n"; echo "second statement:\n";  Quote Link to comment Share on other sites More sharing options...
benanamen Posted February 15, 2019 Share Posted February 15, 2019 If you include a footer before a header file, the footer is going to show up in source on top of the header and vice versa which clearly shows that an include is "inserted" where the include is called. Of course, the OP has some conditional thing going on, but the cut and paste I suggested will show how the code is not "syntactically valid " as you already mentioned. As for your example using a conditional, the first one is saying "if true is false, then include the file". Since true is not false, it doesn't include it. In the second example, you are not using curly braces, so only one statement is evaluated in the if, which is of the same effect as the first one, if true is false, then echo the first line". True is not false, so it doesn't echo the first line. Seems we might not be on the same page. Kindly explain what you wanted me to see about the example. FYI: You did get me to learn up on something. Since I always use curly braces I didn't know without them only one statement is evaluated. Quote Link to comment Share on other sites More sharing options...
requinix Posted February 15, 2019 Share Posted February 15, 2019 27 minutes ago, benanamen said: If you include a footer before a header file, the footer is going to show up in source on top of the header and vice versa which clearly shows that an include is "inserted" where the include is called. Executed. Not inserted. PHP did not perform some sort of virtual copy-and-paste of the included file's contents into the point where the include call was. What PHP did was execute the file. Quote Seems we might not be on the same page. Kindly explain what you wanted me to see about the example. You said that an include "is the same as though you cut and pasted". I'm picking at how and why that statement is factually incorrect. Quote Link to comment Share on other sites More sharing options...
micky007 Posted February 18, 2019 Author Share Posted February 18, 2019 Thanks for the helps guys, much appreicated. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.