drop down php/mysql

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • brendanmcdonagh
    New Member
    • Nov 2007
    • 153

    drop down php/mysql

    Hi all,

    This is my first attempt at anything to do with php/mysql so any help will be greatly appreciated.

    I have been set a challenge to come up with a web app to enable staff to log on to the page, select their name in a drop down box and then set their current location and time due to leave that location. Then press submit to update their record on staff database.

    So far I have gotten any names in database loaded into a drop down box and have 2 further text fields to enter in location and time details. Finding a time function is for another day!

    here's my code:

    Code:
    <html>
    <?php
    $connection = mysql_connect("localhost", "root", "");
    if(!$connection)
    {
    die("database failed " . mysql_error());
    }
    $db_select = mysql_select_db("staff_status", $connection);
    if(!$db_select)
    {
    die("database selection failed " .mysql_error());
    }
    echo $db_select;
    ?>
     
    <form>
    <select>
    <?php 
    $sql="SELECT id,staff_name FROM status_staff";
    $result =mysql_query($sql);
    while ($data=mysql_fetch_assoc($result))
    {
    echo ("<option value=".$data['id'].">". $data['staff_name']."</option>"); 
    ?>
    <?php } ?>
    </select>
    </form> 
    <form action="drop.php" method="post">
     
        
        <br>
    Location: 
    <input type="text" name="location">
    <br>
    Time Leaving: 
    <input type="text" name="time">
    <br>
    <input type="Submit">
    
    </html>
    So far so good but for the life of me I can't find a tutorial to show me how to handle the selection. What I want this app to do is update the record of the person selected with the inputted location and time overiding the last input they did.

    Any pointers please?
  • Markus
    Recognized Expert Expert
    • Jun 2007
    • 6092

    #2
    Ok, the MySQL will need to be an UPDATE query. You will also need to know how to get the selected value of the dropdown (I will explain that below). However, currently, looking at your form, there is a problem: you <form> has no action or method. Not a huge issue, but it is good practice to tell your form what you want it to do. I expect the form is posting to the same page, but I don't know whether you plan on using GET or POST (or if you even know about those?). I'll assume you will use POST. Make your <form> into this:

    Code:
    <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
    Now when the form is submitted, all the values of the form will be in the POST array, which we can access by using the name attribute of the form elements as the array key, like so:

    Code:
    <?php
    
    echo $_POST['element_name'];
    
    ?>
    Overlooking your code again, I see your <select> has no name attribute - this is necessary. Otherwise, the element's value won't be available in the POST array. So add name="user" to your <select>. Note: you will have to have a name attribute for every form element.

    Check this tutorial out, for help with forms & php: PHP Tutorial - Forms

    Comment

    • Dormilich
      Recognized Expert Expert
      • Aug 2008
      • 8694

      #3
      Originally posted by Markus
      However, currently, looking at your form, there is a problem: you <form> has no action or method. Not a huge issue, but it is good practice to tell your form what you want it to do.
      it's a POST to "drop.php", line 28. there's just one <form> too many.

      btw. "action" is a required attribute

      Comment

      • brendanmcdonagh
        New Member
        • Nov 2007
        • 153

        #4
        so is the code so bad that it can't be made to work?

        Comment

        • Dormilich
          Recognized Expert Expert
          • Aug 2008
          • 8694

          #5
          if you apply Markus' improvements, then certainly not.

          Comment

          • brendanmcdonagh
            New Member
            • Nov 2007
            • 153

            #6
            Thanks Dormilich for swift reply

            Here is code with suggestions added:

            Code:
            <html>
            <?php
            $connection = mysql_connect("localhost", "root", "");
            if(!$connection)
            {
            die("database failed " . mysql_error());
            }
            $db_select = mysql_select_db("staff_status", $connection);
            if(!$db_select)
            {
            die("database selection failed " .mysql_error());
            }
            echo $db_select;
            ?>
             
            <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
            <select name="user">
            <?php 
            $sql="SELECT id,staff_name FROM status_staff";
            $result =mysql_query($sql);
            while ($data=mysql_fetch_assoc($result))
            {
            echo ("<option value=".$data['id'].">". $data['staff_name']."</option>"); 
            ?>
            <?php } ?>
            <?php 
              
            echo $_POST['staff_name']; 
              
            ?>
            </select>
            </form> 
            <form action="drop.php" method="post">
             
                
                <br>
            Location: 
            <input type="text" name="location">
            <br>
            Time Leaving: 
            <input type="text" name="time">
            <br>
            <input type="Submit">
            
            </html>
            I know I'm out of my depth here but if I was to get it working I could understand/learn from reading the working code.

            Any further instructions please?

            Comment

            • Dormilich
              Recognized Expert Expert
              • Aug 2008
              • 8694

              #7
              there's still work to do...
              minor details:
              - line 23, you should html-quote the attribute values
              Code:
              echo '... value="' . $var . '" ...';
              // or
              echo "... value=\"" . $var . "\" ...";
              // giving
              ... value="content_of_$var" ...
              - line 24–26, replace by } (the <?php and ?> remove themselves)

              major details:
              - the values from the first form are never sent (there's no submit button for that form). you should make only one <form> which will process the results. I guess it's the second one. remember, only the values from inside the <form> are submitted (you may have multiple form elements on a side, but only the one whose submit is pressed actually sends data).

              Comment

              • brendanmcdonagh
                New Member
                • Nov 2007
                • 153

                #8
                thanks again but just don't understand what you are saying to do.

                I have never asked anyone on the site to show me with my variables, but I just don't think ill get it any other way.

                If you can't do that for me, thanks again, I'll just stick to java!

                Comment

                • Dormilich
                  Recognized Expert Expert
                  • Aug 2008
                  • 8694

                  #9
                  in the end, the html code should look like this (more or less):
                  Code:
                  <html>
                    
                  <form action="drop.php" method="post">
                     <select name="user">
                       <option value="[I]ID1[/I]">[I]NAME1[/I]</option>
                       <option value="[I]ID2[/I]">[I]NAME2[/I]</option>
                       <option value="[I]ID3[/I]">[I]NAME3[/I]</option>
                   // ...
                    </select>
                    <br>
                  Location: 
                     <input type="text" name="location">
                     <br>
                  Time Leaving: 
                     <input type="text" name="time">
                     <br>
                     <input type="Submit" value="send">
                  </form>
                  
                  </html>
                  in the final version, drop lines 13 and 28 (this is nothing for the eyes of the user, only for debugging)

                  the file "drop.php" has to handle the database update.

                  EDIT: the problem of your code does not come from the PHP side, it's the HTML code that's not right.
                  Last edited by Dormilich; Jan 21 '09, 02:55 PM. Reason: adding a note

                  Comment

                  • brendanmcdonagh
                    New Member
                    • Nov 2007
                    • 153

                    #10
                    Dormilich, thank you! I now know what the meaning of the word post means!

                    So after a bit of copying and pasting (and learning) I have 2 files which look like they should do what im trying.

                    here's insert1.php

                    Code:
                    <html>
                    <?php
                    $connection = mysql_connect("localhost", "root", "");
                    if(!$connection)
                    {
                    die("database failed " . mysql_error());
                    }
                    $db_select = mysql_select_db("staff_status", $connection);
                    if(!$db_select)
                    {
                    die("database selection failed " .mysql_error());
                    }
                    echo $db_select;
                    ?>
                     
                    <form action="insert2.php" method="post">
                    <select name="user">
                    <?php 
                    $sql="SELECT id,staff_name FROM status_staff";
                    $result =mysql_query($sql);
                    while ($data=mysql_fetch_assoc($result))
                    {
                    echo ("<option value=".$data['id'].">". $data['staff_name']."</option>");
                    ?>
                    </select>
                    <br>
                    Location: <input type="text" name="location">
                    Time Leaving: <input type="text" name="time">
                     
                    <input type="Submit">
                     
                     
                     
                    </form> 
                    </html>
                    I have tried to stay with importing the names from database to show in dropdown box as this was working and has been my only success today:(




                    Here's insert2.php



                    Code:
                     
                    <?php
                     
                    $connection = mysql_connect("localhost", "root", "");
                    if(!$connection)
                    {
                    die("database failed " . mysql_error());
                    }
                    $db_select = mysql_select_db("staff_status", $connection);
                    if(!$db_select)
                    {
                    die("database selection failed " .mysql_error());
                    }
                    echo $db_select;
                     
                    $name = $_POST['staff_name']; 
                    $location = $_POST['location'];
                    $time = $_POST['time'];
                    $query2 = "INSERT INTO status_staff VALUES ('$name','$location','$time')";
                    mysql_query($query2);
                    mysql_close();
                    ?>
                    Am i getting closer to the concept of html/php/mysql?

                    Edit:

                    Comment

                    • Dormilich
                      Recognized Expert Expert
                      • Aug 2008
                      • 8694

                      #11
                      Originally posted by brendanmcdonagh
                      Am i getting closer to the concept of html/php/mysql?
                      yes


                      Originally posted by brendanmcdonagh
                      Code:
                      echo ("<option value=".$data['id'].">". $data['staff_name']."</option>");
                      this could be improved to
                      Code:
                      echo "<option value=\"", $data['id'], "\">", $data['staff_name'], "</option>";
                      (printing " to the html too and executing a bit faster)
                      Originally posted by brendanmcdonagh
                      Here im getting a parse error on line 30 which no matter what i do won't go away but I think it's a syntax error more than me not having a clue !!
                      which is line 30, the display is currently a bit strange here....
                      EDIT: fixed now, I'll have a second look
                      Last edited by Dormilich; Jan 21 '09, 03:22 PM. Reason: post had been fixed meanwhile

                      Comment

                      • brendanmcdonagh
                        New Member
                        • Nov 2007
                        • 153

                        #12
                        sorry, ignore line 30 error, i was looking at wrong page, doh!

                        Comment

                        • Dormilich
                          Recognized Expert Expert
                          • Aug 2008
                          • 8694

                          #13
                          Originally posted by brendanmcdonagh
                          Code:
                          $name = $_POST['staff_name'];
                          should be
                          Code:
                          $name = $_POST['user'];
                          second, but nonetheless important: never trust user input! never! you can sanitize the input using mysql_real_esca pe_string()
                          Last edited by Dormilich; Jan 21 '09, 03:28 PM. Reason: adding mysql_real_escape_string()

                          Comment

                          • brendanmcdonagh
                            New Member
                            • Nov 2007
                            • 153

                            #14
                            I can't thank you enough, I have it doing what it should!!!!!!!!! !

                            Comment

                            • Markus
                              Recognized Expert Expert
                              • Jun 2007
                              • 6092

                              #15
                              I go out to walk the dog, and I come back to another happy customer.

                              Brendan, just a note, you should really check out these sites (they helped me from n00b to being able to basic-intermediate stuff).

                              Introduction to PHP

                              PHP Tutorial - Introduction

                              Comment

                              Working...