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

question-closed PDO UPDATE CAŁEJ KOLUMNY

Fiszki IT
Fiszki IT
0 głosów
110 wizyt
pytanie zadane 14 maja 2020 w PHP przez spicedagger Użytkownik (530 p.)
zamknięte 19 maja 2020 przez spicedagger

Witam znowu utknąłem ;)  mam nadzieję że ktoś pomoże: poniżej zostawiam ss formularza i bazy:

Chciałbym zaktualizować bazę o wartości z formularza, do odczytu wykrzesałem fetchall(); i foreach czy da się to jakoś odwrócić. bo jakoś mi się nie widzi wkładać pojedynczo pisać wszystko Mam nadzieję że wyjaśniłem. Kod na samym dole:

<?php
session_start();
?>
<!DOCTYPE HTML>
<html lang="pl">
<head>
<link rel='stylesheet' type='text/css' href='/blog/styl2.php' />
<meta charset="utf-8"/>
<title>Jak i co i Dlaczego|BLOG KONTAKT </title>
<meta name="description" content="Blok o rozuwoi i walką z samym sobą"/>
<meta name="keywords" content="Blog,lifestyle"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="author" content "ra dy"/>
<link rel="shortcut icon" href="ikona.jpg">
<script src='https://www.google.com/recaptcha/api.js'></script>


</head>
<body>
<?php
require_once 'database.php';
$classid ="test";
 
$stmt = $db->prepare('SELECT * FROM dane where classid=:classid');
 
$stmt->bindParam(':classid', $classid, PDO::PARAM_INT);
$stmt->execute();
$wiersz = $stmt->fetchall();


						
?>



<div class="test">EDYTOR STYLI: </div>	

<table>
					<thead>
						<tr><th>Właściwość </th><th>Parametr</th></tr>
					</thead>
					<tbody>
						<?php
						foreach ($wiersz as $wiersz) {
							echo "<tr><td>{$wiersz['wlasciwosc']}</td><td><form action='' method='post'><input type='text' name='login' value='{$wiersz['parametr']}'/></td></tr>";
						}
						?>
					</tbody>
				</table>
				<?php
				echo "<br><input class='ty'  type='submit' Value='AKTUALIZUJ'></form>"
		
		?>
		


		
</div>


</body>

</html>






 

komentarz zamknięcia: "najlepsza" moja odp ;)

2 odpowiedzi

0 głosów
odpowiedź 14 maja 2020 przez eunstachy Stary wyjadacz (14,080 p.)

Mam nadzieję że wyjaśniłem.

Tak słabo wyjaśniłeś, ale domyślam się (chyba) o co chodzi. 

Do swojego forma który jest wyświetlany w pętli

echo "<tr><td>{$wiersz['wlasciwosc']}</td><td><form action='' method='post'><input type='text' name='login' value='{$wiersz['parametr']}'/></td></tr>";

Dodaj 

<input type="hidden" name="id" value="' . $wiersz['id'] . '">

Dzięki temu każdy form będzie przypisany do konkretnego ID w bazie danych. Skrypt który będzie obsługiwał ten formularz będzie wyglądał mniej więcej tak:

$stmt = $db->prepare('UPDATE dane SET wlasciwosc = :wlasciwosc, parametr = :parametr WHERE id = :id')
$stmt->bindValue(':wlasciwosc', $_POST['wlasciwosc'], PDO::PARAM_STR)
$stmt->bindValue(':parametr', $_POST['parametr'], PDO::PARAM_STR)
$stmt->bindValue(':id', $_POST['id'], PDO::PARAM_INT)

Przy okazji: 

Nie mam pojęcia jakim cudem to Ci zadziałało:

$classid ="test";
  
$stmt = $db->prepare('SELECT * FROM dane where classid=:classid');
  
$stmt->bindParam(':classid', $classid, PDO::PARAM_INT);

Skoro $classid jest stringiem to powinieneś użyć stałej PDO::PARAM_STR.

