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

Dwie metody POST w jednym pliku

Object Storage Arubacloud
+1 głos
214 wizyt
pytanie zadane 17 czerwca 2021 w PHP przez Hubert731 Obywatel (1,650 p.)
Czy jest taka możliwość aby w jednym pliku były dwa formularze, które nie przesyłałby danych do innego pliku, lecz wszystko działo się w tym samym pliku (bez "action='sciezka' '') za pomoca "if($_SERVER['REQUEST_METHOD']=="POST") "

Problem polega na tym, że po naciesnieciu przycisku, wsykakuje błąd, iż zmienne z drugiego formularza nie istnieją.
komentarz 17 czerwca 2021 przez SzkolnyAdmin Szeryf (86,360 p.)
Da się. Daj swój kod.

2 odpowiedzi

0 głosów
odpowiedź 17 czerwca 2021 przez CubeStorm Pasjonat (15,020 p.)
wybrane 17 czerwca 2021 przez Hubert731
 
Najlepsza

Więc z pomocą odpowiedniego if'a napisz kod, który na początku strony sprawdzi:

Jeżeli zmienna XXXX istnieje wykonaj kod X, jeżeli nie to wykonaj kod Y.

komentarz 17 czerwca 2021 przez Hubert731 Obywatel (1,650 p.)
ehhh, no tak, nic prostszego, dziękuję, tylko że jest mały problem, iż kiedy ktoś wypełni oba formularze, to wykonają się oba przypadki, no ale trudno :D
komentarz 17 czerwca 2021 przez Hubert731 Obywatel (1,650 p.)

Poza tym, srednio to działa, ponieważ ksiazka dodaje sie dopiero po odswiezeniu, lub po ponownym kliknieciu

<?php
session_start();
	if(!isset($_SESSION['logowanie']) || $_SESSION['logowanie']==false) header('LOCATION: index.php');
	else if($_SESSION['login']!="login") header('LOCATION: konto.php');
?>

<body>
<?php 
	$server="localhost";
	$user="root";
	$password="";
	$database="cwiczenie";
	$polaczenie = @new mysqli($server, $user, $password, $database);
	if($polaczenie->connect_errno==1){
		echo "Error: ".$polaczenie->connect_erno;
	}
	else{
		$sql2 ="SELECT* from ksiazki";
		if($rezultat2= @$polaczenie->query($sql2)){
					$dostepneksiazki=$rezultat2->num_rows;
					if($dostepneksiazki>0){
						$_SESSION['dostepneksiazki']="<br />";
						while($wiersz2 = $rezultat2->fetch_assoc()) {
								$_SESSION['dostepneksiazki'] ='<span style="color:#0000BB">'.$_SESSION['dostepneksiazki'].$wiersz2['autor']." ".'"'.$wiersz2['tytul'].'"'.'</span><br />';
						}
							$rezultat2->close();
					}
						else{
								$_SESSION['dostepneksiazki']='<span style="color:red">Brak dostępnych książek</span>';
							}
				}
	}
	echo '<h2>Witaj '.$_SESSION['imie'].' '.$_SESSION['nazwisko'].' (konto Administratora)</h2>  ';

	 if(isset($_SESSION['dostepneksiazki']))  echo "Dostępne ksiazki:  ".$_SESSION['dostepneksiazki'];
?>
<br /> <br />
<form method="post">
	Książka która chcesz dodac do biblioteki: 
	<br /><br />
	autor
	<input required type="text" name="autor">
	tytul
	<input required type="text" name="tytul">
	<input type="submit" value="Dodaj">
<?php
	if(isset($_SESSION['dodanieksiazki'])){
		echo $_SESSION['dodanieksiazki'];
		unset($_SESSION['dodanieksiazki']);
}
?>
	<br /> <br />
</form>
<form method="post">
	Ksiazke ktora chcesz usunąć z biblioteki:
	<br /><br />
	autor
	<input required type="text" name="autor2">
	tytul
	<input required type="text" name="tytul2">
	<input required type="submit" value="Usuń">
<?php
	if($_SERVER['REQUEST_METHOD']=="POST"){
		$server="localhost";
		$user="root";
		$password="";
		$database="cwiczenie";
		$polaczenie = @new mysqli($server, $user, $password, $database);
		if($polaczenie->connect_errno!=1){
			if(isset($_POST['tytul'])AND isset($_POST['autor'])){
				$_SESSION['autor']=$_POST['autor'];
				$autor=$_POST['autor'];
				$_SESSION['tytul']=$_POST['tytul'];
				$tytul=$_POST['tytul'];
				$sql = "INSERT INTO `ksiazki` (`ID_ksiazki`, `tytul`, `autor`, `ID_user`) VALUES (NULL, '$tytul', '$autor', '0')";
				$sql3 = "SELECT * from `ksiazki` WHERE tytul='$tytul' AND autor='$autor'";
				if($rezultat=@$polaczenie->query($sql3)){
					$ksiazki=$rezultat->num_rows;
					if($ksiazki>0){
						$_SESSION['dodanieksiazki']='<span style="color:red">'."W naszej bibliotece znajduje się już taka książka".'</span>';
					}
					else{
						if($polaczenie->query($sql)==true){
							$_SESSION['dodanieksiazki']="Dodano książke pomyślnie!";
						}
					}
				}
			}	
		else echo "Error ".$polaczenie->connect_errno;
		}
	}
?>
</form>
	
<form action="wylogowanie.php" method="post">
	<input type="submit" value="wyloguj się">
</form>
</body>

 

komentarz 17 czerwca 2021 przez VBService Ekspert (252,660 p.)

tylko że jest mały problem, iż kiedy ktoś wypełni oba formularze, to wykonają się oba przypadki


@Hubert Wajda, jak masz osobne submit-y (button-y) dla każdego z osobna formularza to nie da się wysłać dwóch na raz w tym przypadku.

komentarz 17 czerwca 2021 przez Hubert731 Obywatel (1,650 p.)

Warning: Undefined array key "autor2" in C:\xampp\htdocs\hubert\kontoadmin.php on line 70

No ale wyskakuje mi taki błąd

<?php
session_start();
	if(!isset($_SESSION['logowanie']) || $_SESSION['logowanie']==false) header('LOCATION: index.php');
	else if($_SESSION['login']!="login") header('LOCATION: konto.php');
?>

<body>
<?php 
	$server="localhost";
	$user="root";
	$password="";
	$database="cwiczenie";
	$polaczenie = @new mysqli($server, $user, $password, $database);
	if($polaczenie->connect_errno==1){
		echo "Error: ".$polaczenie->connect_erno;
	}
	else{
		$sql2 ="SELECT* from ksiazki";
		if($rezultat2= @$polaczenie->query($sql2)){
					$dostepneksiazki=$rezultat2->num_rows;
					if($dostepneksiazki>0){
						$_SESSION['dostepneksiazki']="<br />";
						while($wiersz2 = $rezultat2->fetch_assoc()) {
								$_SESSION['dostepneksiazki'] ='<span style="color:#0000BB">'.$_SESSION['dostepneksiazki'].$wiersz2['autor']." ".'"'.$wiersz2['tytul'].'"'.'</span><br />';
						}
							$rezultat2->close();
					}
						else{
								$_SESSION['dostepneksiazki']='<span style="color:red">Brak dostępnych książek</span>';
							}
				}
	}
	echo '<h2>Witaj '.$_SESSION['imie'].' '.$_SESSION['nazwisko'].' (konto Administratora)</h2>  ';

	 if(isset($_SESSION['dostepneksiazki']))  echo "Dostępne ksiazki:  ".$_SESSION['dostepneksiazki'];
?>
<br /> <br />
<form method="post">
	Książka która chcesz dodac do biblioteki: 
	<br /><br />
	autor
	<input required type="text" name="autor">
	tytul
	<input required type="text" name="tytul">
	<input type="submit" value="Dodaj">
<?php
	if(isset($_SESSION['dodanieksiazki'])){
		echo $_SESSION['dodanieksiazki'];
		unset($_SESSION['dodanieksiazki']);
}
?>
	<br /> <br />
</form>
<form method="post">
	Ksiazke ktora chcesz usunąć z biblioteki:
	<br /><br />
	autor
	<input required type="text" name="autor2">
	tytul
	<input required type="text" name="tytul2">
	<input required type="submit" value="Usuń">
<?php
	if($_SERVER['REQUEST_METHOD']=="POST"){
		$server="localhost";
		$user="root";
		$password="";
		$database="cwiczenie";
		$polaczenie = @new mysqli($server, $user, $password, $database);
		if($polaczenie->connect_errno!=1){
				$autor2=$_POST['autor2'];
				$_SESSION['autor']=$_POST['autor'];
				$autor=$_POST['autor'];
				$_SESSION['tytul']=$_POST['tytul'];
				$tytul=$_POST['tytul'];
				$sql = "INSERT INTO `ksiazki` (`ID_ksiazki`, `tytul`, `autor`, `ID_user`) VALUES (NULL, '$tytul', '$autor', '0')";
				$sql3 = "SELECT * from `ksiazki` WHERE tytul='$tytul' AND autor='$autor'";
				if($rezultat=@$polaczenie->query($sql3)){
					$ksiazki=$rezultat->num_rows;
					if($ksiazki>0){
						$_SESSION['dodanieksiazki']='<span style="color:red">'."W naszej bibliotece znajduje się już taka książka".'</span>';
					}
					else{
						if($polaczenie->query($sql)==true){
							$_SESSION['dodanieksiazki']="Dodano książke pomyślnie!";
						}
					}
				}
			}	
		else echo "Error ".$polaczenie->connect_errno;
		
	}
?>
</form>
	
<form action="wylogowanie.php" method="post">
	<input type="submit" value="wyloguj się">
</form>
</body>

 

komentarz 17 czerwca 2021 przez Hubert731 Obywatel (1,650 p.)
i za kazdym razem, ksiazka dodaje sie po odswiezeniu, jak tego uniknac?
0 głosów
odpowiedź 17 czerwca 2021 przez VBService Ekspert (252,660 p.)
edycja 18 czerwca 2021 przez VBService

Możesz zrobić tak, dodaj atrybut name do button-ów submit

<input type="submit" name="add_book" value="Dodaj">

i

<input type="submit" name="delete_book" value="Usuń">

 

wtedy

<?php
  session_start();
  if(!isset($_SESSION['logowanie']) || $_SESSION['logowanie']==false) header('LOCATION: index.php');
    else if($_SESSION['login']!="login") header('LOCATION: konto.php');


  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
      // dla demonstracji ... do usunięcia
      var_dump($_POST);
    if (! empty($_POST['add_book'])) {
      // Tutaj twój kod dodawania książki
      // $server="localhost";
      // $user="root"; itd. ...

      $autor = $_POST['autor'];
      $tytul = $_POST['tytul'];

      $sql = "INSERT ...";

      // i dla echo $_SESSION['dodanieksiazki'];
      // $message_add_book = $_SESSION['dodanieksiazki'];
      // lub $message_add_book = 'Error '.$polaczenie->connect_errno;

      
      // dla demonstracji ... do usunięcia
      $message_add_book = "{$autor} {$tytul}";
    } else if (! empty($_POST['delete_book'])) {
      // Tutaj twój kod usuwania książki
      // $server="localhost";
      // $user="root"; itd. ...

      $autor = $_POST['autor'];
      $tytul = $_POST['tytul'];

      $sql = "DELETE ...";

      // analogicznie $message_delete_book = 'Error '.$polaczenie->connect_errno;

      
      // dla demonstracji ... do usunięcia
      $message_delete_book = "{$autor} {$tytul}";
    }
      
    if (empty($message_add_book)) $message_add_book = '';
    if (empty($message_delete_book)) $message_delete_book = '';
  } else {
    $message_add_book = '';
    $message_delete_book = '';
  }
?>

<body>
<br /> <br />

<form method="post">
    Książka która chcesz dodac do biblioteki: 
    <br /><br />
    autor
    <input type="text" name="autor" required>
    tytul
    <input type="text" name="tytul" required>
    <input type="submit" name="add_book" value="Dodaj">
    <p><?php echo $message_add_book; ?></p>
</form>

<br /> <br />

<form method="post">
    Ksiazke ktora chcesz usunąć z biblioteki:
    <br /><br />
    autor
    <input type="text" name="autor" required>
    tytul
    <input type="text" name="tytul" required>
    <input type="submit" name="delete_book" value="Usuń">
    <p><?php echo $message_delete_book; ?></p>
</form>

<br /> <br />
     
<form action="wylogowanie.php" method="post">
    <input type="submit" value="wyloguj się">
</form>
</body>

 

Podobne pytania

0 głosów
2 odpowiedzi 176 wizyt
pytanie zadane 4 maja 2016 w PHP przez Kuba Skoneczny Obywatel (1,780 p.)
0 głosów
2 odpowiedzi 467 wizyt
pytanie zadane 10 kwietnia 2020 w Java przez erykvest Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 372 wizyt

92,538 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,923 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!

...