Very good afternoon to all of you. In this session, I'm going to cover about the local storage options of Android. In Android, we have some storage options. So that is exactly where we can say that is the data storage options we have in Android. Now, using these options, we can store some data into database. We can read some data from the database. And if we want to store some data into file, or if we want to create some file and store that file into some SD card or internal memory of your device. So in using this data storage, we can do this kind of things. Now, the storage options in Android, we have that is shared preferences, creation and storage of arbitrary file type, means we can create some file, and on that file, you can store some strings or text. And SQLite relational database. Android exactly support this SQLite, internal support this SQLite database, and will store into your device. Now, Android provides several options for you to save persistent application data. So when I'm talking about persistent application data, in the senses, you are saving your data in your devices. Using this shared preferences, internal, external memory, or with the help of file. And you can use the SQLite database to store some information. Now, storage option.  Depends on your need, the solution you have to find. Solution in the senses, suppose your data, you don't want to share your data, then you can use this SQLite database to store that data. If you want to share some data, then you can share your external and internal storage to access that data from or save that data into external storage, internal storage. So you have to take care of these three things. Data should be private to your application, then accessible to other application. This accessible to other application in the senses, you are accessing internal memory as well as or external memory. Then how much space your data is required, based on if suppose your data size is 2, 3 MB or 30, 40 MB, then suppose if your data size is 2, 3 MB, then you can use internal storage. If the data size is suppose 30, 40 MB, then you can use your external storage. Now, we'll start with the very first storage option, that is shared preferences. Basically, shared preferences is used when we require to save some persistent data. In this, each preference has a key and value pair. The key means your strings, and individual means the value is what is your any kind of value you can use, the bull and long, float, int, that kind of value you can use in this shared preferences. I'm repeating this because this is very important is each preference is a simple key and value pair. Your key is your string, and a value could be anything, bull and long, int, float. Now, shared preferences, here the manage is through, we can use the shared preferences via Java code, or we can use with the spatial activity, preference activity. So that is your XML. Now, after that you're stored encrypted, you have to store whatever the value you're going to store, that is in a form of unencrypted on your disk. Then how we can create preferences in Java. So shared preferences class represents set of preferences. So those preferences, we have to initiate with a mode, that is private mode. There are lots of mode you can use, such as you can see here the mode writable. But sharing preferences between is, but we can share our preferences, the preference data, with your activity to activity. But if you want to share that data with application, it is not possible in this, using preferences. So for creating preferences in Java, you can use preferences for current activity. So you can write this way, the private shared preferences, then they have to create object of that, then is equal to get preferences context.mode private. Then another way you can use that is the name set of your preferences. Here you will set the name of your preference. For that, private shared preferences, then the object is equal to your get shared preferences, then you have to write a preference name, then your mode, that is private mode. Using this, you can create your preference. Now, here when I'm using preferences, so we have to create preference activity. So preference activity defines and write value on the disk automatically. Then value can be your string Boolean or list of string. As we told you in the very first slide, our preferences has a key or pair value. So here I'm talking about value, that is, it could be in string Boolean and long in any data type. Now defining in a layout XML, you can also define your preferences in XML. That is your preference. You can say that preference.xml. Next is, that is, navigate to preference activity with an intent object. You can navigate your preferences using intent. Now we'll see one simple application based on shared preferences. So this is my app of our shared, Android shared preference. So you can see that here I have created one layout that is main.xml. Inside that layout, I have used some text views, edit text, buttons. So here for the shared preferences, I have used two edit text. This first edit text is for the MEM1. In this, we are going to save first preference. And this is for the second. Then there is two edit text. Whatever the value I'm going to write here, it will display in this text views. So if I'm writing here in first edit text, it will display here. And whatever the value I'm writing here, it will display in this text view after clicking these two buttons. That is first button name is save MEM1. And next is save MEM2. So now first, if we want to perform this logic using shared preferences, then we have to create Java file. And first we have to access these widgets. So we'll go to that Java file. You can see here I have created two edit text object and two text view objects. And same here for the button also I've created two object for the button. And after that, using this fine view by ID, I'm accessing those text views, edit text, and button. Where are their IDs? Then I have to perform some, I want to generate some event, I have to perform some event via this button. So I have to set the onclick listener method to this button. After that I'm loading that preference. When I'm clicking on button, suppose I'm clicking button 1, that is button save MEM1, then it will execute this body. And this body, what I'm doing, I'm just creating the string of a name of a preference. And I'm getting that text of your edit text. And then after using this save preference method, I'm calling this method here. And I'm storing that value into key and value pair. And after that, I'm committing that editor. And then after that, I'm calling the load preferences. Inside the load preferences, I'm copying those, the key value into your strings. So you can see here inside the MEM1 and MEM2, I have stored those value. In MEM1, I'm getting the text of edit text 1. And then I'm calling this load preferences. So whatever the value is in your MEM1, it will store in your string. And then after storing that value into string, I'm displaying those values into the text view by using set text. Same operation we can perform for the button 2. I've also used this set on click listener for button same MEM2. And then it will directly call here. Then it will take the value of edit text 2. And I'm calling save preferences. And again, I'm storing those values into key value pair. And then I'm calling the load preferences. This load preferences will take that value into string. And after that is string 2, I'm setting second value into text view 2. So now we'll run this application. And we'll see the output. This is Android shared preference editor. So suppose here I'm writing hello. And here I'm writing students. When I'm clicking on save MEM1, it will display here. When I'm clicking save MEM2, it will display here. Then go back. Again, if I'm clicking on that shared preferences, this is my application, I'll get that value there. So when I'm entering next time, hello, teachers. And I click on this hello will display here. And teachers will display here. Now to delete the value of your text view 1, text view 2, or if you want to erase that value from the shared preferences, then you have to follow the steps. You just hold this and go to the app info. And after that, just click on clear data. Go to that application. Again, run that application. Now you can see your data is cleared from your text views, means from your preferences. This is the way you can use shared preferences by Java. Now we'll move to another application. That is your internal file storage. So your file storage is what? First here you are going to create some file and you are going to store that value onto that particular file. For creating file, you have to keep in mind two things. First you have to give your extension name and the name of the file and the extension of the file. So here file can be created and read on a persistent media. So we can create one file and we can store that file into your internal or external storage. And we can read that file from those internal or external storage. And then what kind of file we can create here? We can read image file or a TXT file, XML file. This kind of file we can read from the internal or external memory. Then file can be designated for internal or external storage. That means it is local to your app. Your application can be access your files from the internal or external storage. The internal first, what is that internal storage? The Android can save file directly to the device. That is internal storage. Then if you're saving your file into your device only, then it will be saving your file into your internal storage. This file is private to the application and will be removed if uninstalled the application. Suppose if you have installed your application into your device and after that you are uninstalling your application so that particular file will be deleted from your device. We can create a file using open file output with the parameter and file name and the operating mode. Again here we have to get the operating mode for your file. It should be private or readable for the world. As we have used in shared preferences. Then if we want to open our file, at that time we can use open file input, passing the parameter as the file name. One thing that we need to remember is give to extension of the file. As I said, you have to give the extension of your file name. It is optional. If you want to give, you can give otherwise. It will bi-defile, it will take as a text file. Now we will see some simple example based on internal storage example. So here I have created one internal storage application. We will see this application. So first we will go to the layout. In layout there is a main file, main.xml. Now again here I have used two text box, added text and two text views and one button. When I am here, you can see I have used here enter file name. So here in this text box I am going to enter name of your file and enter content. Here I am going to enter the content of your file. And when I am clicking save button, it will save into your internal memory with the file name and your content. So and first for that again to perform this logic, we have to write a code, java code. So first we have to access those added text and button. So here I have created two objects for the added text and one object for the button. Here I have access using find view by ID in the file name, using the file name ID of the first added text. And then I have access again second one that is find view by ID. And the file name of your second added text. And same for the button I have access using find view by ID and the ID of your button. Then I am giving the set on click listener to the button because I want to save that file and your content of your file. Then when I am clicking on that button, so this particular operation will perform. First I am getting the text of added text into this string, this file name string and another into your content. So I am taking the value of this two, get the value of two added text into these two strings. And after that I am creating file output stream. Then after that I am opening that file output. We can enter the file name and the context. We have to give the mode of our file. That is mode is private or readable for the world. And then we have to write using this method. I am writing the content of content into your file. And I am closing that file. If everything is proper then we will get the message, the file name, whatever the file name we are going to give, that file name saved. This message we will get. Otherwise it will throw the exceptions. Now we will see that first we will run that application and we will see the output.  You can see this is my output. So here first we have to enter the file name. I am entering hello dot txt. And I am writing the content. Good afternoon. And I am saving this content and file name into an internal storage space. I am sorry. So when I am clicking this we will get the message hello dot txt saved. Now our file is saved or not. For that we have to go to that, we have to go to the ddms. And from there we have to check that file. So this ddm will show the emulator. So we will go to the ddms. Inside the ddms we have to go to data. Inside the data we have to go to again data folder. Then the package of our application. So what is our package? Comm.exercise, Android internal storage. Comm. So we will go there. Comm.exercise, Comm.Android internal storage. On that you can see here there is a file folder. Open this file folder. You can see here I have created the hello dot txt. So if you want to see this content of hello dot txt, just select this. Here there is a push file, sorry pull file. So we can pull this file from device to our system. Click on this, save into your desktop, check that. Actually it is not pulling from your ddms. But you can see that here the hello text txt file is created. And inside that we will get that output. So let us again create one file, hello, then nullish, save this, hello saved, we will go to that. You can see here hello, file is there, pull this into, I am pulling this new folder, failed the pull selections. So actually it is not pulling from your device but you can see here I have created that file and surely we will get that string that I have entered in this, we will get that file. So this process you can follow and you can open your file. So we will move to another storage option. So another storage option is external storage. Another storage in the sense you have a SD card. So every Android compatible device supports shared external storage that you can use to save files. This external storage you can use to save text file, PDF, any kind of file you can save in this external storage. I mean normally in each smartphones we will get this option for the sharing, inserting that SD card for the external memory. And this can be removable storage media, you know that SD card is obviously is a removable media you can insert, you can insert and when you card then you can insert, we do not require then you can remove from your mobile phones or tablet. Then file saved to the external storage are world-readable and can be modified by the user when they enable USB mass storage to transfer file on a computer. So you can see whenever you are using SD card, the content of your SD card, whatever you have stored in your SD card, anyone can access that using your tablet or mobile phone or you can use also with some card reader. Now we will see the external storage example. You have created one external storage of application, inside the RES I have a layout, I am just opening that layout folder, you can here you can see I have used one image view widget to display the images and I have access this image view from your java file is very simple there are two, three line of code to display the image, you can see here only three line of code we can display image. So this I am accessing that find view by ID, I am accessing this image view using the find view by ID with your image ID. Then I am using bitmap class and inside bitmap I am displaying that I am giving the path of your image where you have stored. So now you have to check that this path, if you are using a device, if you are using a Akash tablet.  So here my file name is error1.jpeg. So and when you are using this emulator, so I can show the path of emulator that is go to DDMS and then you have to go to MNT then SD card. So here your external storage name is the SD card, some of the same path you will get in some of the devices but in Akash tablet you have to use MNT, EXT, SD. So I will run this application and I will show how I will get that output in Akash tablet. So first I have to copy one image that is this image into my EXT Akash tablet and then I will run that application, image EXT, image SD card. So first we have to run this. So here you can see there is no image because I have given the path of my Akash tablet SD card or here I have a path of that is MNT SD card but in Akash we are using MNT, EXT, SD. So I have given the Akash path so it will not get any image here. So here the SQLite is database, in your Android this is exactly the by default database we can use and it is a structure data, structure data can be saved into your SQLite database Android provide built-in support in this, all classes and interfaces are in your, if you want to use, if you are using this SQLite then you have to use this android.database.sql lite package. This package you have to give by default when you are using SQLite database. Now but there is a some, it is a very lite database so it cannot hold the maximum size of your data. So we will see the simple example based on your SQLite. So inside the SQLite database, database file are local to the app whatever if you are creating a database it will local to your app. If you uninstall your application it will uninstall, it will remove from your device. To share structure data with the other apps you have to use content provider, custom content provider to share your data to the other apps. Now we will see the simple example based on SQLite database. Here the database sample have one application and first we will see the layout of this application. So this is our main layout, I have created here three layout. One layout for the checking data means retrieving data and displaying and another is to store that data into a database. This is my first main layout when I am clicking, if I want to save data so I will click in this button to save and suppose I want to check data so I will, I can click this check data button. In check data you can see that there are some text that is name, telephone, Skype ID addresses means these are the fields I have in my database. I have created that those fields into my database and I am displaying the data from the database to using this list view. This is for your check data, in this you can get your, you can retrieve your data in this layout. To save data here you can see I have used four edit text for the four fields and one button to save that. If I am clicking on back it will directly jump into your main dot XML. So now we will access this database, how we can access, sorry how we can access the widgets of this layouts. For that I have created four files for one for one dot check dot data dot Java is used to check data from your database to retrieve data from your database and this file is to save data to your database and this data manipulator will handle the check data and the save data operations. And this is the main, your main activity, so first we will see this main activity here you can see I have access first two button that is your save button and check button. I have access this two button and this you can see for access by find by ID and I have used, I have set on click listener to those buttons and then when I am clicking, clicking on button one, so the one intent will fire and it will show you the save data class. So save data class is your, this file will invoke and after what this file is doing, this file is going to save the data. Again in this file, this file is directly accessing your save dot XML file and using that and what are the widgets you have used in your save dot XML file, you will access by using, you have access by using find by ID and this and after there is two button one is for home, if there is a back button if you are clicking on back button it will directly jump on to your home and then if you are clicking on save button then it will save that your information. Before saving it will ask you for the next, if you want to, if you save one information then it will and after that you will click on save button then it will ask you save, if you want to save next information, so you can directly save there. We will see that how that particular dialogues is implemented. Now you can see here when I am clicking button zero that is home, so one intent will fire and directly database sample dot java file will call, that is your this layout and then if I am clicking on add button that is second save button, so all those at first have access those edit text and I am copying the content of those edit text into a string. You can see this and I have called this data manipulator to save that values and after that I have used insert method to save those values into your database and then I have created one dialogue, one if I have stored one information then again it will ask you to save another, so if I want to save then I will click yes, if I do not then I will click no and if I am clicking no it will directly jump into your home page, means this is your main XML file and next is your check data, here I am retrieving that data and I am displaying that data into this list, again here you can see I have used data manipulator, so we will run this program we will see the output, you can see this there is a database sample that there are two button, if I am clicking save button, so it will call this edit text, sorry your save dot XML, in this we have to enter the name, then I will enter my telephone number something like this, then I am using Skype ID, so something dot and my address, I am writing anything here or for addressing myself, so I will use IIT Bombay and when I will click on save button it will ask me one information, information save successfully when this information is saved, add another data info if you want to add another data you can click yes, so you can again get the same activity, you will be the same activity, so again you can delete this and you can enter another data, so I can write here tcsc any and I am saving this, again it will ask me I do not want to save next data, so I will click no, so it will directly jump on to your first main dot XML, so to check those data is saved or not we will go there to we will click this check data button, so we will click on this check data, now you can see two data is displaying here from your database, again this is if you want to erase your this value, this data from your database then you have to go to first find your application that is data sample, database sample, this is your application hold this go here app info and click on the clear data, so your data will be clear from here, so now first we will check our data from the data how we can see our database we have to go to d d m s, inside the d d m s again you have to go to data and data, see that package of your application that is com.app database sample, find that com.app this is my package, this is my database, you can see there is my database db is created, if you want to see the value of those content from this database you have to pull this into your desktop, so again you can see that last time when I am pulling some files or from here to the desktop, so it is showing me this fail to pull selection, because there are some we have to give some permission to pull that information from device to desktop, but anyway we got that whatever the value we have saved here, whatever the value we have saved in this database we have displayed that value. If you want to clear your database then you have to follow that clear your data, hold this app info then clear your data, go back to your application, open, check your data there is no data, means you have cleared your data from your database, so this is the way we can use storage options on our android application.


