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

PHP dodawanie danych z formularza do bazy danych

VPS Starter Arubacloud
+1 głos
3,210 wizyt
pytanie zadane 2 kwietnia 2021 w PHP przez maciek3621 Nowicjusz (180 p.)
edycja 2 kwietnia 2021 przez maciek3621
Problem polega na tym że nie wiem czemu to co jest wpisane nie dodaje się do bazy danych jeżeli jest taka możliwość proszę o wyjaśnienie 

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Wyszukiwarka</title>
    <link rel="stylesheet" href="2.css">
</head>
<body>
<center>

    <form action="" method="post"  >
                Nazwa:<input type="text" name="nazwa"/><br></br>
                Cena: <input type="text" name="cena"/><br></br>
                Typ:  <select><br></br>
                        <option name="typ" value="1">Zupy</option>
                        <option name="typ" value="2">Dania mięsne</option>
                        <option name="typ" value="3">Przystawki</option>
                        <option name="typ" value="4">Napoje</option>
                </select><br></br>
                
                        <input type="submit"  value="Dodaj"/><br></br>
    </form>

                <form action="index.php">
                <input type="submit" value="Wróć" />
    </form>
    
    
<?


$conn = new mysqli('localhost','root','','dane')

    $nazwa = isset($_POST['nazwa']);
    $cena  = isset($_POST['cena']);
    $typ   = isset($_POST['typ']);
    
    
    
    $sql ="INSERT INTO dania (nazwa,cena,typ) Values ('$nazwa','$cena','$typ')";
        

    
?>    
</center>
</body>
</html>        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

 

3 odpowiedzi

+1 głos
odpowiedź 5 kwietnia 2021 przez VBService Ekspert (255,800 p.)
wybrane 6 kwietnia 2021 przez maciek3621
 
Najlepsza

Już nie powinieneś używać <center>

 

 

Jednym ze sposobów sprawdzenia czy formularz jest uruchomiony pierwszy raz, czy kolejny raz (dane przesłane pochodzą z formularza) to: isset($_POST['submit'])

if (isset($_POST['submit'])) { ... }

lub empty($_POST)

if (!empty($_POST)) { ... }

można też if ($_POST)

if ($_POST) { ... }

Ja osobiście preferuję

if ($_SERVER["REQUEST_METHOD"] == "POST") { ... }

 

Propozycja  smiley

add_new_dish.php

<?php
  if ($_SERVER["REQUEST_METHOD"] == "POST" && !empty($_POST)) { // 1
    // var_dump($_POST);
    $nazwa = (empty($_POST['nazwa'])) ? '' : trim($_POST['nazwa']);
    $cena  = (empty($_POST['cena']))  ? '' : (int)$_POST['cena'];
    $typ   = (empty($_POST['typ']))   ? '' : $_POST['typ'];

    try { // 2
      $conn = new mysqli('localhost','root','','dane')
              or die('Błąd połączenia z bazą danych!');

      $sql = 'INSERT INTO dania (nazwa, cena, typ) VALUES (?, ?, ?)';
      if ($stmt = $conn->prepare($sql)) {
        $stmt->bind_param('sii', $nazwa, $cena, $typ);
        $stmt->execute();
        $return_message = 'Danie zostało zapisane.';
      } else {
        // echo $conn->errno . ' ' . $conn->error;
        $return_message = 'Wystąpił problem z zapisaniem dania.';
      }

      $stmt->close();
      $conn->close();
    } catch (Exception $e) { // 2
      $return_message = $e->getMessage();
    }
  } else { // 1
    // Dane nie zostały z formularza przysłane
    // np.: pierwsze uruchomienie skryptu
    $return_message = '';
  }
