Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyświetlenie ID
xGlenor
post 23.07.2019, 20:40:49
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 16.07.2019

Ostrzeżenie: (0%)
-----


Witam Posiadam o taki skrypt php
functions.php
  1. function ustawienia($nazwa){
  2. $conn = connect();
  3. $sql = "SELECT * FROM ustawienia WHERE nazwa='$nazwa'";
  4. $result = mysqli_query($conn, $sql);
  5. $status = mysqli_fetch_assoc($result);
  6. echo $status['opcja'];
  7.  
  8. }


form.php

  1. <form ="glowne/db.php" method="post">
  2. <div class="input-group mb-3">
  3. <div class="input-group-prepend">
  4. <span class="input-group-text">Adres Strony</span>
  5. </div>
  6. <input type="text" class="form-control" value=" php ustawienia('adres_strony') " name="opcja">
  7. <div class="input-group-append">
  8. <button class="btn btn-primary" type="submit" name="edytujustawienia">Zmień</button>
  9. </div>
  10. </div>
  11. </form>


Oraz db.php
  1. // EDYTOWANIE USTAWIEŃ
  2. if (isset($_POST['edytujustawienia'])) {
  3. $opcja = $_POST['opcja'];
  4.  
  5. mysqli_query($conn, "UPDATE ustawienia SET opcja='$opcja'");
  6. $_SESSION['ust'] = "Pomyślnie Edytowano menu!";
  7. header('location: ustawienia.php');
  8. }


I teraz moje pytanie brzmi, jak z formularza pobrać jeszcze id? aby do updatetowania dodać mysqli_query($conn, "UPDATE ustawienia SET opcja='$opcja' WHERE id='$id' ");

Ten post edytował xGlenor 23.07.2019, 20:43:18
Go to the top of the page
+Quote Post
kreatiff
post 23.07.2019, 21:48:20
Post #2





Grupa: Zarejestrowani
Postów: 274
Pomógł: 88
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


Jaki $id? Gdzie on jest?
Możesz stworzyć inputa w formularzu z tym id, by też go wysłało przy wciśnięciu submit.

I bardzo ważna sprawa: nie wolno w taki sposób zapisywać wartości z $_POST (z $_GET z resztą też) od razu do bazy. Trzeba te dane zwalidować, czy mają taki format jak zakładamy, że powinny mieć i nie zawierają złośliwych danych.
Go to the top of the page
+Quote Post
xGlenor
post 23.07.2019, 22:16:09
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 16.07.2019

Ostrzeżenie: (0%)
-----


Dałbyś jakiś przykład jak takie dane mogę zwalidować?
Co do id własnie chciałem je zrobić ale nie wiem jak :/
Skrypt ten ogólnie działa tak że funkcja ustawienia($name) wyciąga z bazy danych informacje która jest zdefiniowana jako zmienna "name", teraz to informacja jest wyświetlana jako Value="DANA INFORMACJA" w 6 linijce pliku form.php
i chciałbym tam jeszcze zrobić kolejny input który będzie 'hidden' i będzie on zawierał $id ale nie wiem jak wyciągnać to id z funkcji ustawienia() :/
Go to the top of the page
+Quote Post
leonpro778
post 24.07.2019, 08:56:32
Post #4





Grupa: Zarejestrowani
Postów: 145
Pomógł: 19
Dołączył: 1.03.2012

Ostrzeżenie: (0%)
-----


Cytat(xGlenor @ 23.07.2019, 23:16:09 ) *
Dałbyś jakiś przykład jak takie dane mogę zwalidować?
Co do id własnie chciałem je zrobić ale nie wiem jak :/
Skrypt ten ogólnie działa tak że funkcja ustawienia($name) wyciąga z bazy danych informacje która jest zdefiniowana jako zmienna "name", teraz to informacja jest wyświetlana jako Value="DANA INFORMACJA" w 6 linijce pliku form.php
i chciałbym tam jeszcze zrobić kolejny input który będzie 'hidden' i będzie on zawierał $id ale nie wiem jak wyciągnać to id z funkcji ustawienia() :/


Z tego co widzę to z bazy wyszukujesz "ustawienia" po polu "nazwa". Nie jest to bezpieczne przez właśnie brak walidacji. To po pierwsze. Druga sprawa, w funkcji functions.php:

zamiast
  1. echo $status['opcja'];


daj:
  1. return $status;


Plik form.php zmodyfikuj:
  1. <form ="glowne/db.php" method="post">
  2. <?php $ustawienia = ustawienia('adres_strony'); ?>
  3. <div class="input-group mb-3">
  4. <div class="input-group-prepend">
  5. <span class="input-group-text">Adres Strony</span>
  6. </div>
  7. <input type="text" class="form-control" value="<?php echo $ustawienia['opcja']; ?>" name="opcja">
  8. <input type="hidden" name="id" value="<?php echo $ustawienia['id']; ?>" /> <!-- to jest dodana linijka z ukrytym id -->
  9. <div class="input-group-append">
  10. <button class="btn btn-primary" type="submit" name="edytujustawienia">Zmień</button>
  11. </div>
  12. </div>
  13. </form>


