• 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

Object Storage Arubacloud
0 głosów
13,354 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 (287,950 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,095 wizyt
0 głosów
1 odpowiedź 290 wizyt
+1 głos
3 odpowiedzi 2,852 wizyt
pytanie zadane 2 kwietnia 2021 w PHP przez maciek3621 Nowicjusz (180 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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!

...