Przepraszam. Czy ktos moze mi wylowic jakis blad z tej proby zapisania w MySQLu przez PDO?

0
<?
session_start();
?>

<html lang="en">
    
<meta http-equiv="refresh" content="7; url = http://BackToMain.index...">

<title>Edit Self Save</title>

<?

$UserID = $_SESSION["ID"];


// ODBIERAMY ZMIENNE
$FullName = $_POST["FullName"];
$City = $_POST["City"];
$Username = $_POST["Username"];
$Password = $_POST["Password"];
$Email = $_POST["Email"];
$Phone = $_POST["Phone"];
$Website = $_POST["Website"];

// TEST
echo "<b>UserID:</b> $UserID, <b>FullName:</b> $FullName, <b>City:</b> $City, <b>Username:</b> $Username, <b>Password:</b> $Password, <b>Email:</b> $Email, <b>Phone:</b> $Phone, <b>Website:</b> $Website<br><br>";

// TWORZYMY NOWY REKORD Z WIADOMOSCIA 
// DODAJEMY WIADOMOSC DO BAZY

// PODPINAMY SIE DO BAZY DANYCH
include("DatabaseConnect.php");

$data = [
    'id' => $UserID,
    'fullname' => $FullName,
    'city' => $City,
    'username' => $Username,
    'password' => $Password,
    'email' => $Email,
    'phone' => $Phone,
    'webiste' => $Website
];



$sql = "UPDATE Users SET FullName = :fullname, City = :city, Username = :username, Password = :password, Email = :email, Phone = :phone, Website = :website WHERE ID = :id";


    $stmt= $pdo->prepare($sql);
    $stmt->execute($data);


echo 'Dlaczego to sie nie updejtuje?';


?>

Moim zdaniem nie ma zadnego bledu, wiec czemu sie w ogole nie dopisuje?

3

Odkomnetuj to erroInfo i zobacz czy nie masz błędów.
Spróbuj to samo zapytanie wykonać z poziomu jakiegoś programu/interfejsu do obsługi baz np. PHPMyAdmin.
Nazwy kolum w przypadku MySql lepiej dawać w odwrócony cudzysłów kolumna, ale miałbyś wtedy błąd z errorInfo.
BTW może zapytanie wykonuje się poprawnie ale nie ma żadnego wiersza wyfiltrownaego przez where?

2

Odpowiadaj w postach.

co to znaczy, "moze nie ma zadnego wiersza wyfiltrowanego przez where

Że np.masz w zapytaniu where id = 123 a n nie ma takiego wiersza gdzie jest takie id. Tym samym ilość wierszy do aktualizacji jest równa zero, a zapytanie wykonało się poprawnie.

0
Jakub Prazmowski napisał(a):

> 
> // TWORZYMY NOWY REKORD Z WIADOMOSCIA 
> // DODAJEMY WIADOMOSC DO BAZY
> 
> // PODPINAMY SIE DO BAZY DANYCH
> include("DatabaseConnect.php");
> 
> 
> $sql = "UPDATE Users SET FullName = :fullname, City = :city, Username = :username, Password = :password, Email = :email, Phone = :phone, Website = :website WHERE ID = :id";
> 

> 
> Moim zdaniem nie ma zadnego bledu, wiec czemu sie w ogole nie dopisuje?

>> Uwielbiam tak czasami ugrzeznac na jakims gow... na pol dnia. Cholera jasna! :-) — Jakub Prazmowski dziś, 11:23 

Fajnie się narzeka na gówno innych autorów, ale wypadało by znać podstawy baz danych. Od kiedy UPDATE służy do dopisywania?
O dziecinadzie mi mówią te komentarze.,

PS. od kiedy samo include, nawet jeśli się wczuć w "ekosystem PHP", gwarantuje wykonanie tego, co tam się spodziewamy ? Zalezy, co poeta miał na myśli
0

@Jakub Prazmowski:
Rozumiem, że sprawdzałeś pod kątem błędów?