?>
<!DOCTYPE html>
<html lang="pl">
  <head>
    <meta charset="utf-8">
    <title>Wyszukiwarka</title>
    <link rel="stylesheet" href="2.css">
    
    <style>
      * {
        box-sizing: border-box;
      }
      .form-adding-db-container {
        display: flex;
        justify-content: center;
      }
      .form-adding-db-container .wrap {
        width: 245px;
        font: 1em/1.2em monospace;
      }
      .form-adding-db-container .wrap label, input, select {
        display: block;
        margin: 0.5em;  
      }
      .form-adding-db-container .wrap input[type="text"], select {
        width: 230px;
        padding: 0.2em;
      }
      .form-adding-db-container .wrap .buttons {
        display: flex;
        justify-content: space-between;
        margin: 1em 0.5em;
      }
      .form-adding-db-container .buttons button, a.button {
        font: 1.1em/1.3em monospace;
        width: 60px;
        margin: 0.5em 0;
        cursor: pointer;
        border: 1px solid gray;
        text-align: center;
        text-decoration: none;
        color: black;
        background-color: rgb(239, 239, 239);
      }
      .form-adding-db-container .return-message {
        color: green;
      }
    </style>
  </head>
  <body>
    <div class="form-adding-db-container">
      <div class="wrap">

        <form action="" method="post">
          <label for="nazwa">Nazwa:</label>
          <input type="text" id="nazwa" name="nazwa" required>

          <label for="cena">Cena:</label>
          <input type="text" id="cena" name="cena" value="0" required>

          <label for="typ">Typ:</label>
          <select id="typ" name="typ">
            <option value="1">Zupy</option>
            <option value="2">Dania mięsne</option>
            <option value="3">Przystawki</option>
            <option value="4">Napoje</option>
          </select>

          <div class="buttons">
            <button type="submit">Dodaj</button>
            <a href="index.php" class="button">Wróć</a>
          </div>
        </form>

        <div class="return-message">
          <?php echo $return_message; ?>
        </div>

      </div>
    </div>

  </body>
</html>

 

mysqli_stmt::bind_param ]
How to remove all leading zeros in a string in PHP ? ]

komentarz 5 kwietnia 2021 przez maciek3621 Nowicjusz (180 p.)
edycja 5 kwietnia 2021 przez maciek3621
Ja z takim zapytaniem jaki jest powód tego że gdy dam 
isseta tam $nazwa = $_POST['name'] to działa ale uzupełnia
 tylko np typ 1 i to jest w 
każdej tabeli i zamiast jednej kolumny tworzą się np 4 jaki
 jest tego powód i rozwiązanie. Dodam jest to zadanie na zajęcia a
ja nie lubię iść na łatwiznę z php dopiero zaczynamy i chcę się go nauczyć więc dzikuję za podesłanie propozycji ale wolę otrzymac pomoc 
przy tym zadaniu

<?php
$conn = new mysqli('localhost','root','','dane');
		
	?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Dodawanie</title>
	<link rel="stylesheet" href="2.css">
</head>
<body>
<center>

	<form action="" method="post"  >
				Nazwa:<input type="text" name="name"/><br></br>
				Cena: <input type="text" name="price"/><br></br>
				Typ:  <select name="type"><br></br>
						<option value="1">Zupy</option>
						<option value="2">Dania mięsne</option>
						<option value="3">Przystawki</option>
						<option value="4">Napoje</option>
				</select><br></br>
				
						<button type="submit" name="dodaj">Dodaj</button><br></br>
	</form>

	<form action="index.php">
				<input type="submit" value="Wróć" />
	</form>
	<?php
	
	?>
	
</center>
</body>
</html>		
<?php
		$nazwa = $_POST['name']  ;
		$cena = $_POST['price'] ;
		$typ  = $_POST['type']  ;
			 echo  $nazwa;
			 echo  $cena;
			 echo  $typ;
	
	
	$sql = "INSERT INTO dania(typ, nazwa, cena) VALUES ($typ,$nazwa,$cena)";
	$conn=$conn->query($sql); 
	echo $sql;
?>
		
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

 

komentarz 5 kwietnia 2021 przez VBService Ekspert (255,800 p.)

Sprawdź do czego służy isset(...) i ewentualne przypisanie wartości (danych do zmiennej) za jego pomocą może tylko nastąpić za pomocą ternary operator

$action = (isset($_POST['action'])) ? $_POST['action'] : 'brak';

jest odpowiednikiem zapisu

