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

Update SQL tylko wypełnione pola w formularzu

Object Storage Arubacloud
+1 głos
475 wizyt
pytanie zadane 30 listopada 2020 w PHP przez Paweł123 Nałogowiec (33,500 p.)

Witam, pisze w PHP bardzo prosty system CRM i mam problem z updatem danych.

Chciałbym aby po wpisaniu ID kontaktu i wypełnieniu formularza rekord został uaktualniony. Wszystko działa jak na razie, jednak problem pojawia się wtedy kiedy chcę tylko jeden rekord rekord uaktualnic, w tym momencie formularz przesyła puste pola do bazy danych. Imie uzupełniam, a nazwisko pozostaje puste w forlumarzu.

<form action="update_konakty.php" method="post">

  <input name="id" type="text" class="form-control" id="exampleInputEmail1" placeholder="Wprowadz id do uaktualnienia">
  <br>
  <div class="form-group">
    <label for="exampleInputEmail1">Imie</label>
    <input name="imie" type="text" class="form-control" id="exampleInputEmail1" placeholder="Wprowadz imie">
  <div class="form-group">
    <label for="exampleInputEmail1">Nazwisko</label>
    <input  name= "nazwisko" type="text" class="form-control" id="exampleInputPassword1" placeholder="Wprowadz nazwisko">
  <div class="form-group">
    <label for="exampleInputEmail1">Telefon</label>
    <input name= "telefon" type="text" class="form-control" id="exampleInputPassword1" placeholder="Wprowadz telefon">
  <div class="form-group">
    <label for="exampleInputEmail1">E-mail</label>
    <input name= "mail" type="text" class="form-control" id="exampleInputPassword1" placeholder="Wprowadz E-mail">
  </div>

  <button type="submit" class="btn btn-primary">Submit</button>
</form>
<?php require_once "baza_danych.php";
        session_start();

	$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
	
	if ($polaczenie->connect_errno!=0)
	{
		echo "Error: ".$polaczenie->connect_errno;
	}
	else
	{
        echo "Sukces";
      
    }

   
    $id = mysqli_real_escape_string($polaczenie, $_REQUEST['id']);
    $imie = mysqli_real_escape_string($polaczenie, $_POST['imie']);
    $nazwisko = mysqli_real_escape_string($polaczenie, $_POST['nazwisko']);

    $sql = "UPDATE  kontakty SET imie='$imie', nazwisko='$nazwisko' WHERE id='$id'";
    if(mysqli_query($polaczenie, $sql)){
        echo "Records updated successfully.";
        header('refresh:1; url=kontakty.php');
    } else{
        echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
    }

  $polaczenie->close();
?>

Czy ktoś wie jak to zrobić, aby formularz nie przesyłał pustych inputów do bazy danych?

2 odpowiedzi

0 głosów
odpowiedź 30 listopada 2020 przez VBService Ekspert (253,100 p.)

Nie wiem czy dobrze zrozumiałem problem, ale chyba wystarczy ustawić atrybut na <input> - required i dla 
<input> email proponuję: <input name= "mail" type="email" ...>

<form action="update_konakty.php" method="post">
 
  <input name="id" type="text" class="form-control" id="exampleInputEmail1" placeholder="Wprowadz id do uaktualnienia" required>
  <br>
  <div class="form-group">
    <label for="exampleInputEmail1">Imie</label>
    <input name="imie" type="text" class="form-control" id="exampleInputEmail1" placeholder="Wprowadz imie" required>
  <div class="form-group">
    <label for="exampleInputEmail1">Nazwisko</label>
    <input  name= "nazwisko" type="text" class="form-control" id="exampleInputPassword1" placeholder="Wprowadz nazwisko" required>
  <div class="form-group">
    <label for="exampleInputEmail1">Telefon</label>
    <input name= "telefon" type="text" class="form-control" id="exampleInputPassword1" placeholder="Wprowadz telefon" required>
  <div class="form-group">
    <label for="exampleInputEmail1">E-mail</label>
    <input name= "mail" type="email" class="form-control" id="exampleInputPassword1" placeholder="Wprowadz E-mail" required>
  </div>
 
  <button type="submit" class="btn btn-primary">Submit</button>
</form>

 

komentarz 30 listopada 2020 przez Paweł123 Nałogowiec (33,500 p.)
Kurcze własnie nie do końca, bo mi chodzi o to, że chce poprawić tylko Imie, a reszta ma pozostać w bazie danych taka sama, jendak kiedy nie wypełniam niczym innych inputów w bazie mysql pozostałe pola, Naziwsko, Telefon, Mail są usuwane wcześniej zapisane dane.

