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

PHP I MySQL - dodawanie rekordów do bazy z formularza HTML

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
13,680 wizyt
pytanie zadane 21 stycznia 2017 w SQL, bazy danych przez lukasz1390 Użytkownik (500 p.)

Witam. Od jakiegoś czasu bawię się troszkę PHP i MySQL.  stworzyłem prosty formularz dodawania rekordów do bazy danych, lecz jest pewien problem. Po wysłaniu funkcja zwraca że rekord został dodany poprawne lecz w bazie nic nie ulega zmianie. Komunikat ten jest tylko wtedy, gdy wprowadzę wszędzie tylko liczby. Proszę o pomoc, gdyż nie mogę sobie z tym poradzić

Kod PHP:
 

<?php

session_start();

if((isset($_POST['imie']) && (isset($_POST['nazwisko'])) && (isset($_POST['pseudonim']))&& (isset($_POST['hobby']))&& (isset($_POST['wiek'])))) {
 
$imie = $_POST['imie'];
$nazwisko = $_POST['nazwisko'];
$pseudonim = $_POST['pseudonim'];
$hobby = $_POST['hobby'];
$wiek = $_POST['wiek'];
     
    $connection = @mysql_connect('localhost', 'root', '')
    or die('Brak połączenia z serwerem MySQL');
    $db = @mysql_select_db('uzytkownicy', $connection)
    or die('Nie mogę połączyć się z bazą danych');
     
    // dodajemy rekord do bazy
    $ins = @mysql_query("INSERT INTO uzytkownik values('', $imie, $nazwisko, $pseudonim, $hobby, $wiek)");
     
    if($ins) echo "Rekord został dodany poprawnie";
    else echo "Błąd nie udało się dodać nowego rekordu";
     
    mysql_close($connection);
}
?>


 

<form method="post"  >
<input type="text" name="imie" /><br /><br />
<input type="text" name="nazwisko" /> <br /><br />
<input type="text"  name="pseudonim" /> <br /><br />
<input type="text" name="hobby" /> <br /><br />
<input type="text"  name="wiek" /> <br /><br />

<input type="submit" />



</form>

komentarz 21 stycznia 2017 przez mtk3d Nałogowiec (46,690 p.)

2 odpowiedzi

0 głosów
odpowiedź 21 stycznia 2017 przez Arkadiusz Waluk Ekspert (289,990 p.)
$ins = @mysql_query("INSERT INTO uzytkownik values('', $imie, $nazwisko, $pseudonim, $hobby, $wiek)");

Podstawiane wartości które są stringiem powinieneś odpowiednio potraktować (wziąć w cudzysłowy/apostrofy).

ALE jest to sposób niebezpieczny, nie masz żadnego zabezpieczenia przed sql injection. Ponadto funkcje zaczynające się od mysql_ są od dawna zdeprecjonowane, a od PHP 7 usunięte (oznacza to tyle, że jeśli spróbujesz uruchomić Twój kod na PHP w wersji przynajmniej 7 to zakończy się to przerwaniem skryptu fatal errorem).

Polecam więc przestawić się na PDO (ewentualnie mysqli) i użyć bindowania, dzięki temu zabezpieczysz się przed sql injection.

PS i nie używaj @, one ukrywają błędy, a lepiej błędy zobaczyć i poprawić.

0 głosów
odpowiedź 21 stycznia 2017 przez dawid4157 Nowicjusz (220 p.)
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8"/>
	<title>Add data to database</title>
</head>
<body>
	<form action="add.php" method="post">
		<input type="text" name="name"/></p>
		<p><input type="text" name="surname"/></p>
		<p><input type="text"  name="nickname"/></p>
		<p><input type="text" name="hobby"/></p> 
		<p><input type="text"  name="age"/></p>
 		<p><button type="submit" name="addData"/></p>
	<?php
		try{
			$db = new PDO('mysql:host=your_host;dbname=dbname', 'user', 'password',array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
		}catch (PDOException $e){
		    print 'Błąd połączenia z bazą danych!: '. $e->getMessage().'';
		    die();
		}	
		if(isset($_POST['addData'])){
			$name = trim($_POST['name']);
			$surname = trim($_POST['surname']);
			$nickname = trim($_POST['nickname']);
			$hobby = trim($_POST['name']);
			$age = trim($_POST['age']);

			define('INFO_SUCCESS', 'This form has been sent');
			$sql = $db->prepare("INSERT INTO `users` (`name`, `surname`, `nickname`, hobby`, `age`) VALUES (:name, :surname, :nickname, :hobby, :age)");
			$sql->bindValue(":name", $name, PDO::PARAM_STR);
			$sql->bindValue(":surname", $surname, PDO::PARAM_STR);
			$sql->bindValue(":nickname", $nickname, PDO::PARAM_STR);
			$sql->bindValue(":hobby", $hobby, PDO::PARAM_STR);
			$sql->bindValue(":age", $age, PDO::PARAM_INT);
			echo '<p>'.INFO_SUCCESS.'</p>';
		}
	?>
</body>
</html>

Pomijając to, że nie powinno się mieszać kodu PHP z HTML`em ale to tylko przykład działania. Nietestowane, powinno działać.

Podobne pytania

0 głosów
1 odpowiedź 1,504 wizyt
0 głosów
1 odpowiedź 346 wizyt
+1 głos
3 odpowiedzi 3,480 wizyt
pytanie zadane 2 kwietnia 2021 w PHP przez maciek3621 Nowicjusz (180 p.)

93,174 zapytań

142,185 odpowiedzi

321,971 komentarzy

62,503 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1157p. - dia-Chann
  2. 1139p. - Łukasz Piwowar
  3. 1131p. - CC PL
  4. 1126p. - Łukasz Eckert
  5. 1118p. - Tomasz Bielak
  6. 1104p. - Michal Drewniak
  7. 1083p. - Marcin Putra
  8. 1078p. - rucin93
  9. 1071p. - rafalszastok
  10. 1054p. - Adrian Wieprzkowicz
  11. 1047p. - Piotr Aleksandrowicz
  12. 1037p. - Michał Telesz
  13. 1023p. - Mariusz Fornal
  14. 1017p. - Mikbac
  15. 1005p. - ssynowiec
Szczegóły i pełne wyniki

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 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...