Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Rozwiązano] [PHP] Dodawanie do bazy danych z formularza

dj_wlodi_2000 11 Kwi 2018 17:42 459 27
  • #1 11 Kwi 2018 17:42
    dj_wlodi_2000
    Poziom 9  

    Witam

    Nie jestem orłem ale coś mi nie chce dodawać wartości do SQL. Prosił bym o rzut okiem dla czego nie chce się dodać może jakaś literówka.
    Baza wygląda tak może przez nią jest problem:

    Code:
       1   id   int(6)      UNSIGNED   AUTO_INCREMENT    
    
       2   reg_date   timestamp      
       3   model   varchar(30)   utf8_general_ci      
       4   nr_seryjny   varchar(30)   utf8_general_ci      
       5   nr_inwentaryzacji   varchar(30)      
       6   nazwa_host   varchar(50)   
       7   toner   varchar(30)   
       8   zwrot   date         
       9   opis   varchar(300)   utf8_general_ci

    Kod: php
    Zaloguj się, aby zobaczyć kod

    Nie wypełniam całej bazy bo chcę ostanie dwa pola edytować po wyszukaniu. A dwa pierwsze powinny automatycznie się dodawać po zapisaniu rekordu.
    Z góry dzięki za krytykę że jest chyba z milion postów itp.

    0 27
  • #3 11 Kwi 2018 18:44
    dj_wlodi_2000
    Poziom 9  

    Czyli jeżeli mam id , reg_date, model.... to wpisuję (model,..., ) values ( 'model', ...); a sql sam sobie wpisze do odpowiednich kolumn dane?

    Nie chce to za bardzo działać :/

    0
  • #5 11 Kwi 2018 18:56
    dj_wlodi_2000
    Poziom 9  

    W ostatnich dwóch chcę mieć NULL i tak dodałem ale nadal nie chce dodawać po zmianach z wskazaniem pul.

    $query = "INSERT INTO SERWIS (model, nr_seryjny, nr_inwentaryzacyjny, nazwa_host, toner) VALUES ('model', 'nr_seryjny', 'nr_inwentaryzacyjny', 'nazwa_host', 'toner')";
    Z $ też nie za bardzo

    0
  • #6 11 Kwi 2018 19:08
    marcinj12
    Poziom 40  

    Część po Values miałeś dobrze, mają być z $, żeby PHP mogło tam podstawić wartości zmiennych. Pole nr_inwentaryzacyjny masz wg bazy nazwane nr_inwentaryzacji

    0
  • #7 11 Kwi 2018 19:20
    dj_wlodi_2000
    Poziom 9  

    Dziękuję za sprawdzenie nadal nie działa po poprawieniu literówek. Już parę chwil siedzę nad tym i chyba wzrok zawodzi, a jeszcze muszę zrobić wyszukiwanie :)

    0
  • #8 11 Kwi 2018 19:29
    marcinj12
    Poziom 40  

    Wyświetl sobie wszystkie błędy w skrypcie:

    Kod: php
    Zaloguj się, aby zobaczyć kod
    i potestuj. Może błąd jest gdzie indziej i zapytanie nawet się nie wykonuje.

    0
  • #9 11 Kwi 2018 19:45
    JacekCz
    Poziom 35  

    Typowy scenariusz "sql injection'
    NAWET gdyby wielce hackerów nie oczekiwać, wylot po każdym apostrofie czy znaku specjalnym

    0
  • #10 11 Kwi 2018 19:46
    dj_wlodi_2000
    Poziom 9  

    Nic nie wyświetla :/ zero błędów

    0
  • #11 11 Kwi 2018 19:50
    JacekCz
    Poziom 35  

    nalezy oczekiwać, że będzie wiele sztuk powtarzających się modeli.
    Projekt należy rozbić na dwie tabele. W obecnym projekcie model będzie trudny do wychwycenia np przez literówki

    Nie wiem co w ludzkich słowach powiesz o polu Toner (typ oryginalny (a jak są dwa) / typ rzeczywisty / data, przebieg).
    To prowadzi do trzeciej tabeli mającej bardziej charakter serwisowy. Z tym że ta wypowiedź przekracza zakres wątku

    Edit: nawiasem mówiąc tu na elektrodzie ktoś ogłaszał darmowy program "dla kącika IT"

    0
  • #12 11 Kwi 2018 19:56
    marcinj12
    Poziom 40  

    JacekCz napisał:
    Typowy scenariusz "sql injection'
    NAWET gdyby wielce hackerów nie oczekiwać, wylot po każdym apostrofie czy znaku specjalnym
    Przecież - częściowo - zabezpieczył się przez addslashes(). Może niezbyt wyszukane przy SQL injection, ale nie jest to "typowy" sql injection a zabezpieczy go przed wylatywaniem po znakach specjalnych.
    Tak czy inaczej - i lepiej, i bezpieczniej wykorzystać parametry i mysqli:
    https://www.w3schools.com/php/php_ref_mysqli.asp
    https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection.

    0
  • #13 11 Kwi 2018 19:58
    dj_wlodi_2000
    Poziom 9  

    Tutaj rozwieje już wątpliwości żeby było mało literówek użyję zwijanego paska z gotowymi nazwami tak drukarek jak i tonerów. Wyszukiwać będę jedynie po numerze seryjnym i wyświetlać od ostatniego id. Chcę po wyszukaniu jeszcze edytować zawartość o dwa ostanie pola.

    0
  • #14 11 Kwi 2018 20:11
    JacekCz
    Poziom 35  

    Niewiele wątpliwości rozwiałeś.
    to jest szkolny projekt (sympatyczny w swojej kategorii), czy naprawdę ma pracowac w firmie serwisowej?
    Masz świadomość ile opcji w tych "paskach" będzie?

    W a) cokolwiek zrobisz i zadziała, to będzie dobrze
    w b) kompletne przeprojektowania bazy, doczytanie o relacjach, co to za zwierz "relacja wiele do wiele", a tonery tak mają

    0
  • #15 11 Kwi 2018 20:16
    dj_wlodi_2000
    Poziom 9  

    To ma być projekt, który nie będzie pracował na siebie. :D Po prostu ma uzupełniać (dodawać do bazy) dane, które później zostaną wyciągnięte dla sprawdzenia i edycji. Może DELETE też będzie. :) To wszystko w temacie. Drukarek będzie z 10 i tonerów z 15, więc raczej nie będzie tutaj szału. :D

    Moderowany przez Marek_Skalski:

    Post był raportowany. Poprawiłem pisownię i usunąłem błędny link do strony. Następnym razem proszę pisać po polsku.
    3.1.13. Dbaj o poprawność językową i zachowuj zasady netykiety. Nie wysyłaj wiadomości z których trudno wywnioskować co ich autor chciał przekazać.

    0
  • #16 11 Kwi 2018 20:23
    JacekCz
    Poziom 35  

    dj_wlodi_2000 napisał:
    To ma być projekt który nie będzie pracował na siebie :D po prostu ma się uzupełniać (dodawać do bazy) dane które później zostaną wyciągnięte dla sprawdzenia i edycji może DELETE też będzie :) no i to wszystko w temacie. drukarek będzie z 10 i tonerów z 15 więc raczej nie będzie tutaj szału :D


    Poprzednia zagadka byłą "katalog do utrzymania spójności"

    Gdyby zgadywać "obsługa własna naszego sprzętu w dziale IT" (są przesłanki do takiego domniemania), za mało to jest o czasie, datach usług, numerach dokumentów (gwarancjach?)
    Dla "kącika IT" to strategiczne dane. Dodam, nie "delete" tylko "hide"

    Im więcej ukrywasz, tym mniej dostaniesz sensownych rad.

    0
  • #17 11 Kwi 2018 20:36
    dj_wlodi_2000
    Poziom 9  

    wiem chcesz dobrze ale ja nie potrzebuję więcej informacji po prostu chcę sobie przypomnieć lub też na nowo zacząć pisać jakieś proste rzeczy w php, a fajnie mieć coś co działa i dalej sobie dłubać :D dodawać jakieś dodatki.
    A jeszcze lepiej wiedzieć gdzie i dla czego jest skopane :)

    0
  • #18 11 Kwi 2018 20:43
    marcinj12
    Poziom 40  

    Kod wymaga zdebugowania przez Ciebie, na forum raczej nikt tego nie zrobi.
    Jeśli zastosowałeś się do rad to składniowo powinno być raczej poprawnie, wklej to, co masz teraz. Jeżeli dalej nic nie dodaje, to ja bym gdzie indziej szukał błędu - może po stronie ustawień MySql, może przy próbie połączenia. Wywal chwilowo @ przy @mysql_connect żeby wyświetlić ewentualne błędy. Czy jak zrobisz zapytanie INSERT i z palca wpiszesz do kodu jakieś wartości, to w ogóle je zapisuje? Zacznij od pełnego zapytania ze wszystkimi polami, które zadziała, potem możesz usuwać po jednym polu i patrzeć, kiedy przestanie dodawać.

    0
  • #19 11 Kwi 2018 21:15
    JacekCz
    Poziom 35  

    Na ile kibicuję PHP, to uczysz się starej wersji.
    Język/twórcy dużo eksperymentowali u początków, były decyzje odwracające inne itd...

    Moim zdaniem jak się uczyć, to dobrze.

    0
  • #20 11 Kwi 2018 21:31
    dj_wlodi_2000
    Poziom 9  

    Dramat po usunięciu @ wpisaniu wszystkich danych nie ma błędu. Więc chyba czas zacząć od znalezienia problemu w połączeniu z bazą i w tedy pomyślę co dalej z tym skryptem.

    0
  • #21 11 Kwi 2018 21:41
    marcinj12
    Poziom 40  

    A jesteś pewien tego userdb1 w połączeniu? Bo tam powinien być adres bazy danych, jeżeli masz ją na tym samym serwerze co PHP, to zwykle jest tam localhost.
    Potem masz login i hasło, a login u Ciebie jest taki sam, jak nazwa bazy w mysql_select_db?

    0
  • #22 12 Kwi 2018 07:26
    dj_wlodi_2000
    Poziom 9  

    Zainstalowałem skrypt na innym serwisie wyskakuje komunikat odnośnie:
    Notice: Undefined index: send in /storage/ssd3/421/5372421/public_html/index.php on line 36

    Code:

    <tr><td colspan="2"><input type="submit" value="DODAJ" name="send">
    </table>
    </form>
    <?php

    if ($_POST['send']){
    {
    if(!$_POST['model'] || !$_POST['nr_seryjny'] || !$_POST['nr_inwentaryzacyji'] || !$_POST['nazwa_host'] || !$_POST['toner']){
    echo "wypełnij wszystkie pola";



    i połączenia z bazą
    Code:

    $polaczenie = @mysql_connect ('localhost', 'id5372421_id5372421_user1', 'AAaa123#') or die ("nie udało sie połączyć");
    mysql_select_db('id5372421_drukarki') or die ("Nie mozna zlokalizowac bazy danych");

    Takie mam dane:

    DB Name id5372421_drukarki
    DB User id5372421_id5372421_user1
    DB Host localhost



    Link

    0
  • Pomocny post
    #23 12 Kwi 2018 20:55
    JacekCz
    Poziom 35  

    dj_wlodi_2000 napisał:
    Zainstalowałem skrypt na innym serwisie wyskakuje komunikat odnośnie:
    Notice: Undefined index: send


    Trafiłeś w obszary gdzie PHP się steruje opcjami/zmieniał się z wersji na wersję.
    input type submit prawidłowo nigdy nie dawał parametru w _POST, masz to nieprawidłwo (choć niektóre wersje PHP mogły to ci wybaczać / ukrywać problem).

    Takie niedyskretne wskazanie, ale programista pierwsze co podaje to wersje.
    drugie, niedyskretnie zasugeruję. Poćwicz tak "na zmarnowanie czasu" submit na dwóch polach itd... wbrew pozorom szybciej dojdziesz do czegoś użytecznego

    0
  • #24 14 Kwi 2018 07:48
    dj_wlodi_2000
    Poziom 9  

    Połączyłem się z innym serwisem dodawanie działa. Teraz czas na wyszukiwanie :/ potrzebuję wyszukiwać po dacie i nr seryjnym.

    View.php

    Kod: php
    Zaloguj się, aby zobaczyć kod


    View2.php
    Kod: php
    Zaloguj się, aby zobaczyć kod


    Strona do testów Link
    Mam problem z wyświetlaniem potrzebował bym wyświetlanie całej bazy gdzie ID będzie odwrotnie sortowane.
    Po kliknięciu w pokaż ładuje mi wszystkie dane z tabeli, a potrzebuję tylko jednego właściwego.

    0
  • #25 14 Kwi 2018 10:07
    JacekCz
    Poziom 35  

    dj_wlodi_2000 napisał:


    Kod: php
    Zaloguj się, aby zobaczyć kod



    Kolego.
    Skąd wkleiłeś ten koszmar? Strzelanie we własną stopę ulepszyłeś przez użycie pistoletu maszynowego. Nawet nie wkleiłeś przykładów z oficjalnej dokumentacji.
    Łącznie z nieprawdziwym komentarzem o argumencie a, i genialny o dodawaniu 1.

    Twierdzisz, że nie chcesz gotowca, a się nauczyć. Wiesz czego się nauczysz? Jak NIE programować.
    Tak jak można się nauczyć jak NIE pływać, grać na instrumencie itd...

    Nie rozumiesz (rzekomo) własnego kodu.

    Naprawdę Cię proszę, poćwicz na czymś prostszym - i jak już wklejasz bez zrozumienia, to coś lepsze.

    Ja się żegnam.

    0
  • #26 14 Kwi 2018 12:14
    dj_wlodi_2000
    Poziom 9  

    Przepraszam za kod znaleziony na forum chciałem się pobawić ale jak to taka kaszana to nie wchodzę w to. Znalazłem skrypt ze studiów tylko nie wiem jak ułożyć go w wersji kolumnowej jak ułożę jako kolumny to wyskakuje problem że mam nazwy w równym położeniu do wyników. Na końcu potrzebuję dodać edycję i usunięcie wpisu.

    Link

    Code:


        <?php
          $metoda = $_POST['metoda'];
          $wyrazenie = $_POST['wyrazenie'];
          $wyrazenie = trim($wyrazenie);
          if (!$metoda || !$wyrazenie)
          {
            echo 'Brak parametrów wyszukiwania, wróć do poprzednej strony i spóbuj ponownie!';
            exit;
          }
          if (!get_magic_quotes_gpc())
          {
            $metoda = addslashes($metoda);
            $wyrazenie = addslashes($wyrazenie);
          }
          @ $db = new mysqli('localhost','serwisdrukarek1','aaAA123#','serwisdrukarek1');
         
          if (mysqli_connect_errno())
          {
            echo 'Połączenie z bazą nie powiodło się. Spóbuj ponownie';
            exit;
          }
          $db->query('SET NAMES utf8');
          $db->query('SET CHARACTER_SET utf8_unicode_ci');
          $zapytanie = "select * from DRUKARKI where ".$metoda. " like '%".$wyrazenie."%'";
          $wynik = $db->query($zapytanie);
          $ile_znaleziono = $wynik->num_rows;
          echo '<p> Liczba znalezionych książek: '.$ile_znaleziono.'</p>';
          for ($i=0;$i<$ile_znaleziono;$i++)
          {
            $wiersz = $wynik->fetch_assoc();
            echo '<p><b>Zlecenie: '.stripslashes($wiersz['ID']).'</b><br />';
            echo 'Data zlecenia: '.stripslashes($wiersz['data1']).'<br />';
             echo 'Model: '.stripslashes($wiersz['model']).'<br />';
            echo 'Numer Seryjny: '.stripslashes($wiersz['nr_seryjny']).'<br />';
            echo 'Numer Inwentaryzacyjny: '.stripslashes($wiersz['nr_inwentaryzacji']).'<br />';
            echo 'Nazwa w Sieci: '.stripslashes($wiersz['nazwahost']).'</p><br />';
            echo 'Numer Toner-u: '.stripslashes($wiersz['toner']).'<br />';
            echo 'Opis Uszkodzenia: '.stripslashes($wiersz['opis']).'<br />';
            echo 'Data Zwrotu: '.stripslashes($wiersz['data2']).'</p><br />';

          }
          $wynik->free();
          $db->close();
        ?>



    0
  • #27 15 Kwi 2018 11:51
    dj_wlodi_2000
    Poziom 9  

    Ok wyszukiwanie już mam teraz pracuję nad edycją mam 2 pliki w indexie wczytuję dane z tabeli i mam dwa przyciski usuń i edytuj. tylko edytowanie coś mi nie chce działać za pewne to jakaś literówka lub zmienną zmieniłem ale jak się tyle kodów przegląda to może coś umknąć prosiłbym o rzut okiem.

    Code:

    <?php
    include_once 'dbMySql.php';
    $con = new DB_con();
    $DRUKARKI = "DRUKARKI";
    // data insert code starts here.
    if(isset($_GET['edit_id']))
    {
       $sql=mysql_query("SELECT * FROM DRUKARKI WHERE ID=".$_GET['edit_id']);
       $result=mysql_fetch_array($sql);
    }

    if(isset($_POST['btn-update']))
    {

       $data1 = $_POST['data1'];
       $model = $_POST['model'];
       $nr_seryjny = $_POST['nr_seryjny'];
       $nr_inwentaryzacji = $_POST['nr_inwentaryzacji'];
       $nazwahost = $_POST['nazwahost'];
       $toner = $_POST['toner'];
       $Opis = $_POST['Opis'];
       $data2 = $_POST['data2'];
       $id=$_GET['edit_id'];
       $res=$con->update($ID,$data1,$model,$nr_seryjny,$nr_inwentaryzacji,$nazwahost,$toner,$Opis,$data2);
       if($res)
       {
          ?>
          <script>
          alert('Record updated...');
            window.location='index.php'
            </script>
          <?php
       }
       else
       {
          ?>
          <script>
          alert('error updating record...');
            window.location='index.php'
            </script>
          <?php
       }
    }
     <tr>
        <td><input type="text" name="ID" placeholder="ID" value="<?php echo $result['ID']; ?>"  /></td>
        </tr>

        <tr>
        <td><input type="text" name="data1" placeholder="Data" value="<?php echo $result['data1']; ?>"  /></td>
        </tr>
        <tr>
        <td><input type="text" name="model" placeholder="Model" value="<?php echo $result['model']; ?>" /></td>
        </tr>
        <tr>
        <td><input type="text" name="nr_seryjny" placeholder="Numer Seryjny" value="<?php echo $result['nr_seryjny']; ?>" /></td>
        </tr>
        <tr>
        <td><input type="text" name="nr_inwentaryzacji" placeholder="Numer Inwentaryzacji" value="<?php echo $result['nr_inwentaryzacji']; ?>"  /></td>
        </tr>
    <tr>
        <td><input type="text" name="nazwahost" placeholder="Nazwa w Sieci" value="<?php echo $result['nazwahost']; ?>"  /></td>
        </tr>
    <tr>
        <td><input type="text" name="toner" placeholder="Toner" value="<?php echo $result['toner']; ?>"  /></td>
        </tr>
    <tr>
        <td><input type="text" name="Opis" placeholder="Opis Uszkodzeń" value="<?php echo $result['Opis']; ?>"  /></td>
        </tr>
    <tr>
        <td><input type="text" name="data2" placeholder="Data Zwrotu" value="<?php echo $result['data2']; ?>"  /></td>
        </tr>

        <tr>
        <td>
        <button type="submit" name="btn-update"><strong>AKTUALIZUJ</strong></button></td>
        </tr>

    Połączenie z bazą i funkcja update


    Code:
       
    
    public function update($ID,$data1,$model,$nr_seryjny,$nr_inwentaryzacji,$nazwahost,$toner,$Opis,$data2)
       {
          $res = mysql_query("UPDATE $DRUKARKI SET ID='$ID', data1='$data1', model='$model', nr_seryjny='$nr_seryjny', nr_inwentaryzacji='$nr_inwentaryzacji', nazwahost='$nazwahost', toner='$toner', Opis='$Opis', data2='$data2' WHERE ID=".$id);
          return $res;
       }
    }


    Index.php
    Code:
    function edit_id(id)
    
    {
       if(confirm('Sure to edit this record ?'))
       {
          window.location='edit_data.php?edit_id='+id
       }
    }

    0
  • #28 16 Kwi 2018 20:46
    dj_wlodi_2000
    Poziom 9  

    Problem był taki że nikt się nie zainteresował za bardzo problemem dla tego sam się z nim uporałem z małą pomocą kolegi ze studiów :D Co idzie za tym przesyłam gotowca może nie jest najpiękniej napisany i można by trochę podrasować łączenia bazy z pliku niż w body ale to jeszcze z czasem się zrobi.

    Jak na razie pozdrawiam i powodzenia dla tych którzy zaczynają stawiać pierwsze kroki z PHP tak jak ja :D
    W załączniku plik gotowiec z bazą można zwiększyć sobie pola w tabeli żeby dopisać dłuższy tekst.

    A strona tutaj do wglądu Link
    Dopiero zniknie jak nie będzie odwiedzin :D

    0