• 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
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

84,744 zapytań

133,547 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.

...