[PHP] Problem ze skryptem tworzenia firmy w grze


(rycerz2000) #1

Napisałem skrypt tworzenia firmy w mojej grze.

Formularz html:

<?php
if (!empty($_POST['załóż']) ) registerf();
?>
 <form action="" method="POST">
  <table align="center">
   <tr>
   <td><b>Nazwa firmy:</b></td>
   <td style="padding: 10px"><input type="text" name="nazwa" />
   </tr>
   <tr>
   <td><b>Hasło do panelu zarządzania:</b></td>
   <td style="padding: 10px"><input type="password" name="haslo"</td>
   </tr>
  </table><br> 
  <center><input type="submit" style="width: 25%" name="potwierdzenie" value="Załóż" /></center>
 </form>

skrypt php:

function registerf(){
  if (!empty($nazwa) && !empty($hasło)){
    if (strlen($nazwa) < 4) echo '<div class="alert alert-danger">Nazwa firmy jest za krótka!</div>';
    elseif (strlen($nazwa) > 14) echo '<div class="alert alert-danger">Nazwa firmy jest za długa!</div>';
    elseif (strlen($hasło) < 4) echo '<div class="alert alert-danger">Hasło jest za krótkie!</div>';
    elseif (strlen($hasło) > 20) echo '<div class="alert alert-danger">Hasło jest za długie!</div>';
    elseif ($nazwa == $hasło) echo '<div class="alert alert-danger">Nazwa firmy nie może być taka sama jak hasło!</div>';
    else{
      if (ctype_alnum($nazwa)){
        $hasło = md5(sha1($hasło));
        $juz_istnieje = row("SELECT * FROM firmy WHERE nazwa = '$nazwa' OR hasło = '$hasło'");
        if ($istnieje) echo '<div class="alert alert-danger">Taka firma już istnieje!</div>';
	else {
          call("INSERT INTO firmy (nazwa, hasło) VALUES ('$nazwa', '$hasło')");
          call("UPDATE firmy SET b_state = b_state + 2 WHERE id = ".$id);
          echo '<div class="alert alert-success">Pomyślnie utworzono firmę</div>';
          ?><br><a href="game.php?a=firma">Zarządzaj</a> <?php
        } 
      } else echo '<div class="alert alert-danger">Nazwa może zawierać tylko litery i cyfry!</div>';
    }
  } else echo '<div class="alert alert-danger">Wypełnij wszystkie pola!</div>';
}

W bazie danych stworzyłem tabelę firmy i dwie kolumny nazwa i hasło.

Oba są w jednym pliku tylko pominąłem nie związane z tym problemem fragmenty.

Nie zależnie od tego czy się wypełni formularz czy nie jak się kliknie Załóż to skrypt się nie wykonuje a strona włącza się jeszcze raz. co jest źle?


(kalitt) #2

To tak:

Po pierwsze - nie używaj polskich liter w programowaniu

Po drugie - nigdzie nie wysyłasz pola "załóż". Musisz zrobić pole input typu hidden np. 

Po trzecie - używasz starego HTML4.01. Poczytaj o tym jak robić stronki w nowoczesnym HTML5


(rycerz2000) #3
  1. Polskie litery tu nie przeszkadzają wystarczy wybrać odpowiednie kodowanie znaków.

2.

<form action="" method="POST">

nie trzeba wysyłać danych z formularza bo funkcja znajduje się w tym samym pliku co formularz

3.A w czym to przeszkadza?


(slepciu) #4

AD 2 - kalitt napisał Ci tutaj na czym polega problem, w twoim formularzu nie ma pola o nazwie "załóż", a tutaj:

if (!empty($_POST['załóż']) ) registerf();

