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

php i dwa form-y

Object Storage Arubacloud
+1 głos
226 wizyt
pytanie zadane 4 czerwca 2018 w PHP przez rafana Użytkownik (950 p.)

Witam.

Mam pytanie dotyczące dwóch <form> z których przekazuję dane i chciałbym aby w trakcie edycje tych <form> gdzie dane zapisują się do MySql pozostawiały na ekranie.

Mniej więcej jak na tym scrinie :

1. klikam na pokaz id

a) pokazuje mi sie druga lista

2. zmieniam dane, klikam edytuj

3. odświeża mi się strona i pozostaje tylko górna lista. 

Probowałem z $_SESSION aby pamiętał ale nie pomaga. Proszę o wskazówki jak się powinno prawidłowo okodować takie dwa formy.

Poniżej mój kod, zapisałem go tu w jednym pliku ale normalnie robie przez include odnoszenie się do poszczególnych osobnych plików.

Sama idea tego projektu jest nie spójna bo mam np. w dwóch miejscach możliwość edycji pozycji czy możliwość skasowania, ale to tylko po to aby pokazać o co mi chodzi :) Dziękuję za pomoc.

<form action="#" method="POST">
    Podaj imię: <input type="text" name="imie">
    Podaj maila: <input type="email" name="email">
    <input type="submit" name="przekaz" value="dodaj">
</form>

<?php
session_start();
require_once 'db.php';
# ----------dodaje do bazy :

if (isset($_POST['przekaz']) && !empty($_POST['imie']) && !empty($_POST['email']) ) {
    $dodaj = $db -> prepare ("INSERT INTO test VALUES (NULL, :imie, :email)");
    $dodaj -> bindValue (':imie',$_POST['imie'],PDO::PARAM_STR);
    $dodaj -> bindValue (':email',$_POST['email'],PDO::PARAM_STR);
    $dodaj -> execute();

} else {
    echo ("nic nie podałeś...");
}
?>

#-----------pokazuje pierwszą listę
<?php
    $odczyt = $db -> query ("SELECT * FROM test");
    $odczytLista = $odczyt -> fetchAll();
?>
    <table border="1">
        <thead>
            <tr>
                <th>ID</th>
                <th>IMIE</th>
                <th>MAIL</th>
                <th>EDYCJA</th>
            </tr>
        </thead>
<?php    
    foreach ($odczytLista as $wynik) {
        echo "<form action='#' method='POST'>";
        echo "<tbody>
            <tr>
                 <td>".$wynik["id"]."</td>
                 <td><input type='text' name='imie' value=".$wynik["imie"]."></td>
                 <td><input type='text' name='email' value=".$wynik["email"]."></td>
                 <td>
                    <input type='hidden' name='id' value='".$wynik["id"]."'>
                    <input type='submit' name='kasuj' value='skasuj'>
                    <input type='submit' name='edycja' value='edytuj'>
                    <input type='submit' name='idp' value='pokaz id'>
                </td>
             </tr>
         </tbody>";
        echo "</form>";        
    }
?>
    </table>

        
#----------spr co wybrałem z inputa:
<?php
if (isset($_POST['kasuj']) ) {
    $skasuj = $db -> prepare ("DELETE FROM test WHERE id=:id");
    $skasuj -> bindValue ('id',$_POST["id"]);
    $skasuj -> execute();
//    header ('refresh: 0;');
}

if (isset($_POST['edycja']) ) {
    $edycja = $db -> prepare ("UPDATE test SET imie=:imie, email=:email WHERE id=:id");
    $edycja -> bindValue ('id',$_POST["id"]);
    $edycja -> bindValue ('imie',$_POST["imie"],PDO::PARAM_STR);
    $edycja -> bindValue ('email',$_POST["email"],PDO::PARAM_STR);
    $edycja -> execute();
//    header ('refresh: 0;');
}
#----------pokazuje druga liste:
if (isset($_POST['idp']) ) {

$odczyt = $db -> query ("SELECT * FROM test WHERE id=$_POST[id]");
$odczytLista = $odczyt -> fetchAll();
?>  
    <table border="1">
        <thead>
            <tr>
                <th>ID</th>
                <th>IMIE</th>
                <th>MAIL</th>
                <th>EDYTUJ</th>
            </tr>
        </thead>
<?php    
    foreach ($odczytLista as $wynik) {
        echo "<form action='#' method='POST'>";
        echo "<tbody>
            <tr>
                <td>".$wynik["id"]."</td>
                <td><input type='text' name='imie' value=".$wynik["imie"]."></td>
                <td><input type='text' name='email' value=".$wynik["email"]."></td>
                <td>
                    <input type='hidden' name='id' value='".$wynik["id"]."'>
                    <input type='submit' name='kasuj' value='skasuj'>
                    <input type='submit' name='edycja' value='edytuj'>
                </td>
             </tr>
         </tbody>";
        echo "</form>";
    }
?>
    </table>
<?php
}

 

2 odpowiedzi

0 głosów
odpowiedź 5 czerwca 2018 przez Chess Szeryf (76,710 p.)
wybrane 5 czerwca 2018 przez rafana
 
Najlepsza
td{
	background:green;
}
<body style="background:grey">

<form action="#" method="POST">
	<input type="text" name="name_person"/>
	<input type="text" name="email" />
	<input type="submit" name="submit" />
