• 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

Cloud VPS
0 głosów
618 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,180 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,180 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,180 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ź 227 wizyt
pytanie zadane 31 stycznia 2020 w SQL, bazy danych przez bwl Obywatel (1,530 p.)
0 głosów
3 odpowiedzi 687 wizyt
pytanie zadane 29 stycznia 2017 w PHP przez Alterwar Dyskutant (7,650 p.)
+1 głos
3 odpowiedzi 1,060 wizyt

93,482 zapytań

142,414 odpowiedzi

322,761 komentarzy

62,894 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

Kursy INF.02 i INF.03
...