ocena zadania - łaczenie z baza danych

Odpowiedz Nowy wątek
2019-01-10 13:59
Chory Jeleń
0

Moim zadaniem jest stworzenie bazy danych z pliku csv. Napisalem to tak, ale prawdopodobnie da sie to zrobić znacznie lepiej. Mój pomysł to zrobienie 2 plików - jeden do stworzenia tabelek, a drugi do "insertowania danych". Problemem na pewno jest powtarzanie kodu, da sie do jakos pozamykac w klasie, zeby było czytelniej? Poza tym martwi mnie, to że musze podawać login i hasło do bazy danych w pliku, może to też da sie zrobić lepiej. Czekam na ocene i sugestie poprawy, z góry bardzo dziękuje, plusy czekają do rozdania

db.php

<?php 
    # code...
    $servername = "localhost";
    $username = "root";
    $password = "haslo";
    $dbname = "mysql";

// Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

// sql to create table
    $sql = "CREATE TABLE Baza_Struktura (
        id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        code INT(6) NOT NULL,
        value INT(10) NOT NULL,
        status INT(6),
        id_parent INT(6)
    )";

    if ($conn->query($sql) === TRUE) {
        echo "Table MyGuests created successfully";
    } else {
        echo "Error creating table: " . $conn->error;
    }

$file = fopen('baza_strukturacsv.csv', 'r');

while (($line = fgetcsv($file)) !== FALSE) {

    $conn->close();

        print_r($line);

    }
    fclose($file);
 ?>

insert.php

<?php
$servername = "localhost";
    $username = "root";
    $password = "haslo";
    $dbname = "mysql";

/// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$file = fopen('baza_strukturacsv.csv', 'r');

while (($line = fgetcsv($file)) !== FALSE) {

        $sql = "INSERT INTO Baza_Struktura (id, code, value, status, id_parent)
        VALUES (" . $line[0] .  ", " . $line[1] .
         ", " . $line[2] . ", " . $line[3] . ", " . $line[4] . ")";

        if (mysqli_query($conn, $sql)) {
            echo "New record created successfully";
        } else {
             echo "Error: " . $sql . "<br>" . mysqli_error($conn);
        }

        //print_r($line[0] . " " . $line[1]);

        print_r($line);

    }
            mysqli_close($conn);

    fclose($file);
 ?>

Pozostało 580 znaków

2019-01-10 16:03
1

db.php
Tylko raz uda ci się utworzyć tabelę, za każdym kolejnym (albo jak już wcześniej taką tabelę będziesz miał) będziesz miał error. Powinieneś dać
CREATE TABLE ... IF NOT EXISTS...
Wywal te cyferki przy INT, bo one nic nie robią w twoim przypadku.
Nie wiem co ta pętla while robi, ale nie podoba mi się, że w środku niej zamykasz połączenie.

insert.php
SQL Injection!!
Są inne lepsze sposoby wrzucania danych niż linijka po linijce robić INSERT INTO
Nie sprawdzasz, czy któreś z pól nie jest NULLem
Nie sprawdzasz, czy PK ci się nie powtórzy (chyba, że komunikatem o błędzie)

Jeden skrypt masz obiektowy, drugi proceduralny...

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0