I poczytaj o https://www.php.net/manual/en/mysqli-stmt.bind-param.php

Ten post edytował leonpro778 24.07.2019, 08:57:39
Go to the top of the page
+Quote Post
dublinka
post 24.07.2019, 11:41:00
Post #5





Grupa: Zarejestrowani
Postów: 204
Pomógł: 25
Dołączył: 22.02.2008

Ostrzeżenie: (0%)
-----


Przyklad ustawienia tabeli:

  1. $sql = "CREATE TABLE nazwatabeli" . "(
  2. id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  3. pole1 VARCHAR(30) COLLATE utf8_unicode_ci NOT NULL,
  4. pole2 VARCHAR(30) COLLATE utf8_unicode_ci NOT NULL
  5. )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";


db.php

  1. <?php
  2. const SERVER_NAME = 'localhost';
  3. const SERVER_USERNAME = 'root';
  4. const SERVER_USERNAME_PASSWORD = 'pass';
  5. const SERVER_DATABASE_NAME = 'nazwabazy';
  6. const SERVER_TABLE_NAME = 'nazwatabeli';
  7. ?>


formularz.php


  1. <?php
  2. include_once 'db.php';
  3.  
  4. function PokazForm($server, $username, $password, $database, $table, $name)
  5. {
  6.  
  7. $mysqli = new mysqli($server, $username, $password, $database);
  8.  
  9. if ($mysqli->connect_error)
  10. {
  11. return ("Błąd połączenia z MySQL: " . $mysqli->connect_error);
  12. }
  13.  
  14. $sql = "SELECT `id`, `pole1`, `pole2` FROM $table WHERE pole1='$name'";
  15.  
  16. $result = $mysqli->query($sql);
  17.  
  18.  
  19. if ($result->num_rows > 0)
  20. {
  21.  
  22. echo "<form method=post action=\"index.php\">";
  23.  
  24.  
  25. while($row = $result->fetch_assoc())
  26. {
  27.  
  28. echo "<input type=\"hidden\" value=\"" . $row['id'] . "\" name=\"id\">";
  29. echo "<input name=\"pole1\" value=\"" . $row['pole1'] . "\"><br>";
  30. echo "<input name=\"pole2\" value=\"" . $row['pole2'] . "\"><p>";
  31.  
  32. }
  33.  
  34. echo "<input type=\"submit\" value=\"dalej\"></form>";
  35.  
  36.  
  37.  
  38. } else
  39. {
  40.  
  41. print "Znaleziono: 0 wpisów";
  42.  
  43. }
  44.  
  45. $mysqli->close();
  46.  
  47.  
  48.  
  49.  
  50. }
  51.  
  52.  
  53. PokazForm(SERVER_NAME, SERVER_USERNAME, SERVER_USERNAME_PASSWORD, SERVER_DATABASE_NAME, SERVER_TABLE_NAME, 'tresc pola 1'); // 'tresc pola 1' jest to string ktory bedzie porownywany z wartoscia z tabeli w zapytaniu WHERE
  54.  
  55. ?>



index.php // update

  1. <?php
  2. include_once 'db.php';
  3.  
  4. function update($server, $username, $pass, $dbname, $tablename, $pole1, $pole2, $id)
  5. {
  6.  
  7. $mysqli = new mysqli($server, $username, $pass, $dbname);
  8.  
  9. if ($mysqli->connect_error)
  10. {
  11. return ("Błąd połączenia: " . $mysqli->connect_error);
  12. }
  13.  
  14. $pole1 = $mysqli->real_escape_string($pole1);
  15. $pole2 = $mysqli->real_escape_string($pole2);
  16. $id = $mysqli->real_escape_string($id);
  17. $id = (int)$id;
  18.  
  19. if ($stmt = $mysqli->prepare("UPDATE $tablename SET pole1 = ?, pole2 = ? WHERE id = ?"))
  20. {
  21. $stmt->bind_param('ssi', $pole1, $pole2, $id);
  22.  
  23. $stmt->execute();
  24. $stmt->close();
  25. $mysqli->close();
  26.  
  27. exit('zaktualizowano');
  28. }
  29.  
  30. else {
  31.  
  32.  
  33. exit('blad aktualizacji');
  34.  
  35.  
  36. }
  37.  
  38. }
  39.  
  40. update(SERVER_NAME, SERVER_USERNAME, SERVER_USERNAME_PASSWORD, SERVER_DATABASE_NAME, SERVER_TABLE_NAME, $_POST['pole1'], $_POST['pole2'], $_POST['id']);
  41.  
  42. ?>