if (isset($_POST['action'])) {
  $action = $_POST['action'];
} else {
  $action = 'brak';
}

 

komentarz 6 kwietnia 2021 przez maciek3621 Nowicjusz (180 p.)
Chodziło mi bardziej o powód dlaczego np z jednego zapytanie robi mi się 5 razy spaghheti np
komentarz 6 kwietnia 2021 przez VBService Ekspert (255,800 p.)

A spróbuj "jawnie" zamknąć połączenie z bazą danych ($conn->close())

<?php
  var_dump($_POST);

  $nazwa = $_POST['name'];
  $cena  = $_POST['price'];
  $typ   = $_POST['type'];

  /*   
    echo  $nazwa;
    echo  $cena;
    echo  $typ;
  */ 

  var_dump($nazwa, $cena, $typ);

  $conn = new mysqli('localhost', 'root', '', 'dane');  
  $sql = "INSERT INTO dania(typ, nazwa, cena) VALUES ($typ, $nazwa, $cena)";
  $conn->query($sql); 
  echo $sql;

  $conn->close();
?>

"podglądanie zawartości" zmiennych var_dump(...) 

komentarz 6 kwietnia 2021 przez maciek3621 Nowicjusz (180 p.)
przestało dodwać
komentarz 6 kwietnia 2021 przez VBService Ekspert (255,800 p.)

Spróbuj

<?php
  var_dump($_POST);
 
  $nazwa = $_POST['name'];
  $cena  = $_POST['price'];
  $typ   = $_POST['type'];
 
  /*   
    echo  $nazwa;
    echo  $cena;
    echo  $typ;
  */
 
  var_dump($nazwa, $cena, $typ);
 
  $conn = new mysqli('localhost', 'root', '', 'dane');  
  $sql = "INSERT INTO dania(typ, nazwa, cena) VALUES ($typ, $nazwa, $cena)";
  if ($conn->query($sql) === TRUE) {
    echo "Nowy rekord został dodany";
  } else {
    echo "Błąd: " . $sql . "<br>" . $conn->error;
  }
 
  $conn->close();
?>

 

komentarz 6 kwietnia 2021 przez maciek3621 Nowicjusz (180 p.)

Ja mam pytanie co mogę zmienić w swoim kodzie żeby działało bo teraz mam tak że jak dodaje do dodaje 1 taką jaką powinno z danymi z formularza ale dodaje też 2 pustą. A gdy w form daje action="index.php" żeby po wypełnieniu pokazywało tą stronę to nagle wariuje i dodaje bez sensu jak wcześniej czyli np daje 5 razy sapghheti. Gdy próbuje twoim sposobem to nie działa i wyskakuje dużo błędów

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Dodawanie</title>
	<link rel="stylesheet" href="2.css">
</head>
<body>
<center>

	<form method="post" action="">
				<input type="text" name="name" placeholder="Nazwa Dania..."/><br></br>
				<input type="text" name="price" placeholder="Cena Dania..."/><br></br>
				Typ:<select name="type" ><br></br>
						<option value="1">Zupy</option>
						<option value="2">Dania mięsne</option>
						<option value="3">Przystawki</option>
						<option value="4">Napoje</option>
				</select><br></br>
				
						<button type="submit" name="dodaj">Dodaj</button><br></br>
	</form>

	<form action="index.php">
				<input type="submit" value="Wróć" />
	</form>
	
	
	
	
</center>
</body>
</html>		
<?php
        $nazwa = $_POST['name'];
		$cena  = $_POST['price'];
		$typ   = $_POST['type'];
		
		$conn = new mysqli('localhost','root','','dane');
		$sql = "INSERT INTO dania(typ, nazwa, cena) VALUES ('$typ','$nazwa','$cena')";
		
			$conn=$conn->query($sql); 
			echo $sql;
?>
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

 

komentarz 6 kwietnia 2021 przez VBService Ekspert (255,800 p.)

Rozumiem, że ten kod u "góry"  w Twoim komentarzu to jest ten na który obecnie uruchamiasz, jeżeli tak, to czemu nie dopiszesz, któreś z propozycji na temat

