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

UPDATE zwraca wartość jakby działało, ale nie aktualizuje danych

Object Storage Arubacloud
0 głosów
529 wizyt
pytanie zadane 12 lipca 2017 w PHP przez MałyAleWariat Bywalec (2,830 p.)

Problem wygląda tak, że loguje się na testowe konto na stronce (localhost), i próbuję dodać zdjęcie do folderu w ten sposób:

<?php
    session_start();
	if (!isset($_SESSION['online'])) {
		header('Location: index.php');
		exit();
	}

	$msg = "";
	
    if  (isset($_POST['upload'])) {
        $target = "images/".basename($_FILES['image']['name']);
        require_once "connect.php";
        $db_connect = new mysqli($host, $db_user, $db_password, $db_name);
        
        $image = $_FILES['image']['name'];
		
		$sql = "INSERT INTO dane (zdjecie_i) VALUES ('$image')";
		mysqli_query($db_connect, $sql);
		
		if (move_uploaded_file($_FILES['image']['tmp_name'], $target)) {
			$msg = "Zdjęcie dodane!";
		} else {
			$msg = "Błąd podczas wgrywania zdjęcia.";
		}
    }
?>

Tak wygląda formularz:

<div class="userProfileEdit">
    <form method="post" action="user_profile.php" enctype="multipart/form-data">
        <input type="file" name="image">
        <input type="submit" name="upload" value="Zmień zdjęcie">
        <?php 
            echo $msg;
        ?>
    </form>
</div>

Kiedy zamiast UPDATE, jest INSERT INTO, to zdjęcie zostaje dodane do folderu, ale tworzy się nowy użytkownik w bazie danych, a w obu przypadkach $msg wyskakuje jako "Zdjęcie dodane".
I teraz moje pytanie brzmi, czy muszę jakoś wyciągnąć wcześniej z bazy ID użytkownika który się przed chwilą zalogował, żeby dodało do właściwej kolumny? Czy mam coś nie tak w kodzie?  A może coś nie tak zrozumiałem?

komentarz 12 lipca 2017 przez CzikaCarry Szeryf (75,340 p.)
Pokaż strukturę bazy i te twoje zapytanie UPDATE, bo ciężko cokolwiek zrozumieć w z Twojej wypowiedzi.

Pozdrawiam.
komentarz 12 lipca 2017 przez MałyAleWariat Bywalec (2,830 p.)

To samo, tylko zamiast INSERT INTO, jest UPDATE, tak jak napisałem wcześniej.


 

komentarz 12 lipca 2017 przez MałyAleWariat Bywalec (2,830 p.)
<?php
    session_start();
    if (!isset($_SESSION['online'])) {
        header('Location: index.php');
        exit();
    }
 
    $msg = "";
     
    if  (isset($_POST['upload'])) {
        $target = "images/".basename($_FILES['image']['name']);
        require_once "connect.php";
        $db_connect = new mysqli($host, $db_user, $db_password, $db_name);
         
        $image = $_FILES['image']['name'];
         
        $sql = "UPDATE dane (zdjecie_i) VALUES ('$image')";
        mysqli_query($db_connect, $sql);
         
        if (move_uploaded_file($_FILES['image']['tmp_name'], $target)) {
            $msg = "Zdjęcie dodane!";
        } else {
            $msg = "Błąd podczas wgrywania zdjęcia.";
        }
    }
?>

 

komentarz 12 lipca 2017 przez CzikaCarry Szeryf (75,340 p.)
Dobra, co do struktury bazy: po kiego grzyba tyle kolumn? Wystarczy kolumna z id. Zamiast wszystkich kolumn ze zdjęciami robisz tabelę z pojedynczymi zdjęciami i id, a potem łączysz relacjami. Tak samo z ofertą.

Co do zapytania: dlaczego nie dałeś tam WHERE? Co chciałeś przez to zapytanie osiągnąć? Nic nie rozumiem... :D
komentarz 12 lipca 2017 przez MałyAleWariat Bywalec (2,830 p.)
Czyli tak jak pytałem, muszę wyciągnąć jakoś z bazy ID zalogowanego użytkownika?
komentarz 12 lipca 2017 przez MałyAleWariat Bywalec (2,830 p.)

