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

Pusty string a NOT NULL

Fiszki IT
Fiszki IT
+1 głos
100 wizyt
pytanie zadane 17 czerwca w SQL, bazy danych przez manjaro Nałogowiec (34,560 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 przez VBService VIP (121,080 p.)
edycja 19 czerwca 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 przez manjaro Nałogowiec (34,560 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 przez edutomek Mądrala (5,140 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 przez SzkolnyAdmin Maniak (57,360 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 przez manjaro Nałogowiec (34,560 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 przez SzkolnyAdmin Maniak (57,360 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 przez Wiciorny Mędrzec (166,950 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 przez manjaro Nałogowiec (34,560 p.)
Ale to Python, a nie pehape ;)
komentarz 18 czerwca przez Wiciorny Mędrzec (166,950 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ź 97 wizyt
pytanie zadane 13 grudnia 2018 w JavaScript przez gnu_ewm Gaduła (3,340 p.)
0 głosów
1 odpowiedź 104 wizyt
pytanie zadane 20 października 2018 w PHP przez Bartłomiej Bolesta Obywatel (1,610 p.)
0 głosów
2 odpowiedzi 1,252 wizyt
pytanie zadane 3 stycznia 2018 w JavaScript przez kevin Mądrala (5,010 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

84,745 zapytań

133,550 odpowiedzi

295,964 komentarzy

56,007 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...