I naprawdę zalecam używania angielskich nazw (zarówno nazw zmiennych w kodzie jak i w tabelach SQL).

komentarz 14 maja 2020 przez spicedagger Użytkownik (530 p.)

 

koro $classid jest stringiem to powinieneś użyć stałej PDO::PARAM_STR.

Sam nie wiem dlaczego działało ;) zapomniałem zmienić z powrotem, jak kombinowałem

A pozatym to zrobiłem jak pisałeś i coś nie gra dalej ;( 

Notice: Undefined index: wlasciwosc in C:\XAMPP\htdocs\blog\test2.php on line 60

Notice: Undefined index: parametr in C:\XAMPP\htdocs\blog\test2.php on line 61

I wyzerowało komórki dla id 2

komentarz 15 maja 2020 przez eunstachy Stary wyjadacz (14,080 p.)

Nie działa, bo ten fragment kodu był przykładowy

$stmt->bindValue(':wlasciwosc', $_POST['wlasciwosc'], PDO::PARAM_STR)

$stmt->bindValue(':parametr', $_POST['parametr'], PDO::PARAM_STR)

Poszukaj informacji w internecie skąd biorą się zmienne $_POST i $_GET spójrz na swój formularz i spróbuj dowiedzieć się dlaczego dostajesz błąd, że zmienna $_POST['wlasciwosc'] nie jest zdefiniowana (nie istnieje).

komentarz 15 maja 2020 przez spicedagger Użytkownik (530 p.)
o fu... sory przegapiłem to z rozpędu wczoraj po nocach ;) wiem skąd $post, ale jak mam zamienić to {$wiersz['parametr']} na 2 imputy ? jak odczytać z tego pojedyncze  parametry, wiem że jak napiszę $wiersz['parametr'] to odczytam tylko dla id=1 a  id=2 i tak dalej jak odczytać?, te kolejne indexy

No chyba że się nie da i po prostu muszę użyć samo fetch  zaminast fetchall(); i pojedynczo odczytywać jakoś,
1
komentarz 15 maja 2020 przez eunstachy Stary wyjadacz (14,080 p.)

Teraz chyba rozumiem co chcesz osiągnąć. Zobacz ten kod:

<!-- POPRAWIENIE FOMRATIOWANIA TABELI -->
<form method="POST">
    <table>
        <thead>
            <tr><th>Właściwość </th><th>Parametr</th></tr>
        </thead>
        <tbody>
            <?php
            foreach ($wiersz as $wiersz) {
                // Przypisanie dla każdego inputa atrybutu name zgodnego z nazwą właściwości
                echo "<tr><td>{$wiersz['wlasciwosc']}</td><td><input type='text' name='{$wiersz['wlasciwosc']}' value='{$wiersz['parametr']}'/></td></tr>";
            }
            ?>
        </tbody>
    </table>

    <input class='ty'  type='submit' Value='AKTUALIZUJ'>
</form>

<?php

    /**
     * Skrypt obsługujący formularz.
     */

    // To możesz pobrać z bazy np SELECT wlasciwosc FROM dane where classid = test
    $attributes = [
        'background',
        'width'
    ];

    // Zbudowanie zapytania SQL.
    $sql = "UPDATE dane SET ";

    // Pętla po wszystkich właściwościach i sprawdzenie czy zmienna $_POST[] istnieje. 
    // Jeśli tak, to dodanie do zapytania sql.
    foreach ($attributes as $index => $attribute) {
        if (isset($_POST[$attribute])) {
            $sql .= $attribute . ' = ' . $_POST[$attribute];

            // Jeśli nie jest to ostatni element w tablicy to należy dodać przecinek
            // dzięki temu zapytanie będzie wyglądało mniejwięcej tak
            // UPDATE dane SET background = green, width = 100%
            if ($index < count($attributes)) {
                $sql .= ', ';
            }
        }
    }

    // Dodanie reszty zapytania SQL.
    $sql .= 'WHERE classid = test';

    // Wykonanie SQL.