Ok, zrobiłem tak:
 

<?php
    session_start();
	if (!isset($_SESSION['online'])) {
		header('Location: index.php');
		exit();
	}

	$msg = "";
	
    if  (isset($_POST['upload'])) {
        $target = "images/".basename($_FILES['image']['name']);
        require_once "connect.php";
        $db_connect = new mysqli($host, $db_user, $db_password, $db_name);
        
        $image = $_FILES['image']['name'];
		
		$sql = "UPDATE dane (zdjecie_i) VALUES ('$image') WHERE login='".$_SESSION['login']."'";
		mysqli_query($db_connect, $sql);
		
		if (move_uploaded_file($_FILES['image']['tmp_name'], $target)) {
			$msg = "Zdjęcie dodane!";
		} else {
			$msg = "Błąd podczas wgrywania zdjęcia.";
		}
    }
?>

I dalej $msg wyświetla, że zdjęcie dodane, ale w bazie nic się nie zmienia.

komentarz 12 lipca 2017 przez CzikaCarry Szeryf (75,340 p.)
Musisz po czymś identyfikować gdzie wstawić te dane, czy to po id, czy po loginie, to twój interes.

$msg wyświetla, że zdjęcie dodane, bo jest w ofierze który sprawdza, czy zdjęcie zostało przeniesione do folderu. Czy ty  wogóle sam wiesz co piszesz?
komentarz 12 lipca 2017 przez MałyAleWariat Bywalec (2,830 p.)

Napisałem przecież, że zrobiłem tak:

 $sql = "UPDATE dane (zdjecie_i) VALUES ('$image') WHERE login='".$_SESSION['login']."'";

Czyli powinno mi wziąć login z sesji logowania prawda?

komentarz 12 lipca 2017 przez CzikaCarry Szeryf (75,340 p.)

Nawet nie powinno, ale tak robi. Poza tym, wcześniej napisałeś to:

I teraz moje pytanie brzmi, czy muszę jakoś wyciągnąć wcześniej z bazy ID użytkownika który się przed chwilą zalogował, żeby dodało do właściwej kolumny?

Co trochę się kłóci z tym, co piszesz, bo login =/= id, ale pomińmy to :D 

komentarz 12 lipca 2017 przez MałyAleWariat Bywalec (2,830 p.)
A jaka jest różnica? Kiedy wyciągam login, czy id, to nie powinno mi włożyć wartości przypisanej do kolumny, gdzie te wartości się zgadzają?
1
komentarz 12 lipca 2017 przez CzikaCarry Szeryf (75,340 p.)
Zapomniałeś użyć SET w tym zapytaniu, czemu nie zainstalujesz sobie jakiegoś IDE które od razu Ci powie, że odpierdzielasz manianę w tym zapytaniu? :D
komentarz 12 lipca 2017 przez MałyAleWariat Bywalec (2,830 p.)

Nie jestem omnibusem i pewnie dlatego pytam co robię nie tak. Uczę się jak zapewne widzisz. IDE to coś takiego jak Emmet w Brackets? Zrobiłem :
 

$sql = "UPDATE dane SET zdjecie_i = '$image' WHERE id ='".$_SESSION['id']."'";

I działa, dziękuję.

komentarz 12 lipca 2017 przez MałyAleWariat Bywalec (2,830 p.)
Dobra już przeczytałem czym jest IDE.
komentarz 12 lipca 2017 przez CzikaCarry Szeryf (75,340 p.)
Polecam PHPstorm, jak jesteś uczniem/ studentem to możesz się zarejsetrować na stronie JetBrains i masz wszystkie ich produkty za free :D
komentarz 12 lipca 2017 przez MałyAleWariat Bywalec (2,830 p.)
Nie jestem. Ściągnąłem Eclipse przed chwilą, będzie testowane ;d

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 132 wizyt
pytanie zadane 31 marca 2019 w PHP przez arczi86 Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 155 wizyt
0 głosów
2 odpowiedzi 129 wizyt
pytanie zadane 3 stycznia 2018 w SQL, bazy danych przez smg Użytkownik (760 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!

...