Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ Wyświetlenie ID

Napisany przez: xGlenor 23.07.2019, 20:40:49

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. http://www.php.net/echo $status['opcja'];
  7.  
  8. }


form.php

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


Oraz db.php
  1. // EDYTOWANIE USTAWIEŃ
  2. if (http://www.php.net/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. http://www.php.net/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' ");

Napisany przez: kreatiff 23.07.2019, 21:48:20

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.

Napisany przez: xGlenor 23.07.2019, 22: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() :/

Napisany przez: leonpro778 24.07.2019, 08:56:32

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. http://www.php.net/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 http://www.php.net/echo $ustawienia['opcja']; ?>" name="opcja">
  8. <input type="hidden" name="id" value="<?php http://www.php.net/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

Napisany przez: dublinka 24.07.2019, 11:41:00

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



update

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

Napisany przez: xGlenor 24.07.2019, 12:48:39

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)