I jak zrobić, żeby te dane się nie usuwały z bazy danych
komentarz 1 grudnia 2020 przez VBService Ekspert (253,100 p.)
edycja 1 grudnia 2020 przez VBService

Po krótkiej analizie, komentarzy podanych przez inny forumowiczów, proponuję: (mam nadzieję, że sam sobie poradzisz z przyniesieniem kodu z przykładu do Twojego skryptu).

pole <input name="id"> musi być ustawione, więc tylko ono ma ustawione: required
pole <input name="mail"> zmiana type na type="email".

index.php

<!DOCTYPE html>
<html lang='pl'>
  <head>
    <meta charste='utf-8'>
  </head>
  <body>
    <form action="update_konakty.php" method="post">

    <input name="id" type="text" class="form-control" id="exampleInputEmail1" placeholder="Wprowadz id do uaktualnienia" required>
    <br>
    <div class="form-group">
        <label for="exampleInputEmail1">Imie</label>
        <input name="imie" type="text" class="form-control" id="exampleInputEmail1" placeholder="Wprowadz imie">
    <div class="form-group">
        <label for="exampleInputEmail1">Nazwisko</label>
        <input  name= "nazwisko" type="text" class="form-control" id="exampleInputPassword1" placeholder="Wprowadz nazwisko">
    <div class="form-group">
        <label for="exampleInputEmail1">Telefon</label>
        <input name="telefon" type="text" class="form-control" id="exampleInputPassword1" placeholder="Wprowadz telefon">
    <div class="form-group">
        <label for="exampleInputEmail1">E-mail</label>
        <input name="mail" type="email" class="form-control" id="exampleInputPassword1" placeholder="Wprowadz E-mail">
    </div>

    <button type="submit" class="btn btn-primary">Submit</button>
    </form>

  </body>
</html>

update_konakty.php

<?php

/*
require_once "baza_danych.php";
session_start();
 
$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
     
if ($polaczenie->connect_errno!=0) {
  echo "Error: ".$polaczenie->connect_errno;
} else {
  echo "Sukces";       
}
*/

$form = $set = $sql = '';
foreach($_REQUEST as $key => $value) {
  if (isset($_REQUEST[$key]) && !empty($value)) {
    if ($key != 'id') {
      $form .= " <b>$key:</b> $value".PHP_EOL;
      $escape_string = $value; //$escape_string = mysqli_real_escape_string($polaczenie, $_REQUEST[$key]);
      $set .= "`$key`='$escape_string', ";
    } else {
      $id = $value;
    }
  }  
}

if (!empty($set)) {
  $form = "Dla <b>id=</b>$id podane pola zostały uaktualnione:".PHP_EOL.$form;
  $set = rtrim($set, ', ');
  $sql = "UPDATE kontakty SET $set WHERE id='$id'";

  /*

  if (mysqli_query($polaczenie, $sql)) {
    echo 'Records updated successfully.';
    header('refresh:1; url=kontakty.php');
  } else {
    echo "ERROR: Could not able to execute $sql.<br>".mysqli_error($link);
  }
 
  $polaczenie->close();

  */
} else {
  $form = 'Przesłano pusty formularz';
}
?>
<!DOCTYPE html>
<html lang='pl'>
  <head>
    <meta charste='utf-8'>
  </head>
  <body>
    <pre><?php echo $form; ?></pre>
    <pre><?php echo $sql; ?></pre>
  </body>
</html>

0 głosów
odpowiedź 30 listopada 2020 przez bwaluk Mądrala (5,440 p.)

Powinieneś konstruować query do SQLa w zależności od uzupełnionych danych (a raczej jego parametry).
W tym momencie Twój UPDATE zawsze zmodyfikuje imię i nazwisko, bo mu to na sztywno przekazujesz.

SET imie='$imie', nazwisko='$nazwisko' 

Więc jeśli z formularza dostajesz pustą wartość (np. pola imię) - to Twój aktualny kod tego nie kontroluje i dlatego masz takie efekty w bazie. 
 

komentarz 30 listopada 2020 przez Paweł123 Nałogowiec (33,500 p.)
To trzba zrobić to na ifach, czy jak?
Możesz bardziej coś podpowiedzieć?

Podobne pytania

0 głosów
1 odpowiedź 1,363 wizyt
0 głosów
0 odpowiedzi 124 wizyt
pytanie zadane 12 marca 2017 w SQL, bazy danych przez Alex.Ironside Stary wyjadacz (14,900 p.)
0 głosów
1 odpowiedź 79 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

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

...