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

Pusty string a NOT NULL

VPS Starter Arubacloud
+1 głos
719 wizyt
pytanie zadane 17 czerwca 2021 w SQL, bazy danych przez manjaro Nałogowiec (37,390 p.)

Sprawa pewnie banalna ale trochę dziwna.

W bazie mam pola oznaczone NOT NULL i problem jest taki że jak ktoś w formularzu nic nie wpisze to baza to przyjmuje...

Pusty string najwyraźniej nie jest tym samym co NULL. OK rozumiem, może według SQL to jest coś innego, ale co z tym zrobić bo chyba bez sensu robić przy każdym polu warunek typu

 if '' then NULL

 

3 odpowiedzi

0 głosów
odpowiedź 18 czerwca 2021 przez VBService Ekspert (251,270 p.)
edycja 19 czerwca 2021 przez VBService
 
Najlepsza

W np.: php-ie, lista pól z formularza jest traktowana jako tablica ($_POST  => method="post"), a tu można pokusić się o użycie np. foreach-a (do iterowania po nazwach i wartościach pól z formularza), co np. sprawdzenie wartości kilkunastu pól (o różnych nazwach), sprowadza do jednego if-a.  wink

 

<?php
  if ($_SERVER['REQUEST_METHOD'] == 'POST') {   
    ob_start();
      var_dump($_POST);
      $var_dump = ob_get_contents();
    ob_end_clean();

    $post_variable = '';
    foreach($_POST as $variable_name => $variable_value) {
      if (empty(trim($variable_value))) $variable_value = 'null';
      $post_variable .= $variable_name.' = '.$variable_value.PHP_EOL;
    }
  } else {
    $var_dump = '';
    $post_variable = '';
  }
?>
<!doctype html>
<html>
<head>
  <style>
    input {
      display: block;
      margin: 0.5em;
    }
    input[type="submit"] {
      margin: 1em 0;
    }
    p {
      font-weight: bold;
      margin: 0.5em 0;
    }
    form {
      margin-top: 2em;
    }
  </style>
</head>
<body>
  <p>var_dump</p>
  <?php echo $var_dump; ?>

  <p>foreach</p>
  <pre><?php echo $post_variable; ?></pre>

  <form method="post">
    <label for="input1">Label1</label>
    <input type="text" id="input1" name="input1" placeholder="input1">

    <label for="input2">Label2</label>
    <input type="text" id="input2" name="input2" placeholder="input2">

    <label for="input_lorem">Label3</label>
    <input type="text" id="input_lorem" name="input_lorem" placeholder="input_lorem">

    <label for="input_ipsum">Label4</label>
    <input type="text" id="input_ipsum" name="input_ipsum" placeholder="input_ipsum">

    <label for="input3">Label5</label>
    <input type="text" id="input3" name="input3" placeholder="input3">

    <input type="submit" value="submit">
  </form>

</body>
</html>

 

 

 

 

[ edit ]

Z treści post-a nie wynikało wprost, że tu chodzi o python-a, ale z komentarzy już tak ... smiley

więc może te linki okażą się przydatne:

How to Run Python on XAMPP web server
Processing HTML form data with Python
Retrieving HTML From data using Flask

1
komentarz 18 czerwca 2021 przez manjaro Nałogowiec (37,390 p.)

W Pythonie chyba tak się nie da. Widziałem jakieś pseudokombinowane sposoby aby zrobić podobnie ale to też jakieś obejście problemu a nie jego rozwiązanie.

Ostatecznie zrobiłem na jednym ifie. Również nie do końca mi się podoba le chociaż to krótkie dość...

if pole1 = '' or pole2 = '' or pole3 = '' ...:
    flash('Nie są wypełnione wszystkie wymagane pola!', 'danger')

 

1
komentarz 19 czerwca 2021 przez edutomek Dyskutant (8,380 p.)

@manjaro, w Pythonie lepiej (choć nie twierdzę, że idealnie) będzie tak:

def allEmpty(*args):
  empty = [x for x in args if len(x) == 0]
  return len(empty) == len(args)

def allEmptyAlternative(*args):
  for x in args:
    if len(x) > 0:
      return False
  return True

if allEmpty(pole1, pole2, pole3): ...

 

0 głosów
odpowiedź 17 czerwca 2021 przez SzkolnyAdmin Szeryf (86,280 p.)


Tu masz ładnie wyjaśnione różnice: https://www.daniweb.com/programming/databases/threads/145832/what-is-the-main-differences-between-null-value-and-blank#post691376

Serię if-ów da się chyba jakoś ogarnąć programistycznie.

komentarz 17 czerwca 2021 przez manjaro Nałogowiec (37,390 p.)
No tak średnio bo jak mam formularz z 20 inputami to robić 20 ifów jest trochę śmiesznie... Nie można jakoś tego lepiej ogarnąć? Chodzi mi o to, że twórcy sqla chyba przwidzieli taką sytuację i zaproponowali jakieś sensowniejsze rozwiązanie.
komentarz 17 czerwca 2021 przez SzkolnyAdmin Szeryf (86,280 p.)
Da się jakoś zestandaryzować id i name tych inputów? Np. pole1, pole2, pole3, itd. Wtedy łatwiej sprawdzisz wypełnienie po stronie klienta i serwera. Atrybut pattern pola też pomaga.
0 głosów
odpowiedź 18 czerwca 2021 przez Wiciorny Ekspert (269,120 p.)

nadać klasę na inputy, i określić cały warunek na klasę inputu ograniczając się wtedy do jednego, warunku :) czy wywołania metody walidacyjnej, ewentualnie foreach if tak brzydziej 

Np. class : validate

foreach ($_POST as $key=>$value){
    if (isset($_POST[$key]) && ctype_digit($_POST[$key])) {
        $$key = $value;
    } else {
        $$key = FALSE;
    }
}

 

lub

$fieldArray = array('fieldOne', 'fieldTwo', 'fieldThree');
$validate = true;

foreach ($fieldArray as $field) {
    if (!isset($_POST[$field]) && !ctype_digit($_POST[$field])) {
        $validate = false;
    }
}

 

komentarz 18 czerwca 2021 przez manjaro Nałogowiec (37,390 p.)
Ale to Python, a nie pehape ;)
komentarz 18 czerwca 2021 przez Wiciorny Ekspert (269,120 p.)
aa dałoby rade, da się w sumie nawet OOP :D w pythonie, brzydkie to i niepraktycznie, ale się da

Podobne pytania

0 głosów
1 odpowiedź 160 wizyt
pytanie zadane 13 grudnia 2018 w JavaScript przez gnu_ewm Gaduła (3,340 p.)
0 głosów
1 odpowiedź 165 wizyt
pytanie zadane 20 października 2018 w PHP przez Bartłomiej Bolesta Obywatel (1,630 p.)
0 głosów
2 odpowiedzi 2,127 wizyt
pytanie zadane 3 stycznia 2018 w JavaScript przez kevin Mądrala (5,010 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

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

...