News:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

Can you interrupt 'isset($_POST)' with a conditional before it proceeds?

Started by rcane, May 06, 2022, 03:51:11 PM

Previous topic - Next topic

rcane

One the fields on a form is just a number.
Before it inserts that data to the table I'd like to test it for duplicates--and only proceed if there is no duplicate.

I can't seem to find the best place to tuck that without interfering with the page.

I even tried doing a query when the page loads to build an array so the check can be done without an additional query.

any ideas where it can be done on this same page?

Joey Smith™

Maybe something like:(sudo code)

$proceed = true (result of query, no duplicate)

if($proceed && isset($_POST)) { do something } elseif($proceed === false) { we have a duplicate }
PM at your own risk, some I answer, if they are interesting, some I ignore.

Joey Smith™

As a side note. If this question springs from your other topic regarding file uploads. It would be best to use a unique hash so that you will not have to worry about duplicate entries. Generally you would not want to use an auto incremented identifier to name an upload or to base its identifier on because it will introduce a known or discoverable identifier for the file which causes an attack vector based on filename and known path.
PM at your own risk, some I answer, if they are interesting, some I ignore.

rcane

Quote from: Joey Smith™ on May 06, 2022, 04:08:53 PMAs a side note. If this question springs from your other topic regarding file uploads. It would be best to use a unique hash so that you will not have to worry about duplicate entries. Generally you would not want to use an auto incremented identifier to name an upload or to base its identifier on because it will introduce a known or discoverable identifier for the file which causes an attack vector based on filename and known path.

I see where you're going. 

Yeah it's related, but there are no auto-incremental.  I'm using user-defined "file_number" to order them.  Because, they're court documents and sometimes you get 3 on the same date come out.  So, you have to pick which is "first".  Easier to just type your own numbers. Plus I'm the only person with access to the form.

I found a script that checks your form for duplicate entries on the fly.  I was looking to see if I could  hijack that to compare to the compare to the array of "file_numbers" I pulled down from the table. 

In a perfect world, if you're entering a "file_number" on the form, it would holler and let you know that number has been taken---all without hitting submit and going through the $_POST process.

The list is long, and although I have it pointing out the most recent number used (so you know the next logical # to assign your document) sometimes a record needs removed which frees up a number. 

This was what I found and will play around with.

function gfg_check_duplicates() {
     var myarray = [];
     for (i = 0; i < 4; i++) {
      document.getElementById("status" + i).innerHTML = "";
      myarray[i] =
      document.getElementById("gfg_field" + i).value;
         }
     for (i = 0; i < 4; i++) {
      var flag = false;
        for (j = 0; j < 4; j++) {
          if (i == j || myarray[i] == "" || myarray[j] == "")
             continue;
          if (myarray[i] == myarray[j]) {
             flag = true;
           document.getElementById("status" + i).innerHTML +=
             "<br>Its identical to the phone number " + (j + 1);
                        }
                    }
          if (flag == false)
            document.getElementById("status" + i).innerHTML = "";
                }
            }
        </script>
    </head>
    <body>
        <h4>Phone no. 1</h4>
        <input id="gfg_field0"
               oninput="gfg_check_duplicates()" />
        <div id="status0"></div>
        <h4>Phone no. 2</h4>
        <input id="gfg_field1"
               oninput="gfg_check_duplicates()" />
        <div id="status1"></div>
        <h4>Phone no. 3</h4>
        <input id="gfg_field2"
               oninput="gfg_check_duplicates()" />
        <div id="status2"></div>
        <h4>Phone no. 4</h4>
        <input id="gfg_field3"
               oninput="gfg_check_duplicates()" />
        <div id="status3"></div>
        <br />
    </body>
</html>

Joey Smith™

Just a thought. If they are court docs, why not use the case number? Those are unique are they not?
PM at your own risk, some I answer, if they are interesting, some I ignore.

rcane

Ha, you'd think.  But I've seen that they don't organize them well (depending on how I get my hands on them) with regard to when they come out.  I've got them organized in order of "the back and forth" which is a child-level of "date of filing". 


SpacePhoenix

Shouldn't you be doing the isset before running the query? No point in running the query if a file number hasn't been supplied. Is the file number going to be alphanumeric or numeric?

Joey Smith™

Well, if it were me. In this particular situation. I would probably have 2 fieldsets with different ID's in that particular form. One that was ajaxed and only dealt with sorting if the file identifier I wanted to use was currently in use. Since original poster is going to be the only user of this functionality then he doesn't really have to worry to much with server performance etc (too much), and could probably work up something so that it does it in real time as you type (seems like I remember there being a jquery plugin that did that). Which would allow the logic to be very straight forward once the form is posted.
PM at your own risk, some I answer, if they are interesting, some I ignore.

Dhayzon

find value on database if return empty proceed  ... there is no other method



Joey Smith™

Quote from: Dhayzon on May 12, 2022, 11:07:01 PMfind value on database if return empty proceed  ... there is no other method
Do you even take the time to read what you reply too? I seriously doubt it.
PM at your own risk, some I answer, if they are interesting, some I ignore.

Advertisement: