Jump to content

requinix

Administrators
  • Posts

    15,053
  • Joined

  • Last visited

  • Days Won

    413

Posts posted by requinix

  1. 1 hour ago, Table said:

    Why do you reply in the first case?

    The other problems are:

    1. Connecting to the database as root and without a password
    2. Running 26 separate queries to get row counts for each letter
    3. Running the same query multiple times without using a prepared statement
    4. The line that calls mysqli_fetch_assoc
    5. Using PHP_SELF
    6. Trying to navigate from one letter page to another won't work
    7. Freeing a result in a variable that doesn't exist
    8. Closing a connection in a variable that doesn't exist

    I assumed that you would fix your current problem, find some of the others, and probably have more questions to ask. Then I would try to help answer them. But if you'd prefer I don't reply to you then I won't do that anymore.

    • Like 1
  2. Here's the code you have:

    $query_result = mysqli_query($query);

    The "procedural style" mentioned in the docs shows this:

    mysqli_query(mysqli $mysql, string $query, int $result_mode = MYSQLI_STORE_RESULT): mysqli_result|bool

    You read it like this:

    1. This is a function named "mysqli_query"
    2. The first parameter is called $mysql - at least in the documentation itself, you can name your variables whatever you want - and it is a mysqli (that's a class) value
    3. The second parameter is called $query and is a string value
    4. The third parameter is called $result_mode and is an int(eger) value; it has a default value of MYSQLI_STORE_RESULT, which will apply when you do not pass a third argument
    5. The function returns a value that is mysqli_result|bool, meaning it will be a mysqli_result (another class) value or a bool(ean) value

    The Parameters section gives more details about those three parameters. Same for the Return Values section and the return value.
    There's also an Errors/Exceptions that is useful to understand when and why the function may or may not behave correctly.

    But back on topic:

    The first parameter is not optional - there is no default value, so you must provide one yourself. You have done so with your $query variable; remember, your variable can be named whatever you want.
    But there's a problem: the parameter is supposed to be a mysqli value, and you provided a query string.

    The second parameter is not optional either, however you are not providing one. That's what PHP is complaining about.

    If you combine those two facts together, the problem should be pretty clear: you need to call the function with a mysqli and a query string, but you only called it with a query string.
    I'm guessing this was originally based on mysql (no 'i') code? There is a mysql_query function but it isn't the same as the mysqli_query function.

    • Like 1
  3. Sounds more like a concurrency problem: you've got two things reading state at the same time, both finding out that the room is available, and both trying to use that room.
    Operations need to be atomic, meaning the act of checking for an available room and joining the room need to work as one cohesive unit, with state information that can't be unknowingly modified by something else.

    How are you finding a room to assign to a user? Is it something straightforward like "SELECT available room" and then "UPDATE room SET is not available anymore"?

    If not that then I don't follow what this "can't tell whether the user is 1 or 2". AJAX polling will start a request, and that request should most definitely be able to identify which user is making it...

  4. Because require() isn't like PHP where you "require" a file and then you get the variables in it. In Javascript, each file is like an independent module, so if you want to share - or export - data from a file then you need to use module.exports as Strider64 showed. What require() will then do, internally, is run the file and then return to you what was exported.

    If you wanted to export just the one value then you can set module.exports like that. If you had multiple values then you can treat module.exports as an object (which is what it is by default) and set properties on it; this pairs well with destructuring.

    const arrayOfObjects = [ ... ];
    
    const anotherArrayOfObjects = [ ... ];
    
    module.exports = { arrayOfObjects, anotherArrayOfObjects };
    const { arrayOfObjects } = require("./data");

     

  5. Images are for memes. If you want to show code then please use the Code <> button and paste it into your post.

     

    $header1 = "Content-Type text/csv";
    $header2 = "Content-Disposition: attachment; filename='" . $csvname . "';";

    They're both malformed: the first one is missing a colon, and the second one is using single-quotes when they're supposed to be double-quotes (and it has an extra semicolon that doesn't belong).

  6. Your first goal should be to reproduce the problem - because you can't know what to fix if you don't know what it is, and if you can't reproduce the problem then how will you know if your fix is working?

    1. Gather more information. What SSL error? Surely there's some more specific information someone can give you? Like an actual error message, maybe?
    2. Apply some logic. Which users are seeing this? What do they have in common? Do they have anything in common at all? Can the users successfully log in at another time?
    3. Think about it from a technical standpoint. There are tons of possible SSL errors (see action item 1) but most of them boil down to the server not giving an appropriate cert. Do you have multiple servers? Is there a load balancer? Geographic CDNs? Are you sure they're all configured with identical information and up-to-date certificates?
    4. Examine the details. "Certain static content not found" isn't any error message I've ever seen before - assuming it's a literal message. Where is it coming from? Under what conditions will it be emitted?

    • Great Answer 1
  7. You're using the htmlentities function when you should not be.

    1. You should be using htmlspecialchars instead when outputting something safely to HTML. htmlentities is unnecessary, and if you "need" it to make something look correct then that means you have other character encoding problems that need to be solved.
    2. You should only be doing that at the very last moment right when you're doing the output - never before, or else you'll run into problems such as your current issue.

  8. What kind of "news" are you talking about? What does it look like? What information is part of the news item, by which I mean things like author names or publish dates or tags or banner images... Because unless you literally want the most basic-looking "news" ever, you're going to need something more than just plain text.

    Because "build a simple flat file" is an implementation decision, and how can you decide that if you don't even know yet what you want implemented?

  9. The way you describe this makes it sound like you're doing something more complicated than what it should be...
    With a proper server, you can use a normal <link> to your CSS file and never need to clear a cache - if you do then that means it's not configured properly.

    The question to answer first is whether your browser is receiving the correct <link>, and if so why it isn't loading the CSS. My guess would be the file path, as you need to remember that $stylecss is relative to the webpage URL and not to the config.php file path.

  10. If you want a distinction between $this (use the instance) and self (use the class statically) then create an enum with cases for instance vs. static, and take that enum as the argument to your attribute.

    But ultimately, the caring about the instance/class needs to happen by whatever code is reading the attribute. As in, you must necessarily already have code that says "for this particular class, find me the attributes" - so reuse that information.

  11. Remember the part where I said

    On 10/16/2023 at 2:12 AM, requinix said:
      ["result"]=>
      array(6) {

    It has a "result" property, which is an array.

    And remember the part where I posted

    On 10/16/2023 at 2:12 AM, requinix said:
    $results = array_reduce($object->results, function($array, $result) {

    Take the time to understand what I was describing about how to read the var_dump output, then look at that one line of code I posted to see if it makes sense according to what I described. It should not make sense, and you should be able to spot a small error.

    I'm trying to get you to learn here, instead of just accepting what a person on the internet says and copy/pasting their code. You can't be a chef by copying someone else, and you can't be a programmer by copying someone else.

  12. 1 hour ago, ohno said:

    I then have this code lower down in my script :

    But what's everything in between?

    Or rather, what's the whole script? Because there's something important here that isn't shown in what you've posted - if statements, function calls, reused variables...

    Also, partly for good measure and partly because there's a rather high likelihood that doing so will help you discover the problem: have you verified that your error reporting/logging settings are appropriate, and then checked for error messages?

  13. 39 minutes ago, rick645 said:

    ok maybe it's right, in my case, to use inheritance

    Probably.

    Inheritance represents an "is a" relationship. Would it be accurate to say that your custom exception class "is an" InvalidArgumentException? If I had code that caught InvalidArgumentException, should that code also be able to catch your exception?
    Composition represents a "has a" relationship - or "needs a", or something else similar to that. Would it be accurate to say that your exception class "has an" InvalidArgumentException? Is your class a distinct form of exception separate, but not entirely unrelated to, an InvalidArgumentException?

    The answer seems like it would be the first one, however the $otherDetails is suspicious and suggests something more than an invalid argument, thus perhaps composition is more appropriate, however the fact that you chose to make it anonymous means it will be impossible to catch or type guard for that particular class in the first place, which makes composition almost useless.

    In other words, your example doesn't make sense. If you want a special exception class then it should be a full named class. If you want special exception data then it needs to be a full named class.

    And that is the real code smell.

  14. 51 minutes ago, rick645 said:

    Many say they avoid inheritance and to encourage composition.

    But do you actually understand why they say that? Because they are not saying that inheritance is bad.

    So tell me: in this situation you find yourself in, why do you feel that composition is better than inheritance?

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.