mardi 24 juillet 2018

Function get_post and return mysqli_real_escape_string - PHP

I'm a begginer at coding (I just have a small experience with Visual Basic and Pascal) and now I'm trying to learn some Web Development using O'Reilly's book "Learning PHP, MySQL, Javascript, CSS & HTML5". The problem is that he is using mysql instead of mysqli, so I need to do small changes when I'm following throught the exercises.

In a chapter called "Accessing MySQL databases using PHP" he builts a form where the user can add a new book (with title name, author, year, category and isbn) to the database. My problem is that I have some error than doesn't allow to see in the webpage the new book submitted. I'm not sure, but I think it has to be something with the get_post and mysqli_real escape_string part.

This is the code I've written:

<?php //sqltest.php
require_once 'login.php';
$db_server = mysqli_connect($db_hostname, $db_username, $db_password);

if (!$db_server) die("Unable to connect to MySQL: " . mysqli_error($db_server));

mysqli_select_db($db_server, $db_database)
    or die ("Unable to select database: " . mysqli_error($db_server));

//Deleting a record.
if (isset($_POST['delete']) && isset($_POST['isbn']))
    {
        $isbn = get_post('isbn');
        $query = "DELETE FROM classics WHERE isbn = '$isbn'";

        if (!mysqli_query($db_server,$query))
            echo "DELETE failed: $query<br>" .
            mysqli_error($query) . "<br><br>";
    }

//Add new elements to the database.
if (isset($_POST['author']) && //Isset -> Determine if a variable is set and is not NULL.
    isset($_POST['title']) &&
    isset($_POST['category']) &&
    isset($_POST['year']) &&
    isset($_POST['isbn']))
    {
     $author = get_post($db_server, 'author');
     $title = get_post($db_server, 'title'); 
     $category = get_post($db_server, 'category'); 
     $year = get_post($db_server, 'year'); 
     $isbn = get_post($db_server, 'isbn'); 
    }

     $query = "INSERT INTO classics VALUES" .
         "('$author', '$title', '$category', '$year', '$isbn')";

    //Displaying the form.
    echo <<<_END
    <form action = "sqltest.php" method="post"> <pre>
        Author <input type="text" name="author" />
        Title <input type="text" name="title" />
        Category <input type="text" name="category" />
        Year <input type="text" name="year" />
        ISBN <input type="text" name="isbn" />
             <input type="submit" value="ADD RECORD" />
    </pre></form>
_END;

    $query = "SELECT * FROM classics";
    $result = mysqli_query($db_server, $query);

    if (!$result) die ("Database acess failed: " . mysqli_query_error($result));

    $rows = mysqli_num_rows($result);

    for ($j = 0 ; $j < $rows ; ++$j)
    {
        $row = mysqli_fetch_row($result);
        echo <<<_END
        <pre>
        Author $row[0]
        Title $row[1]
        Category $row[2]
        Year $row[3]
        ISBN $row[4]
        </pre>
        <form action="sqltest.php" method="post">
        <input type="hidden" name="delete" value="yes">
        <input type="hidden" name="isbn" value="$row[4]">
        <input type="submit" value="DELETE RECORD"></form>
_END;
    }

    function get_post($db_server, $var)
    {
        return mysqli_real_escape_string($db_server, $_POST[$var]);
    }
    mysqli_close($db_server);
?>

Just to explain my problem better: I fill the form with the details from the new book and then I submitte it but the new book doesn't appear on the webpage (like the ones added before using mysql comand line).

Thanks for your time, David




Aucun commentaire:

Enregistrer un commentaire