1
komentarz 6 kwietnia 2021 przez maciek3621 Nowicjusz (180 p.)
Działa dziękuję za pomoc i cierpliwość
+1 głos
odpowiedź 2 kwietnia 2021 przez radek024 Szeryf (77,160 p.)

Przeanalizuj zapytanie wysyłane do bazy:

INSERT INTO dania(nazwa,cena)Values("'.$nazwa.'","'.$cena.'","'.$typ.'")

czy na pewno tak powinno wyglądać?

komentarz 2 kwietnia 2021 przez VBService Ekspert (255,800 p.)
edycja 2 kwietnia 2021 przez VBService

Dla ułatwienia "analizy"  smiley

INSERT INTO dania (    nazwa,       cena)
           VALUES ("'.$nazwa.'","'.$cena.'","'.$typ.'")

 

komentarz 2 kwietnia 2021 przez maciek3621 Nowicjusz (180 p.)
tylko ja nie do końca rozumiem jeszcze php i nie wiem co tam jest nie tak
komentarz 2 kwietnia 2021 przez VBService Ekspert (255,800 p.)

Ale Ty masz błąd w zapytaniu sql.

INSERT INTO dania (    nazwa,       cena,       ?)
           VALUES ("'.$nazwa.'","'.$cena.'","'.$typ.'")

 

komentarz 2 kwietnia 2021 przez maciek3621 Nowicjusz (180 p.)
czy możesz powiedzieć mi gdzie mam błąd lub jak ma wyglądać poprawne zapytanie SQL
komentarz 2 kwietnia 2021 przez VBService Ekspert (255,800 p.)

Nie wiem jak kolumna się nazywa, ale zgaduję po nazwie zmiennej php $typ, że nazwa pominiętej kolumny w sql-u to, typ   wink

INSERT INTO dania (    nazwa,       cena,       typ)
           VALUES ("'.$nazwa.'","'.$cena.'","'.$typ.'")

 

INSERT INTO dania (nazwa, cena, typ) VALUES ("'.$nazwa.'","'.$cena.'","'.$typ.'")

 

SQL INSERT INTO Statement ]

komentarz 2 kwietnia 2021 przez maciek3621 Nowicjusz (180 p.)
dodałem ale niestety nic to nie dało i nie wiem gdzie jest problem
komentarz 2 kwietnia 2021 przez VBService Ekspert (255,800 p.)
komentarz 2 kwietnia 2021 przez maciek3621 Nowicjusz (180 p.)
a mógłbym się dowiedzieć czy formularz mam dobrze skonstruowany chodzi mi o select
komentarz 2 kwietnia 2021 przez radek024 Szeryf (77,160 p.)
O budowie samych formularzy możesz poczytać tutaj: https://www.tutorialrepublic.com/html-tutorial/html-forms.php. Generalnie sporo jest tego rodzaju treści w sieci. Na początku jednak - jeżeli nie wiesz o co chodzi w bazach - warto, abyś usiadł do SQLa. Nic Ci po dobrze napisanym PHP, skoro nie wiesz jak operować na danych.
+1 głos
odpowiedź 2 kwietnia 2021 przez SzkolnyAdmin Szeryf (88,580 p.)

1. Dla pola select ustaw name="typ" (nie dla option).

2. Wyślij zapytanie do bazy:

$conn->query($sql);

Powinieneś sprawdzić, czy dane z formularza zostały wysłane przed ich odebraniem w liniach 36-38.

komentarz 2 kwietnia 2021 przez maciek3621 Nowicjusz (180 p.)
a jak to się sprawdza nie wiem ponieważ jestem nowy w php i się uczę jeszcze

Podobne pytania

0 głosów
2 odpowiedzi 13,569 wizyt
0 głosów
1 odpowiedź 478 wizyt
pytanie zadane 25 czerwca 2020 w PHP przez Tomcio2287 Nowicjusz (220 p.)
+1 głos
1 odpowiedź 257 wizyt
pytanie zadane 31 stycznia 2022 w PHP przez trixter310 Obywatel (1,440 p.)

92,975 zapytań

141,938 odpowiedzi

321,181 komentarzy

62,302 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...