Nalezaloby to wszystko zrobic na jednej sesji ktora trzebaby sprawdzic przed samą aktualizacja; jesli istnieje to przekierowac do pliku z formularzem i na samym jego poczatku usunac ja. Sama sesje ustawic tuz przed wyswietleniem informacji o zaktualizowaniu.
To ochroni przed dodawaniem danych przy odswierzeniu strony.

czyli:

  1. <?php
  2.  
  3. include_once 'db.php';
  4.  
  5. function PokazForm($server, $username, $password, $database, $table, $name)
  6. {
  7.  
  8. if(isset($_SESSION['odswierzenie']))
  9. {
  10.  
  11. unset($_SESSION['odswierzenie']);
  12.  
  13. }
  14.  
  15. $mysqli = new mysqli($server, $username, $password, $database);
  16.  
  17. if ($mysqli->connect_error)
  18. {
  19. return ("Błąd połączenia z MySQL: " . $mysqli->connect_error);
  20. }
  21.  
  22. $sql = "SELECT `id`, `pole1`, `pole2` FROM $table WHERE pole1='$name'";
  23.  
  24. $result = $mysqli->query($sql);
  25.  
  26.  
  27. if ($result->num_rows > 0)
  28. {
  29.  
  30. echo "<form method=post action=\"index.php\">";
  31.  
  32.  
  33. while($row = $result->fetch_assoc())
  34. {
  35.  
  36. echo "<input type=\"hidden\" value=\"" . $row['id'] . "\" name=\"id\">";
  37. echo "<input name=\"pole1\" value=\"" . $row['pole1'] . "\"><br>";
  38. echo "<input name=\"pole2\" value=\"" . $row['pole2'] . "\"><p>";
  39.  
  40. }
  41.  
  42. echo "<input type=\"submit\" value=\"dalej\"></form>";
  43.  
  44.  
  45.  
  46. } else
  47. {
  48.  
  49. print "Znaleziono: 0 wpisów";
  50.  
  51. }
  52.  
  53. $mysqli->close();
  54.  
  55.  
  56.  
  57.  
  58. }
  59.  
  60.  
  61. PokazForm(SERVER_NAME, SERVER_USERNAME, SERVER_USERNAME_PASSWORD, SERVER_DATABASE_NAME, SERVER_TABLE_NAME, 'tresc pola 1');
  62.  
  63. ?>



update

  1. <?php
  2. include_once 'db.php';
  3.  
  4. function update($server, $username, $pass, $dbname, $tablename, $pole1, $pole2, $id)
  5. {
  6.  
  7. if(isset($_SESSION['odswierzenie']))
  8. {
  9.  
  10. header('location: form.php');
  11.  
  12. }
  13.  
  14. $mysqli = new mysqli($server, $username, $pass, $dbname);
  15.  
  16. if ($mysqli->connect_error)
  17. {
  18. return ("Błąd połączenia: " . $mysqli->connect_error);
  19. }
  20.  
  21. $pole1 = $mysqli->real_escape_string($pole1);
  22. $pole2 = $mysqli->real_escape_string($pole2);
  23. $id = $mysqli->real_escape_string($id);
  24. $id = (int)$id;
  25.  
  26. if ($stmt = $mysqli->prepare("UPDATE $tablename SET pole1 = ?, pole2 = ? WHERE id = ?"))
  27. {
  28. $stmt->bind_param('ssi', $pole1, $pole2, $id);
  29.  
  30. $stmt->execute();
  31. $stmt->close();
  32. $mysqli->close();
  33.  
  34. $_SESSION['odswierzenie'] = '1';
  35.  
  36. exit('zaktualizowano');
  37. }
  38.  
  39. else {
  40.  
  41.  
  42. exit('blad aktualizacji');
  43.  
  44.  
  45. }
  46.  
  47. }
  48.  
  49. update(SERVER_NAME, SERVER_USERNAME, SERVER_USERNAME_PASSWORD, SERVER_DATABASE_NAME, SERVER_TABLE_NAME, $_POST['pole1'], $_POST['pole2'], $_POST['id']);
  50.  
  51. ?>
Go to the top of the page
+Quote Post
xGlenor
post 24.07.2019, 12:48:39
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 16.07.2019

Ostrzeżenie: (0%)
-----


Woow, dziękuje wam bardzo, czeka mnie jeszcze długa droga do tego żeby to zrozumieć, taki przedszkolak ze mnie w tym temacie, ale wklejając działa wszystko tongue.gif <3 <3 Jeszcze raz dziękuje biggrin.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.08.2019 - 04:39