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

PHP zapytanie do bazy

Object Storage Arubacloud
0 głosów
532 wizyt
pytanie zadane 10 grudnia 2017 w PHP przez niezalogowany

Witajcie. Mam pewien problem z zapytaniem do bazy danych. Chciałbym zrobić zmiane avataru, działa wszystko oprócz zapytania "update". 

$wynik = $polaczenie->query("UPDATE user SET avatar='$url' WHERE id=$user");

A dokładniej mówiąc ze zmiennymi bo gdy dam zwykłe litery lub cyfry np.

$wynik = $polaczenie->query("UPDATE user SET avatar='costam' WHERE id=3");

Wtedy zmieni mi na "costam" u użytkownika o id "3" ale ze zmiennymi nie działa i nie mam pojęcia dlaczego.

Z góry dziękuję za wszystkie odpowiedzi.

6 odpowiedzi

0 głosów
odpowiedź 10 grudnia 2017 przez CzikaCarry Szeryf (75,340 p.)

Musisz powstawać ukośniki: 

$wynik = $polaczenie->query("UPDATE user SET avatar=\'$url\' WHERE id=$user");

Poza tym lepiej zacznij korzystać z bindowania parametrów :)

komentarz 10 grudnia 2017 przez niezalogowany
Nadal nie zmienia rekordu
0 głosów
odpowiedź 10 grudnia 2017 przez `Krzychuu Stary wyjadacz (13,940 p.)

Do zmiennej $user też dodaj apostrof


$wynik = $polaczenie->query("UPDATE user SET avatar='$url' WHERE id='$user'");

 

0 głosów
odpowiedź 10 grudnia 2017 przez niezalogowany
Żadne z waszych rozwiązań nie działa
komentarz 10 grudnia 2017 przez `Krzychuu Stary wyjadacz (13,940 p.)
Pokaż kod
komentarz 10 grudnia 2017 przez niezalogowany
<?php
	session_start();

	
	include($_SERVER['DOCUMENT_ROOT'].'/include/baza.php');

	$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
	$user = $_SESSION['id'];
	$url = $_POST['url'];
if(!empty($url)){
	$wynik = $polaczenie->query("UPDATE user SET avatar='$url' WHERE id='$user'");
	header('Location: /index.php');
	exit();
}else{
	header('Location: /index.php');
	exit();
}
?>

 

komentarz 10 grudnia 2017 przez `Krzychuu Stary wyjadacz (13,940 p.)
Usuń @ przed mysqli bo w ten sposób ukrywasz błędy, spróbuj dodać w id liczbę (nie przy pomocy zmiennej ) i jak nie będzie działać to na odwrót dodać tekst do URL a w id zmienną.
komentarz 10 grudnia 2017 przez niezalogowany
Nie ma błędu.

Jak zamiast zmiennych napiszę zwykły tekst lub liczbę to będzie działało
komentarz 10 grudnia 2017 przez xandros Nałogowiec (29,450 p.)

Pytanie: a co, jeśli admin będzie chciał zmienić avatar danemu userowi? :P

Nie używaj include do takich rzeczy, a require...

http://php.net/manual/en/function.require.php

znak ?> jest zbedny

 exit(); zapewne też.

Zamiast 

 $url = $_POST['url'];

Użyj

 $url = filter_input(INPUT_POST, 'url', FILTER_VALIDATE_URL);

http://php.net/manual/en/function.filter-input.php

komentarz 11 grudnia 2017 przez niezalogowany
Co do zmiany przez admina. To później dodam w panelu
0 głosów
odpowiedź 10 grudnia 2017 przez Ehlert Ekspert (212,670 p.)
  1. Nie sprawdzasz dokumentacji. 
  2. Przez pierwszy punkt, nie sprawdzasz, czy nie wystąpił jakikolwiek błąd. 
  3. Nie debugujesz kodu. 
  4. Zapytania do bazy, jeśli piszesz w PHP w taki sposób, należy wcześniej testować korzystając z jakiegoś klienta Mysql.
  5. Słowo user jest słowem kluczowym MySQL i korzystanie z niego odnosząc się do swoich customowych zasobów, to proszenie się o kłopoty.  
komentarz 10 grudnia 2017 przez niezalogowany
Testowałem to zapytanie w phpmyadmin i działało normalnie
komentarz 10 grudnia 2017 przez xandros Nałogowiec (29,450 p.)

Słowo user jest słowem kluczowym MySQL i korzystanie z niego odnosząc się do swoich customowych zasobów, to proszenie się o kłopoty.  

`` twoim wybawcą 

0 głosów
odpowiedź 10 grudnia 2017 przez xandros Nałogowiec (29,450 p.)

Po pierwsze włącz sobie pokazywanie błędów przez wyjątek. Zapewne pole avatar może być varchar(32), a wprowadzasz uri o długości 64.

Po drugie, query używasz, jak nie masz danych z zewnątrz, a że takie masz, to binduj zmienne.

//mysqli
$stmt = $connect->prepare('UPDATE user SET avatar=? WHERE id=?');
$stmt->bind_params('ss', $avatarUri, $userId);
$stmt->execute();

//pdo
$stmt = $connect->prepare('UPDATE user SET avatar=:avatar WHERE id=:id');
$stmt->execute(['id'=> $userId, 'avatar' => $avatarUri]);

 

komentarz 10 grudnia 2017 przez niezalogowany
Jak się nauczę to będę używać co do błędów żadnych nie ma. Inne zapytania działają normalnie tylko to nie działa ze zmiennymi
komentarz 10 grudnia 2017 przez xandros Nałogowiec (29,450 p.)
Mama bobbiego nie byłaby z ciebie dumna

https://imgs.xkcd.com/comics/exploits_of_a_mom.png
komentarz 10 grudnia 2017 przez xandros Nałogowiec (29,450 p.)

I recommend that you always use prepared statements with bound queries instead of PDO::quote() and mysqli_real_escape_string().

Source: https://code.tutsplus.com/tutorials/pdo-vs-mysqli-which-should-you-use--net-24059 

0 głosów
odpowiedź 11 grudnia 2017 przez niezalogowany
Wiecie co mam poprawić, żeby to zapytanie działalo czy nie?
komentarz 11 grudnia 2017 przez Bartess Gaduła (3,630 p.)

Próbowałeś coś zrobić z  tym,na co zwrócił uwagę Ehlert (słowo kluczowe user), a podpowiedział Kolega xandros? Wsadź user``, czyli (...)'UPDATE `user` SET(...) zamiast (...) 'UPDATE user SET (...)

 Inne zapytania działają normalnie.

W tych innych pytaniach używasz tabeli user? Z `` czy bez? Ewentualnie zmień na chwilę nazwę tabeli z user na inną (np.: users).

komentarz 11 grudnia 2017 przez niezalogowany
Zapytanie miałem wręcz ctrl+c i ctrl+v tylko pozmieniałem zmienne.

I tak  próbowałem wszystkiego tego co pisali
komentarz 11 grudnia 2017 przez Bartess Gaduła (3,630 p.)
A zamiany nazwy tabeli próbowałeś? (ewentualnie utwórz  sobie kopię users z user).

Podobne pytania

0 głosów
1 odpowiedź 5,193 wizyt
0 głosów
1 odpowiedź 376 wizyt
pytanie zadane 23 listopada 2017 w PHP przez Zelek Użytkownik (960 p.)
0 głosów
1 odpowiedź 349 wizyt
pytanie zadane 24 lipca 2017 w PHP przez blocks Początkujący (280 p.)

92,554 zapytań

141,399 odpowiedzi

319,535 komentarzy

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

...