• 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

VPS Starter Arubacloud
0 głosów
348 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,140 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,140 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,140 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ź 155 wizyt
pytanie zadane 31 stycznia 2020 w SQL, bazy danych przez bwl Obywatel (1,530 p.)
0 głosów
3 odpowiedzi 320 wizyt
pytanie zadane 29 stycznia 2017 w PHP przez Alterwar Dyskutant (7,650 p.)
+1 głos
3 odpowiedzi 399 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...