if (!$stmt) {
   print_r($pdo->errorInfo());
}

Druga sprawa, skróć zapytanie do pola (przykładowo) FullName, sprawdź wartość $_SESSION['ID'] i wklej to zapytanie to phpmyadmin'a i sprawdź ile rows jest "updated".

Trzecia sprawa (taka trochę uwaga), przekazujesz $data do execute, tam automatycznie wszystko traktowane jest jako PDO::PARAM_STR (wątpię, żeby ID było stringiem) :)

0

@leonpro778:

if (!$stmt) {
   print_r($pdo->errorInfo());
}

Nie wyswietla nic. Podobnie

if ($stmt) {
   echo 'Cokolwiek';
}
1

A dodaj po prepare var_dump($stmt) i zobacz co Tobie zwraca

1

No to albo masz jakiś if i tam w ogóle nie wchodzisz, albo włącz obsługę błędów.
https://www.php.net/manual/en/function.error-reporting.php

0
<title>Edit Self Save</title>

<?
session_start();

$UserID = $_SESSION["ID"];

// ODBIERAMY ZMIENNE
$FullName = $_POST["FullName"];
$City = $_POST["City"];
$Username = $_POST["Username"];
$Password = $_POST["Password"];
$Email = $_POST["Email"];
$Phone = $_POST["Phone"];
$Website = $_POST["Website"];

// TEST
echo "<b>UserID:</b> $UserID, <b>FullName:</b> $FullName, <b>City:</b> $City, <b>Username:</b> $Username, <b>Password:</b> $Password, <b>Email:</b> $Email, <b>Phone:</b> $Phone, <b>Website:</b> $Website<br><br>";

// ROBIMY UPDATE REKORDU

// BAZY DANYCH
include("DatabaseConnect.php");

$data = [
    'userid' => $UserID,
    'fullname' => $FullName,
    'city' => $City,
    'username' => $Username,
    'password' => $Password,
    'email' => $Email,
    'phone' => $Phone,
    'webiste' => $Website
];

$sql = "UPDATE Users SET FullName = :fullname, City = :city, Username = :username, Password = :password, Email = :email, Phone = :phone, Website = :website WHERE ID = :userid";

$stmt= $pdo->prepare($sql);
$stmt->execute($data);
        

// I NIC


?>
0

@Jakub Prazmowski: Czemu wklejasz to samo, co zwraca Ci var_dump($pdo) przez prepare?

1

@Jakub Prazmowski: odpowiadaj w postach. samo var_dump($pdo)

0

Nic nie zwraca. Mowilem juz kilka razy. Po nieudanym execute skrypt chyba konczy prace, co?

0

Kończy bo nic innego nie ma ale var_dump($pdo) jest PRZED prepare i powinno mimo wszystko COŚ zwrócić (nawet null'a)

0

Sluchajcie. Przeciez to jest prost jak drut. Milion razy robilem cos takiego. Zobaczcie sobie Prada.blog albo Prada.blog/GT to sa 2 oddzielne projekty... zonglerka MySQLem i formularzykami. Natrafilem na jakis trojkat bermudzki. Dane mi wcina.

0

var_dump($pdo) jest PRZED prepare zwraca: object(PDO)#1 (0) { }

0

No, to już wiesz co masz nie tak. Nie masz wcale połączenia z bazą

0

var_dump($pdo) jest PRZED prepare zwraca W KAZDYM PRZYPADKU: object(PDO)#1 (0) { }

0

Pokaż ten plik DatabaseConnect.php

0
// DATABASE CONNECT
try {
  $pdo = new PDO("mysql:host=$servername;dbname=$databasename", $username, $password);
  // set the PDO error mode to exception
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // CONNECTION TEST
    // echo "Connected successfully!<br><br>";
} catch(PDOException $e) {
  echo "Connection failed: " . $e->getMessage();
}
0

mam! webiste

1 użytkowników online, w tym zalogowanych: 0, gości: 1