• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Insert do bazy danych nie działa.

Object Storage Arubacloud
0 głosów
309 wizyt
pytanie zadane 28 października 2019 w PHP przez Paweł123 Nałogowiec (33,500 p.)

cześć, mam problem z insertem do bazy danych.

Potrzebuje  z dwóch inputów przesłać do bazy danychwartośći.

Kod:

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

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

?>
 <!DOCTYPE html>
 <html lang="en">

 <head>
     <meta charset="UTF-8">
     <title>Calm breeze login screen</title>
     <link rel="stylesheet" href="./style.css">

 </head>

 <body>
     <!-- partial:index.partial.html -->
     <div class="wrapper">
         <div class="container">
             <h1>You Voted!</h1>

             <form class="form" method="post">
                 <input type="text" placeholder="Username" name="username">
                 <input type="number" placeholder="Number" name="number">
                 <button type="submit" id="login-button">Vote</button>
             </form>
         </div>

         <?php
         
    
    $nick = $_POST['username'];
    $number = $_POST['number'];
         
         $sql = "INSERT INTO voted (user, number)
    VALUES ('$nick', $number)";

    mysqli_close($conn);
    ?>

     </div>
     <!-- partial -->
     <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
     <script src="./script.js"></script>

 </body>

 </html>

Dostaję dwa błędy

Notice: Undefined index: username in D:\Programy\xampp\htdocs\clicker\final\index.php on line 41

Notice: Undefined index: number in D:\Programy\xampp\htdocs\clicker\final\index.php on line 42

Wartości nie dodają sie do bazy danych. 
czy ktoś wie czym to jest spowodowane?

Kiedy testowo zrobiłem Inserta, wszystko działało

$sql = "INSERT INTO voted (user, number)
    VALUES ('Test', 4)";

2 odpowiedzi

0 głosów
odpowiedź 28 października 2019 przez michal_php Stary wyjadacz (13,700 p.)
A to w ogóle to łączysz się z bazą danych w sensie nie wyrzuca jakiegoś wyjątku ?
komentarz 28 października 2019 przez Paweł123 Nałogowiec (33,500 p.)
Tak, po stronie łączności z baza danych wszystko jest ok
komentarz 28 października 2019 przez michal_php Stary wyjadacz (13,700 p.)
Czyli z odczytem zawartości nie powinieneś mieć problemów ?
0 głosów
odpowiedź 28 października 2019 przez Arkadiusz Waluk Ekspert (287,950 p.)
Dwa błędy biorą się z tego, że nie zawsze wartości do których próbujesz się dostać będą istniały, a nigdzie tego nie sprawdzasz. Zanim ktoś wyśle formularz tych wartości nie będzie, a próbujesz odczytywać, co generuje ostrzeżenia. Wystarczy wcześniej sprawdzić czy one istnieją lub czy formularz został wysłany.

Do bazy nic się nie dodaje ponieważ nigdzie nie wykonujesz tego zapytania - masz sobie je w zmiennej $sql i nic więcej się z nim nie dzieje. Musisz wysłać je do wykonania w bazie. Nie masz też zabezpieczenia przed atakiem sql injection, wypadałoby bindować parametry do zapytania.
komentarz 28 października 2019 przez Paweł123 Nałogowiec (33,500 p.)

Zabezpieczenia przed atakami sql dodam później.

Próbuje wykonać zapytanie do bazy, jednak dostje błedy.


Notice: Undefined variable: sql in D:\Programy\xampp\htdocs\clicker\final\index.php on line 44

Warning: mysqli_query(): Empty query in D:\Programy\xampp\htdocs\clicker\final\index.php on line 44

Notice: Undefined variable: sql in D:\Programy\xampp\htdocs\clicker\final\index.php on line 47
Error:

Dlaczego takie błedy dostaję?

 

<!DOCTYPE html>
 <html lang="en">

 <head>
     <meta charset="UTF-8">
     <title>Calm breeze login screen</title>
     <link rel="stylesheet" href="./style.css">

 </head>

 <body>
     <!-- partial:index.partial.html -->
     <div class="wrapper">
         <div class="container">
             <h1>You Voted!</h1>

             <form class="form" method="post">
                 <input type="text" placeholder="Username" name="username">
                 <input type="number" placeholder="Number" name="number">
                 <button type="submit" id="login-button" name="send">Vote</button>
             </form>
         </div>

       <?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "clicker";
 
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
  if(isset($_POST['send'])){
    $nick = $_POST['username'];
    $number = $_POST['number'];
         
         $sql = "INSERT INTO voted (user, number)
    VALUES ('$nick', '$number')";    
    }

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

mysqli_close($conn);
?>

     </div>
     <!-- partial -->
     <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
     <script src="./script.js"></script>

 </body>

 </html>

 

komentarz 28 października 2019 przez Arkadiusz Waluk Ekspert (287,950 p.)
Przeanalizuj to co napisałeś. Zmienną $sql z zapytaniem masz w warunku if(isset($_POST['send'])), a więc ta zmienna ustawi się tylko, gdy z formularza zostanie przesłana wartość send. mysqli_query próbujesz za to wykonać za każdym razem, niezależnie od tego czy formularz został przesłany. Gdy nie został, to zmiennej $sql nie ma.

Podobne pytania

0 głosów
2 odpowiedzi 199 wizyt
pytanie zadane 22 marca 2019 w PHP przez podgorowicz Początkujący (340 p.)
–1 głos
1 odpowiedź 306 wizyt
pytanie zadane 29 lipca 2017 w PHP przez UltraSF Stary wyjadacz (11,740 p.)
–2 głosów
1 odpowiedź 310 wizyt
pytanie zadane 21 stycznia 2017 w C i C++ przez Michaś Nowicjusz (120 p.)

92,555 zapytań

141,404 odpowiedzi

319,559 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...