sprawdzasz, czy taka zmienna została przesłana. Zakładam, że chciałeś sprawdzić czy był kliknięty przycisk wysyłania, ale w takiej sytuacji powinieneś sprawdzić zmienną $_POST['potwierdzenie], albo jak sugerował kalitt dodać jakieś pole ukryte jako flagę


(rycerz2000) #5

OK nie źle zrozumiałem odpowiedź kalitt

zmieniłem na 

if (!empty($_POST['potwierdzenie']) ) registerf();

tylko że nie działa dalej to samo


(batmomobil) #6

Sprawdż sobie zmienne w zapytaniu i w if-ie.

$juz_istnieje = row("SELECT * FROM firmy WHERE nazwa = '$nazwa' OR hasło = '$hasło'");
        if ($istnieje) echo '<div class="alert alert-danger">Taka firma już istnieje!</div>';

if nie powinien wyglądac czasami tak:

if (($juz_stnieje) == 0)

(rycerz2000) #7

zmieniłem warunek i sprawdziłem dane     dalej nic

mógł by ktoś dać przykład jak powinien wyglądać taki skrypt tylko uproszczony (nie sprawdzający długości hasła, loginu itd.) 


(slepciu) #8
function registerf()
        {
            extract($_POST);
            if(!empty($nazwa) && !empty($haslo))
            {
                if(strlen($nazwa) < 4)
                    echo '<div class="alert alert-danger">Nazwa firmy jest za krótka!</div>';
                elseif(strlen($nazwa) > 14)
                    echo '<div class="alert alert-danger">Nazwa firmy jest za długa!</div>';
                elseif(strlen($haslo) < 4)
                    echo '<div class="alert alert-danger">Hasło jest za krótkie!</div>';
                elseif(strlen($haslo) > 20)
                    echo '<div class="alert alert-danger">Hasło jest za długie!</div>';
                elseif($nazwa == $haslo)
                    echo '<div class="alert alert-danger">Nazwa firmy nie może być taka sama jak hasło!</div>';
                else
                {
                    if(ctype_alnum($nazwa))
                    {
                        $haslo=md5(sha1($haslo));
                        $juz_istnieje=false;
                        if($juz_istnieje)
                            echo '<div class="alert alert-danger">Taka firma już istnieje!</div>';
                        else
                        {
// call("INSERT INTO firmy (nazwa, hasło) VALUES ('$nazwa', '$hasło')");
// call("UPDATE firmy SET b_state = b_state + 2 WHERE id = ".$id);
                            echo '<div class="alert alert-success">Pomyślnie utworzono firmę</div>';
                            ?><br><a href="game.php?a=firma">Zarządzaj</a> <?php
                        }
                    } else
                        echo '<div class="alert alert-danger">Nazwa może zawierać tylko litery i cyfry!</div>';
                }
            } else
                echo '<div class="alert alert-danger">Wypełnij wszystkie pola!</div>';
        }
        if(!empty($_POST['potwierdzenie']))
            registerf();
        ?>
        <form action="a.php" method="POST">
            <table align="center">
                <tr>
                    <td><b>Nazwa firmy:</b></td>
                    <td style="padding: 10px"><input type="text" name="nazwa" />
                </tr>
                <tr>
                    <td><b>Hasło do panelu zarządzania:</b></td>
                    <td style="padding: 10px"><input type="password" name="haslo"</td>
                </tr>
            </table><br> 
            <center><input type="submit" style="width: 25%" name="potwierdzenie" value="Załóż" /></center>
        </form>

Ten kod działa. Zakomentowałem tylko wstawianie danych do bazy i zamiast pobierać dane wpisałem wartość logiczną.

No i poprawiłem kilka literówek, musisz uważniej tworzyć nazwy zmiennych, w jednym miejscu masz zmienną $juz_istnieje w innym $istnieje, w formularzu przesyłasz pole haslo, sprawdzasz zmienną $hasło, do tego w żadnym miejscu nie pobrałeś zmiennych przesłanych formularzem. Ja to zrobiłem trochę na skróty za pomocą extract($_POST);

W każdym razie teraz skrypt działa, musisz tylko upewnić się, że w zapytaniach do bazy nie ma błędów.