Okay, I recently did a video where I was talking about a website I went to for my kids and it's a website for kids and how I realized that that website was accidentally dumping a lot of user information. Again, this is a website for kids. It was dumping their birth dates, their email address and their real names, stuff like that. And of course I can't show you the actual site because that wouldn't be safe for those kids. I've already contacted the company. I'm waiting for them to do something about it but I want to give you an example. People asked exactly what was wrong and what could be fixed and of course I can't see what's on the server side but I created this example. I spent the last 30 minutes just creating this basic little example with some fake user data and fake comments and stuff like that. So I can show you the sort of thing that went wrong and it's an honest mistake but it should be a simple fix unless they have spaghetti code on their server. So real quick, here's my web browser. This is a server I just threw up. I save that and it sounds like I'm throwing up. This is a server I just spun up. There we go and I got a few files here. Got a couple HTML and then I got some server side PHP scripts that I'm going to show you. On the right here I got my developers console so we can see what's loading and then here is a I'm logged into the shell and again this is just a server I threw up. I spun up just about 20-30 minutes ago to run this on so I can show it to you. So let's just see what's going on here. I made this basic little I have comments and comments bad. Let's look at comments first. So it loads up this little comment box to post. It doesn't actually post anything. It's just there for looks and then it loads up these comments from a database with a nice little avatar and user names, dates that they were commented and we can also see what their comment is. So that was comments. Now let's look at bad comment. It looks exactly the same but there is a key difference. So when you're loading up, so you have databases and you have to cross reference databases. So normally you wouldn't, you could have a database with all your comments in it and basically hard code, user names and stuff like that into there but you normally wouldn't do that. And this example I'm going to show you one of the reasons you would cross reference is avatars and so let's say someone changes their avatar. You want it to update in the comments and you want to go through and change every entry in the database. So what is happening here is I have three PHP scripts. Get comments, get user data and get user data bad. Now again let's look at, I guess we'll look at the bad one first. Comments bad. And the only difference between this and the other one is the PHP side of the script. So you can see here, if you open your developer's console and you go to network and we can go to all or XHR since that's what we're looking at but I'll just leave it as all for now. You can see here that we get user data bad and we get user comments. So what my code is doing is it's loading up both those things, loading up user data, putting that into an array and doing the same with the comments and as it loops through the arrays for the comments, the comment, it's grabbing stuff from the database, it's grabbing the user name, the date the comment was posted and what the comment is but again we need the avatar and you don't want to embed that into the table for the comments because if someone changes their avatar you want it to change on the comments. So that's why we also load up user data. So all we're loading up here, all we need is we need the user name and their avatar so we can cross-reference it but if I expand all of these you can see that I'm loading up, I'm grabbing their user name, their avatar, their email address, their status, whether they're a child or parent which is how this was set up on that website. I did notice after I set this up just before I went to record this video that I set up some of those parents but their birth dates they're only like seven years old but that was just because this is made up data. The last time they logged in the date it was created and their date of birth, first name and last name this is all sort of things that I saw on that website and that should not be dumped. You're not seeing it on the web page but it's being sent to your web browser and then the script is going through and grabbing information it needs and displaying it and you may not see it over here but it's still coming to your computer. It is on your computer. Let's go back now and we'll just go to comments and now we'll look at or I forgot to change it in the script. Okay let's look at the script. Let me go ahead and go into comments.html. Yeah so right now comments and comments bad are the same except for this line. We just changed that. Now let's go back in here and refresh this. So again we're grabbing the comments and we're also grabbing user data but this time under user data we are only grabbing the username and their avatar because we don't need that information. That information shouldn't be pushed to other users so it looks the same acts the same but all that extra information is not being sent. Let's look again at that that output. So again we have three PHP codes here we'll actually look at the code in a moment but here's the output. This one outputs your comments in a JSON format so you get the username you get the date it was posted and what the comment is and does that for each of the comments but then you have user data here and this is giving us the username for each user and their avatar but get user data bad is dumping all of their information. So how easy is this to fix? Well let's look at those examples so we got get we'll say get user bad so what we're doing here is we're looking oh by the way again this is just a test an example so there's lots of bad things about this that could be done better for example I'm not using a MySQL database which is on a real website you should be using something like MySQL. I'm using SQLite3 database so that I can put it into this folder so I copy this server put it in a folder and share it with you guys going to post this on GitLab for you and I'll put a link in the description so you can download this code and look at it but right now the database is actually in a database file in the folder with all the scripts and that is super super bad you never want to do that because basically anybody who knows that what's being called can just pull down that entire database with all the tables so when you're using MySQL you're actually using a server to connect to all this stuff the server is connecting to itself if that makes any sense we're here I'm just using a database file you don't want to do that if you are going to use SQLite3 on a website I'd recommend not in most cases you want it outside of your web directory but that's not what was wrong with the website I'm talking about I'm just pointing out I know that I did this in this example because this is just an example our big problem again going back into our database here is the same the same exact code would be for MySQL I'm pretty sure SQL and SQLite and SQLite3 is the select so you're saying select what do you want to select and where do you want to select it from so we're using this database file and there's two tables in there right now a users table and a comments table right here we're saying select all everything from the users table which means it's displaying everything from the users table you don't want to do that and that's going through that now putting it as JSON what we do want to do is if we go into get user data instead of get user data bad this is all we had to change is this one line instead of having an asterisk there saying all we say we just want the username and the avatar those are the only two things want so I can't see what that website is doing on their server but again unless it's spaghetti code it's something as simple either they have an asterisk in this spot and it's dumping everything or they went in here and did things like show me the username show me their date of birth show me their last login date log in something like that I don't remember exactly how I wrote it in the database which is an easy thing to do by accident but it's also very bad when you do it by accident especially on a website like the one I'm talking about but it should be easy to fix they should be able to go through again they don't they shouldn't have to go and change every single page just the server side that's serving it up so again the only thing they would have to do for example if this was their code was come in here and do this username comma avatar and save that and that's all they would have to do and it would fix the problem and they might have to do that in a few different files but hopefully they've written the code so that it's not there should be too many files they have to share change because things should be code should be used more than once and if you're grabbing information in a certain way that code should be in one spot again not repeating code programming I kind of fumbled around there but I think hopefully you guys get what I'm saying so again this is something you should look at especially if your kids are using a website it doesn't take a lot so let's say you are Joe Schmo you know nothing about computers your kids are on a website okay like this okay this is their website and there's comments and stuff and other users whatever it is all you have to do is open up your developers console okay f12 in chrome or control shift i if you don't have f12 keys might be a little bit different other browsers but just look it up and then you just go to your network tab right here network make sure you have all selected and just start clicking on these things and you'll start seeing different information now if you don't want to go through it all again just click xhr that's usually xml html reference or htp reference or something like that and most of the time nowadays it's going to be javascript but you click on that that's usually information being sent from a database on the server or something like that and from there you can come in here and just right click this and say expand recursively and just start looking through here again you don't have to be a genius you start seeing other people's email addresses or phone numbers or private information you got to go whoa whoa that's bad again you open up your developers tools f12 in a chrome based browser go to networks xhr and then just start clicking through these and see if you see anything you shouldn't if you do you need to stop using that site and let them know so that they can fix it so again that is hopefully that explains the question because i did have comments asking you know what exactly was the problem and how easy is it to fix uh and it was just someone asking because they they were wondering again i don't know what's going on the server side but this is what's happening their server is sending my web browser everyone's information i'm not seeing it in the web page but it's being sent to my server whether i have this console open or closed it's being sent to my web browser um and that means that anybody who's surfing that site can see that information and even if you're not going to do something bad with it that doesn't mean someone else is going to do something bad with it again i contacted them just over a week ago uh they sent me a response saying it was going to be passed along and asked me to log out and log back in again this has nothing to do with logging out logging back in because this is information coming from the server um that's something it's it's a security thing security things should never be done on the client side so if logging out logging back in fix the problem there's still a problem um so yeah again i'll put this up on gitlab and i'll put a link in the description of this video so you can download and all you have to do is you know spin up a web server uh with a php and um the sql light three or sql light three or have you say i think it's sql light three um plug in or module for php and you just copy this folder again in this example i put the database right in the folder you never want to do that because that means anybody who can figure out figures out that's that they can just type in data.db and now they i can download the entire um database and they have it on their computer everything whether it was coming out in the script or not so you never want to put your database in the folder that your program is running in on your website should be outside of the web directory or preferably using a server like mysql uh sequel light is usually used for local things like on your phone it will be used for contacts your sms messages where it's all stored on your phone not necessarily on servers you can use it on servers and i'm saying it's horrible but even the creators of it say if you're going to have big databases this is that you shouldn't be using their project because it's for smaller stuff so definitely if your website's big um i know that if you set up like a next cloud server uh you have the option to go either way i think the default is a sequel light database and but it constantly warns you you should upgrade to or switch over to or migrate to however you want to say it to a mysql so again uh yeah check this out uh don't don't try going to the server because i'm going to shut down as soon as i'm done recording this but i'll put a link in the description to gitlab gitlab.com forward slash metalx 1000 i'll call it something like um bad database dump or something like that but i'll try to link in the description and you can just download this file unpackage it to uh to your web directory and as long as you have php and sequel light php module installed uh you should be good to go and you can play around with this yourself so check that out i thank you for watching i hope that answers some questions i hope it educated people who may not be technical you do want to open up this developers console every once in a while and look at stuff um because it doesn't it doesn't take much doesn't take much to go oh look there's information here that shouldn't be here you know it's it's plain text and words so thanks for watching visit filmsbychris.com that's chris the k and check out all the links in the description i hope that you have a great day