?>

 

komentarz 17 maja 2020 przez spicedagger Użytkownik (530 p.)
Nic się nie dzieje po wprowadzeniu modyfikacji, żadnego komunikatu nie ma nic się nie dzieje ;(
komentarz 19 maja 2020 przez spicedagger Użytkownik (530 p.)
edycja 19 maja 2020 przez spicedagger

Dobra mam rozwiązanie smiley

0 głosów
odpowiedź 19 maja 2020 przez spicedagger Użytkownik (530 p.)

W końcu się udało rozwiązałem to jak chciałem, zostawiam rozwiązanie poniżej.

dzięki za  pomoc, choć ostatecznie sam ogarnąłem.

<?php
session_start();
?>
<!DOCTYPE HTML>
<html lang="pl">
<head>
<link rel='stylesheet' type='text/css' href='/blog/styl2.php' />
<meta charset="utf-8"/>
<title>Jak i co i Dlaczego|BLOG KONTAKT </title>
<meta name="description" content="Blok o rozuwoi i walką z samym sobą"/>
<meta name="keywords" content="Blog,lifestyle"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="author" content "ra dy"/>
<link rel="shortcut icon" href="ikona.jpg">
<script src='https://www.google.com/recaptcha/api.js'></script>


</head>
<body>
<div class="test">


EDYTOR STYLI: </div>
<?php

require_once 'database.php';
$classid ="test";

$tmt = $db->prepare('SELECT * FROM dane WHERE classid=:classid');
$tmt->bindValue(':classid', $classid, PDO::PARAM_STR);
$tmt->execute();
$wier = $tmt->fetch();

$g=$tmt->rowCount();
 $c=0;
 
for($d=1; $d<=$g;$d++)
{
	
$stmt = $db->prepare('SELECT * FROM dane where classid=:classid and id=:d');

$stmt->bindValue(':classid', $classid, PDO::PARAM_STR);
$stmt->bindValue(':d',$d, PDO::PARAM_INT);

$stmt->execute();

$wiersz = $stmt->fetch();

$e[$c]=$wiersz['parametr'];
$p[$c]=$wiersz['wlasciwosc'];
$c++;

}

echo "<div class='testa'><table><tbody>";
echo "<form  method='POST'>";
for($h=0;$h<$c; $h++)
	
{
echo "<tr><td>".$p[$h]."</td><td>"."<input type='text'   name='$e[$h]' value='$e[$h]'/>"."</td></td>";
}
echo "</tbody></table> <br> <center><input class='ty'  type='submit' Value='AKTUALIZUJ'><center></form> </div>";
?>
  <br>
 <?php

 for($h=0; $h<$c; $h++){
if(isset($_POST[$e[0]])){
  $g=$p[$h];
  $d=$_POST[$e[$h]];

$stmt = $db->prepare('UPDATE dane set parametr=:d where classid=:classid and wlasciwosc=:g');
$stmt->bindValue(':d',$d,PDO::PARAM_STR);
$stmt->bindValue(':classid',$classid,PDO::PARAM_STR);
$stmt->bindValue(':g',$g,PDO::PARAM_STR);
$stmt->execute();
}	
 }
?>
  
</div>


</body>

</html>






 

Podobne pytania

0 głosów
1 odpowiedź 71 wizyt
pytanie zadane 31 stycznia 2020 w SQL, bazy danych przez bwl Obywatel (1,470 p.)
0 głosów
3 odpowiedzi 119 wizyt
pytanie zadane 29 stycznia 2017 w PHP przez Alterwar Dyskutant (7,650 p.)
0 głosów
1 odpowiedź 206 wizyt
pytanie zadane 4 maja 2015 w PHP przez makoso Mądrala (7,380 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

84,762 zapytań

133,562 odpowiedzi

296,001 komentarzy

56,018 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...