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

Skrypt nie dodaje danych do bazy.

Object Storage Arubacloud
0 głosów
479 wizyt
pytanie zadane 2 czerwca 2015 w PHP przez sulas99 Początkujący (340 p.)
        <?php 
error_reporting(E_ALL ^ E_NOTICE); 
session_start();
require_once"connect.php";

                 $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
			
			if($polaczenie->connect_errno!=0)
			{
			  echo "Error: ".$polaczenie->connect_errno . "Opis: " . $polaczenie->connect_error; 
			}
			else
			{
					$imie = $_POST['name']; 
					$nazwisko = $_POST['surname']; 
					$data = $_POST['date']; 
					$email = $_POST['email'];
					$login = $_POST['login']; 
					$haslo = $_POST['password'];
				
				if($imie and $nazwisko and $data and $email and $login and $haslo)
				{				
			        
					$query = mysql_query("INSERT INTO user (name, surname, date, email, login, password) value ('$imie', '$nazwisko', '$data', '$email', '$login', '$haslo' ");
     
    if($query) echo "Rekord został dodany poprawnie"; 
    else echo "Błąd nie udało się dodać nowego rekordu"; 
					
			         header('Location: rejestracja.php');
				}
				$polaczenie->close();
			}

?>

Mam problem po wpisaniu danych do formularza i wysłaniu ich nie pojawiają się w bazie danych.

3 odpowiedzi

+2 głosów
odpowiedź 2 czerwca 2015 przez Boshi VIP (100,240 p.)
edycja 2 czerwca 2015 przez Boshi
if($imie and $nazwisko and $data and $email and $login and $haslo)
                { 

Co to jest za warunek? sprawdzasz, czy zmienne są typu true? bez sens.

A  błąd jest w value ma być VALUES

komentarz 2 czerwca 2015 przez Comandeer Guru (600,810 p.)

Nie zapominaj, że PHP to język dynamicznie typowany, więc taki warunek ma sens. Oczekujemy, że zmienne z formularza są tekstem o niezerowej długości - a takowy ewaluuje do prawdy (tzw. koercja typów).

Inna rzecz, że nie jest specjalnie czytelny i lepiej byłoby wykorzystać empty/mb_strlen

komentarz 2 czerwca 2015 przez Boshi VIP (100,240 p.)
Nie zapominam i wiem, że to przejdzie jeżeżli wszystkie dane zmienne będą != "", jednak taki warunek to tylko zapaskudzenie kodu.
komentarz 2 czerwca 2015 przez Comandeer Guru (600,810 p.)
Tu się zgodzę - niesamowicie obniża czytelność.
0 głosów
odpowiedź 2 czerwca 2015 przez Comandeer Guru (600,810 p.)

Rozumiem, że wyświetla się tekst o błędzie? Jeśli tak, to mam dobrą radę, którą dobrze se wyryć w widocznym miejscu:

ZAWSZE SPRAWDZAJ JAKI DOKŁADNIE BŁĄD RZUCA BAZA

A od tego jest mysqli_error.

W tym wypadku błąd jest jednak widoczny od razu: INSERT INTO […] VALUES, nie INSERT INTO […] VALUE

BTW poczytaj o SQL Injection, bo Twój kod to książkowy przykład podatności.

No i gdzie sprawdzasz czy formularz wgl wysłano? Polecam włączyć notices, żeby zobaczyć co PHP dokładnie myśli o Twoim kodzie ;)

0 głosów
odpowiedź 2 czerwca 2015 przez sulas99 Początkujący (340 p.)

Pokażuje mi taki błąd jak to poprawić żeby było dobrze?

Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\xampp\htdocs\KORKI\new_user.php on line 28

A na narzie kod poprawiłem tak: 



        <?php 
error_reporting(E_ALL ^ E_NOTICE); 
session_start();
require_once"connect.php";

                 $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
			
			if($polaczenie->connect_errno!=0)
			{
			  echo "Error: ".$polaczenie->connect_errno . "Opis: " . $polaczenie->connect_error; 
			}
			else
			{
					
					if( $_SERVER['REQUEST_METHOD']=POST)
					{
					$imie = $_POST['name']; 
					$nazwisko = $_POST['surname']; 
					$data = $_POST['date']; 
					$email = $_POST['email'];
					$login = $_POST['login']; 
					$haslo = $_POST['password'];
				
							
			        
					$query = mysql_query("INSERT INTO user (name, surname, date, email, login, password) value ('$imie', '$nazwisko', '$data', '$email', '$login', '$haslo' ");
     
    if($query) echo "Rekord został dodany poprawnie"; 
    else echo "Błąd nie udało się dodać nowego rekordu"; 
					
			         
					}
				$polaczenie->close();
			}

?>

 

komentarz 2 czerwca 2015 przez Comandeer Guru (600,810 p.)

A widzisz - Ty to wgl masz tu sajgon…

Łączysz się z bazą przy pomocy mysqli, a zapytanie chcesz robić przy pomocy mysql

$query = mysql_query("INSERT INTO user (name, surname, date, email, login, password) value ('$imie', '$nazwisko', '$data', '$email', '$login', '$haslo' ");
//vs
$query = $polaczenie->query("INSERT INTO user (name, surname, date, email, login, password) values ('$imie', '$nazwisko', '$data', '$email', '$login', '$haslo' ");

 

komentarz 2 czerwca 2015 przez Comandeer Guru (600,810 p.)

BTW Ty go tak w sumie to nie poprawiłeś…

if( $_SERVER['REQUEST_METHOD']=POST)

Ten kod oznacza "jeśli uda się przypisać wartość stałej POST do zmiennej $_SERVER['REQUEST_METHOD']". A Ty chcesz porównać zmienną $_SERVER['REQUEST_METHOD'] do stringu 'POST' - to zasadnicza różnica!

komentarz 2 czerwca 2015 przez sulas99 Początkujący (340 p.)

A jak poprawnie użyć $_SERVER['REQUEST_METHOD']?

 

komentarz 2 czerwca 2015 przez Comandeer Guru (600,810 p.)
Użyć odpowiedniego operatora.
komentarz 2 czerwca 2015 przez sulas99 Początkujący (340 p.)
Tak to ma być? $_SERVER['POST_METHOD'] Nie mam pojęcia jak to zrobić.
komentarz 2 czerwca 2015 przez efiku Szeryf (75,160 p.)
Użyj operatora porównania by sprawdzić czy $_SERVER['POST_METHOD'] jest równe "POST" :D
komentarz 2 czerwca 2015 przez Comandeer Guru (600,810 p.)

To są podstawy PHP! Jak nie rozróżniasz operatorów oraz nie widzisz różnicy między stałą i stringiem, to nie ma się co dalej pchać w PHP.

if($_SERVER['REQUEST_METHOD'] === 'POST')

 

komentarz 2 czerwca 2015 przez efiku Szeryf (75,160 p.)
@Comandeer, kod budowany na zasadzie c&p ;)

Podobne pytania

0 głosów
4 odpowiedzi 316 wizyt
pytanie zadane 2 czerwca 2015 w PHP przez sulas99 Początkujący (340 p.)
0 głosów
1 odpowiedź 1,343 wizyt
pytanie zadane 20 lipca 2018 w PHP przez dobre.rece Nowicjusz (200 p.)
0 głosów
2 odpowiedzi 347 wizyt
pytanie zadane 20 września 2016 w PHP przez Ditrix Mądrala (5,650 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!

...