PHP - Error / Undefined variable


#1

Potreban mi je checkbox na kontakt formi i želim to uraditi kroz php i napraviti validaciju kroz php.

Uradila sam to na sljedeći način:

<div class="form-check">
     <input class="form-check-input" type="checkbox" name="terms" value="1" id="terms">
     <label class="form-check-label">
        <?php echo (empty($_POST['terms'])) ? '':'checked' ?> Pročitao/la sam uvjete privatnosti i slažem se.
     </label>
 <p class='terms'><?= $terms_error ?></p>
</div>

Validacija…

if (empty($_POST["terms"])) {
        $terms_error = "If you agee to the terms, please check the box below";
      } else {
        $terms = ($_POST["terms"]);
    }

I sada kada testiram na XAMPP pokazuje mi
Notice : Undefined variable: terms_error in C:\xampp\htdocs--\contact.php on line 122

A kada kliknem na dugme submit pokajvi se normalno poruka “If you agee to the terms, please check the box below” i onda nestane ova napomena “Undefined variable” ako uradim refresh opet se pojavi.

Bilo kakva pomoć je dobro došla. Hvala.


#2
<?= isset($terms_error) ? $terms_error : ''; ?>;
// zavisno od verzije PHP-a moze i
// echo $terms_error ?: '';
// ili
// echo $terms_error ?? '';

Provjera da li varijabla postoji.


#3

Hvala puno, baš si brz :heart:

Riješila sam problem. :wink:


#4

Samo imam sad ovaj problemćić. kada potvrdim checkbox pojavi mi se text ispred “checked”

Capture

To je ovaj text iz:

<?php echo (empty($_POST['terms'])) ? '':'checked' ?> Pročitao/la sam <a href="#">uvjete privatnosti</a> i slažem se u potpunosti.

Pa kako bi to mogla da fix nije mi baš jasno?


#5

Php liniju staviti unutar checkbox elementa:

<div class="form-check">
     <input class="form-check-input" type="checkbox" name="terms" value="1" id="terms" <?php echo (empty($_POST['terms'])) ? '':'checked' ?> >
     <label class="form-check-label">
        Pročitao/la sam uvjete privatnosti i slažem se.
     </label>
 <p class='terms'><?= $terms_error ?></p>
</div>

#6

Hvala, da li je to jedini način?

I zanima me još samo kako mogu napraviti da checkbox zapamti kada je neko čekirao, npr. ako neko nešto unese pogrešno pa mu se stranica refresh da ne mora ponovno klikati da mu već zapamti od ranije?


#7

Zapamti vrijednost kroz sesiju.


#8

Najlakše mi je dodati u value="<?php echo $_POST['name']; ?>"

Ali već imam value="<?= $name ?>"

Pa kako onda to dvoje spojiti ili kombinovati nije mi jasno?

Znam da zvučim amaterski jer i jesam amaterka u PHP-u :slight_smile:


#9

Je l’ ovo stoji u checkbox input field-u ili van njega?


#10

Van inputa je, ovako izgleda taj dio koda:

<div class="form-check">
  <input class="form-check-input" type="checkbox" name="terms" value="1" id="terms">
  <?php echo (empty($_POST['terms'])) ? '':'checked' ?>
  <label class="form-check-label">
  Pročitao/la sam <a href="#">uvjete privatnosti</a> i slažem se u potpunosti.
  </label>
<p class='terms'><?= isset($terms_error) ? $terms_error : ''; ?></p>
</div>

#11

Pomjeri ga.

<input class="form-check-input" type="checkbox" name="terms" value="<?php echo (empty($_POST['terms'])) ? '0' : '1'; ?>"<?php echo (empty($_POST['terms'])) ? '' : ' checked="checked"'; ?> id="terms">

#12

Ubacila sam taj kod što si mi poslao i sada kada čekiram i idem na submit izbaci mi poruku da nije potvrđeno tj. da nisam kliknula na checkbox, a checked se ne pojavljuje ispred texta više to je oke.


#13

@tpojka
Ali uradila sam to na ovaj način
<input class="form-check-input" type="checkbox" name="terms" value="1" <?php echo (empty($_POST['terms'])) ? '':'checked' ?> id="terms">

I sada je oke. Hvala puno u svakom slučaju svima na pomoći, divni ste :heart:


#14

Provrti logiku jer je sad vrijednost uvijek setovana na ‘1’. Ali ako radi, to je to onda. :slight_smile:


#15

Ma radi nikad bolje :smile:

Malo eksperimentišem sa formom koju kreiram pa hoću da setujem da se ne moze ukucati manje od 3 slova u formu i pokusala sam nesto kao:

elseif(strlen($name) < 3)  {
          $name_error[] = "Enter at least 3 characters";
        } 

Pa nije baš da radi a čitav dio ovo koda izgleda ovako:

    if (empty($_POST["name"])) {
            $name_error = "Name is required";
          } else {
            $name = test_input($_POST["name"]);
            // check if name only contains letters and whitespace
            if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
              $name_error = "Only letters and white space allowed"; 
            }
          }

#16

Ja ne vidim taj strlen() u else bloku nakon što si uradila assign vrijednosti na varijablu. Gdje je postavljen?
Plus, bitno ti je dodjeljivanje imena za bolju strukturu:

$formErrors = [];
$formErrors['name'] = [];
$formErrors['name']['invalid_length_min'] = "Enter at least 3 characters.";
$formErrors['name']['invalid_type_constraint'] = "Only letters and white space allowed.";

Lakše je snalaženje kad se treba isčitati šta se tamo nalazi.