Neomezený e-shopový systém s jednotnou administrací
Zobrazují se odpovědi 1 až 7 z 7

Příkazový řádek prohlížeče a zápis dat do tabulky

  1. Čaute, najde se borec přes mysql?

    Na serveru mám nastaveno php 7.
    Potřeboval bych nechat provádět zápis do tabulky mysql přes příkazový řádek prohlížeče.

    Tabulka v mysql má tři sloupce id, name a score.
    Aktuálně se mi podařilo dostat do stavu kdy se mi řádek v tabulce mysql vytvoří, id se zapíše jak má, ale "name" je prázdné a "score" je zapsaná hodnota 0.

    Moc díky za případnou pomoc.

    Příklad:

    Příkazový řádek:
    https://xxx.cz/xxx.php?name="Boby"&score="1000"

    PHP:

    // Create connection
    $conn = new mysqli($mysql_hostname, $mysql_username, $mysql_password, $db_name);

    // Check connection
    if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
    }


    if (isset($_GET["name"]) && isset($_GET["score"])){

    //Lightly sanitize the GET's to prevent SQL injections and possible XSS attacks
    $name = strip_tags(mysqli_real_escape_string($_GET["name"]));
    $score = strip_tags(mysqli_real_escape_string($_GET["score"]));

    $sql = mysqli_query($conn, "INSERT INTO `$db_name`.`$tbl_name` (`id`,`name`,`score`) VALUES ('','$name','$score');");
    if($sql){

    //The query returned true - now do whatever you like here.
    echo 'Your score was saved. Congrats!';

    }else{

    //The query returned false - you might want to put some sort of error reporting here. Even logging the error to a text file is fine.
    echo 'There was a problem saving your score. Please try again later.';

    }

    }else{
    echo 'Your name or score wasnt passed in the request. Make sure you add ?name=NAME_HERE&score=1337 to the tags.';
    }

    mysqli_close($conn);

  2. Co se právě děje na Webtrhu?
  3. 1) https://xxx.cz/xxx.php?name=Boby&score=1000 (bez uvozovek)
    2) google -> mysqli insert example -> první / druhý odkaz (https://www.tutorialspoint.com/mysql...sert_query.htm / https://www.w3schools.com/php/php_mysql_insert.asp)
    3) používej kod tag na v komentáři ... je to čitelnější

    4) Proč db_name v SQL? Však do DB ses už připojil ... ty super šikmý uvozovky v kodu bejt nemusej ... prázdná hodnota by dle mě (může mě někdo opravit) měla být NULL pro increment ....
    Kód:
    $sql = mysqli_query( $conn, "INSERT INTO $tbl_name (id, name, score) VALUES (NULL, '$name', '$score' )" );

  4. Díky za reakci, tvé rady nepomohly.

    Nicméně se mi podařilo funkčnost kódu rozchodit. Problém byl v použití strip_tags a mysqli_real_escape_string. (ve starém php 5x bylo funkční, po přechodu na php 7x nikoli)

    Jen pro úplnost posílám správné/funkční znění kódu:

    Kód:
    // Create connection
    $conn = new mysqli($mysql_hostname, $mysql_username, $mysql_password, $db_name);
    
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
                              }
    
    
    if (isset($_GET["name"]) && isset($_GET["score"])){
    
    //Lightly sanitize the GET's to prevent SQL injections and possible XSS attacks
         $name = strip_tags($_GET["name"]);
         $score = strip_tags($_GET["score"]);
         
         $sql = mysqli_query( $conn, "INSERT INTO $tbl_name (id, name, score) VALUES (NULL,'" . $name ."', '" . $score ."');" );
         
         
         if($sql){
         
    //The query returned true - now do whatever you like here.
              echo 'Your score was saved. Congrats!';
              
                 }
         
         else{
         
    //The query returned false - you might want to put some sort of error reporting here. Even logging the error to a text file is fine.
              echo 'There was a problem saving your score. Please try again later.';
              
              }
         
    
                                                      }
    else{
         echo 'Your name or score wasnt passed in the request. Make sure you add ?name=NAME_HERE&score=1337 to the tags.';
        }
                                                      
    //Close off the MySQL connection to save resources.
    mysqli_close($conn);

  5. funkce mysqli_real_escape_string má 2 povinné parametry v procedurálním stylu, nikoli jeden.
    Navíc do sebe motáš objectové připojení (new mysqli) s procedurálním voláním dotazu na MySQL

    https://www.php.net/manual/en/mysqli...ape-string.php

  6. Zdravím.
    Tvůj kód:
    - není indentovaný podle PSR
    - nemá správně ošetřené vstupy
    - je zranitelný vůči SQL injection
    - nemá ochranu proti vkládání podvržených údajů
    strip_tags() se nepoužívá jako ošetření hodnot před vkládáním řetězců a čísel do databáze.
    SQL v mysqli_query() nemusí končit středníkem.
    Název proměnné $sql je zvolen zmatečně, výsledkem mysqli_query() s příkazem INSERT není SQL ale výsledek vykonání dotazu.
    U hlášky "Make sure you add ?name=NAME_HERE&score=1337 to the tags" slovo tags neodpovídá proměnné GET v URI requestu.
    Není doporučeno hodnoty, které něco zapisují nebo obecně mění stav dat aplikace, posílat jako proměnné GET.

  7. Dekuji vsem za rady. Troufne si nekdo tady vlozit spravny kod dle vasich rad? Nebo se radeji obratit na nekoho kdo kod vytvori za financni uplatu?
    Dekuji za pochopeni.

  8. radeji to smaz a nauc se php :D

Spolupracujeme: Jooble.org, Aximum - profesionální překlady Hostujeme u Server powered by TELE3