Question

I'm trying to code an edit post page for my site which posts to itself using a google openid logon, however i just get a blank page, instead of the edit form. Here's the code i'm using:

<html>
  <head>
    <title>BQuotes</title>
    <!-- <meta name="viewport" content="width=device-width, initial-scale=1"> -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <link href="votingfiles/voting.css" rel="stylesheet" type="text/css" />
    <script src="votingfiles/voting.js" type="text/javascript"></script>
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css" />
    <link rel="stylesheet" type="text/css" href="http://bquotes.me/mystyle-a.css">
    <script src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script>
    <style>
      .head_text {
        color: #ffffff;
      }
      a {
        text-decoration: none;
      }
    </style>

    <script type="text/javascript">
      $('#g-login').bind('click', function (event) {
        // event.preventDefault();
        // $('#form-id').attr('action', 'google-login.php').trigger('submit');
        alert("Clicked");
      });
    </script>
  </head>
  <body style="color:#d4ffaa">


    <!-- BQ Edit Post Start -->
    <div data-role="page" id="editPost">
      <div data-role="header" style="background-color:#5FBF00">
        <h1 class="head_text">BQuotes: Edit Statuses</h1>
      </div>
      <div data-role="main" class="ui-content">

        <?php





          ?>


      </div>



         <?php
          define ('HOSTNAME', 'host');
          define ('USERNAME', 'user');
          define ('PASSWORD', 'pass');
          define ('DATABASE_NAME', 'db');

          $db = mysql_connect(HOSTNAME, USERNAME, PASSWORD) or die ('I cannot connect to MySQL.');

          mysql_select_db(DATABASE_NAME);

          $tbl='table';
          $id=$_POST['pid'];

          $query="SELECT * from $tbl WHERE $id=id";
          $result = mysql_query($query);

          while($row = mysql_fetch_array($result)) {
          $id=$row['id'];
          $username=$row['username'];
          $message=$row['message'];
          $tag=$row['tag'];



         session_start();
              if($_SESSION['myusername'] != null &&  isset($_SESSION['myusername'])){
              echo "<form action='logout.php' method='post' id ='form-logout' data-ajax='false'>
                    <br/><input type='submit' value='Logout'/>";
              echo "</form>";
              echo "<div style='margin-left:20px;'>Logged In As:  ".$_SESSION['myusername']."</div>";

             echo "<form name='post-edit' action='' method='post'>";
             echo "<input type='hidden' name='id' value=".$row['id'].">";
             echo "<input type='hidden' name='username' value=".$row['username'].">";
             echo "<textarea name='message' value=".$row['message'].">";
             echo "<input type='text' name='tag' value=".$row['tag'].">";
             echo "<input type='submit' name='submit' value='Edit!'>";
             echo "</form>";

              }
            else if($_SESSION['myusername'] == null){
              echo "<form action='google-login.php?login=true' method='post' id ='form-id' data-ajax='false'>";    
                 echo "<span class='loginreq'>Login to Edit</span>";           
                echo "<br/><input type='submit' value='Login with Google'/>";
                echo "</form>";
            }
            }



          if (isset($_POST['submit'])) {

          $query = "UPDATE mybq_post_txt_main SET message=$message, tag=$tag WHERE id=$id ";

          $result = mysql_query($query);

          while ($row = mysql_fetch_array($result)) {

          echo "Your post has been edited to:";<br>
          echo $row['message'];
          echo $row['tag'];
          }

          mysql_free_result($result);
          mysql_close();

          }

        ?>



        <a href='mybq-index.php'>Home</a>


      </div>


  </body>
</html>

Any help will be appreciated. (never mind the PHP SQL statements, I will convert them to PDO later).

Was it helpful?

Solution 4

Here is the code that worked (The Full code below the snippet). The initial bug was the line break ( <br> ) after the "your post has been edited to:" which was not properly formatted for php. The other bugs were relating the $_GET variable properly, wrong table name, and wrong looping of the initial 'while' condition.

Thanks!

OTHER TIPS

$query="SELECT * from $tbl WHERE $id=id";

Should be

$query="SELECT * from $tbl WHERE id=$id";

(i.e. flip around the "id" to put the SQL column first and your PHP variable second)

Not sure if that will fix everything, but that was the first thing that jumped out at me.

I'm sure you at least want the login form to show up if not logged in yet. If so, change:

while($row = mysql_fetch_array($result)) {

...

}

To this:

$row = mysql_fetch_array($result);

...

//}

I'm assuming the query is only intended to return either 1 or 0 rows, so no need for loop anyway.

I have the closing braced rem'd out to clarify that it needs to be taken out of the operating code. You can just delete it.

The forms in your code are within the WHILE mysql_fetch_array loop, so when no user record is found neither form gets a chance to display.

Try moving session_start() to the top of your page? You generally want to call this before anything else is sent to the browser. Above the HTML tag, probably.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top