</form>
<?php

session_start();

// Here some try ... catch, etc..

$db = new PDO('mysql:host=localhost;dbname=rafana', 'root', '');

if(isset($_POST['submit']) && !empty($_POST['name_person']) && !empty($_POST['email'])) {
    $add =$db->prepare("INSERT INTO tbl1 VALUES (NULL, :name, :email_web);");
    $add->bindValue(':name',$_POST['name_person'],PDO::PARAM_STR);
    $add->bindValue(':email_web',$_POST['email'],PDO::PARAM_STR);
    $add->execute();
}else {
    echo ("Lack Data");
}


$qu = $db->query('SELECT * FROM tbl1;');

if($qu!==false) {
	
	echo '<table><tbody>';
	
	while($tmp = $qu->fetch(PDO::FETCH_NUM)) { 
		echo '<tr>'.
				'<td>'.$tmp[0].'</td><td>'.$tmp[1].'</td><td>'.$tmp[2].'</td>'.
				'<td>'.
				'<form method="post" action="">'.
					'<input type="submit" value="display id" name="display_id"/>'.
					"<input type='hidden' name='display_id' value=\"{$tmp[0]}\"/>".
				"</form>".
				'</td>'.
			 "</tr>";
	}
	
	echo '</tbody></table>';
	
}


if(isset($_POST['display_id'])) {
	
	$display_id = $db->query('SELECT * FROM tbl1 WHERE id='.$_POST['display_id'].';');
	
	foreach($display = $display_id->fetchAll(PDO::FETCH_NUM) as $show) {
		
		$_SESSION['remember'] = 
		
		'<form method="post" action="">'.
			'<tr>'.
				'<td>'.$show[0].'</td>'."<input type='hidden' value=\"{$show[0]}\" name='edit[]'/>".
				'<td>'."<input name='first' type='text' value=\"{$show[1]}\"/>".'</td>'.
				'<td>'."<input name='second' type='text' value=\"{$show[2]}\"/>".'</td>'.
				'<td>'.'<input type="submit" value="remove" name="remove"/>'.'</td>'.
				'<td>'.'<input type="submit" value="edit" name="edit[editting]"/>'.'</td>'.
				'<td>'.'<input type="submit" value="cancel" name="cancel"/>'.'</td>'.
			'</tr>'.
		'</form>';

	}
	
}
 

if(isset($_SESSION['remember'])) {
	
	echo '<table>'.
			'<tbody>'.
				$_SESSION['remember'].
			'</tbody>'.
		 '</table>';
		 
}


if(isset($_POST['remove'])) {

	unset($_SESSION['remember']);
	$remove_record=$db->prepare("DELETE FROM tbl1 WHERE id=:id_del;");
    $remove_record->bindValue(':id_del',(int)$_POST['edit'][0],PDO::PARAM_INT);
    $remove_record->execute();
	header('refresh:0');
	
}


if(isset($_POST['edit']['editting'])) {
	
	unset($_SESSION['remember']);
	$save_change=$db->prepare("UPDATE tbl1 SET name=:name_tbl,email=:email_tbl where id=:id_tbl;");
    $save_change->bindValue(':name_tbl',$_POST['first'],PDO::PARAM_STR);
    $save_change->bindValue(':email_tbl',$_POST['second'],PDO::PARAM_STR);
    $save_change->bindValue(':id_tbl',(int)$_POST['edit'][0],PDO::PARAM_INT);
    $save_change->execute();
	header('refresh:0');
	
}


if(isset($_POST['cancel'])) { 

	unset($_SESSION['remember']);
	header('refresh:0');
	
}
 
?>
</body>

Do zniszczenia wszystkich zmiennych sesyjnych można użyć session_destroy();.

Możesz dodać taką opcję tzw. undo (cofanie), np. ostatni 1 record zmieniony, czy tam dziesięć, czy ile chcesz, a może nawet wszystkie od/do ostatniej sesji. Jeśli chcesz to dopracuj ten skrypt, dodaj jakieś opcje, np. czy na pewno usunąć record. Resztę zmian pozostawiam Tobie. Opakuj to w funkcje itp., jeśli chcesz.

komentarz 5 czerwca 2018 przez rafana Użytkownik (950 p.)
edycja 5 czerwca 2018 przez rafana
Dziękuje za Twój kod, dużo rzeczy z niego wyniosłem, po usunięciu unset $_SESSION['remember'] z if(isset($_POST['edit']['editting'])) { działa jak chciałem. Nie odświeża mi się przez to teraz input name='first' oraz "second".
+1 głos
odpowiedź 4 czerwca 2018 przez Artek Stary wyjadacz (11,800 p.)
Jak nie chcesz ponownie przeładowywać całej strony to AJAX. W przeciwnywm wypadku po prostu wstaw dane do tabeli i pobierz najbowsze i wyświetl.

Podobne pytania

0 głosów
1 odpowiedź 586 wizyt
pytanie zadane 6 sierpnia 2018 w PHP przez rafana Użytkownik (950 p.)
0 głosów
1 odpowiedź 178 wizyt
0 głosów
1 odpowiedź 579 wizyt

92,556 zapytań

141,404 odpowiedzi

319,561 komentarzy

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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...