Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [skrypt] wady prostego skryptu
Forum PHP.pl > Inne > Oceny
Listonoszek
Cześć!
Zacząłem niedawno studiować podręczniki do php. W jednym z podrozdziałów znalazłem skrypt, który obliczał wartości funkcji kwadratowej. Analizując go postanowiłem napisać własny, ale odnośnie funkcji liniowej - nie ma właściwie tam za dużo liczenia, ale nie w tym rzecz.

utowrzyłem formularz w formie $_POST, który pobiera parametry a i b. Następnie napisałem skrypt, który podstawia parametry a i b pod wzór y = ax + b
w zależności od tego jakie wartości przyjmują dane parametry. I tutaj nachodzą mnie wątpliwości, ponieważ mocno wydaje mi się, że troszkę oszukiwałem. Nie potrafiłem jeszcze innej metody zastosować

Rzeczą której nie rozumiem to skrypt sprawdzający czy obie wartości a i b są liczbami. Dlaczego skrypt nie uznaje liczb ujemnych? -2, -3 etc. ? Przez znak "-" ?

Wadą skryptu jest napewno to, że można mu sprzedać każdą ciemnotę - podstawić jakieś literki i inne wyrażenia z kosmosu i przyjmie je jako swoje.
Skrypt sprawdzający czy są liczbami jest - wydaje mi się, że wystarczyło by dodać odpowiednią instrukcję, żeby nie przepuszczał żadnych innych znaków poza literami, ale z kolei gdybym tak zrobił, to nie akceptowałby mi liczb ujemnych.

Prosze o wskazanie ewentualnych błędów w kodzie, albo nieprawidłowych sformułowań. Proszę o wskazówki i naprowadzenia, jak poprawić moje oszustwo, albo utwierdzić mnie w tym, że to "dobre oszustwo" i było to całkiem logiczne posunięcie : )

Dzięki i pozdrawiam

PS. niżej zamieszczam cały kod i link gdzie można zobaczyć jak skrypt działa w rzeczywistości.
http://dhost.info/mampatent/xyz/index.php

CODE
y=ax+b
<html>
<body>
<form method="POST" action="index.php">
<p><label>Podaj parametr "a": <input type="text" name="a"/></label></p>
<p><label>Podaj parametr "b": <input type="text" name="b"/></label></p>

<p><input type="submit" value="wyślij"/><input type="reset" value="wyczyść"/></p>

</form>
<?php
//1 - parametry a,b
if (is_numeric($_POST['a'] & $_POST['b']))
{
echo 'oba parametry są liczbami<br/><br/>';
}
else
{
echo 'jeden z parametrów nie jest liczbą <br/><br/>';
}

$a = $_POST['a']; // parametr a
$b = $_POST['b']; // parametr b
$x = 'x';
$znak = '+';


// Założenia parametru b i zmiany zmiennych
if ($_POST['b'] > 0) // jeżeli b > 0 - znakiem we wzorze będzie '+'
{
$znak = '+';
}
elseif ($_POST['b'] == 0) // jeśli b == 0 nie wyświetli się ani znak, ani wartość parametru b = 0
{
$znak = ' ';
$b = ' ';
}
elseif ($_POST['b'] < 0) // jeśli b < 0 nie wyświetli się żaden znak
{
$znak ='';
}
else
{
$znak = '-';
}

// Założenia parametru a i zmiany zmiennych
if($a > 1)
{
$x = 'x'; //jeśli a > 1 - x wyswietlany obok parametru
}
elseif($a < 0) // jeśli a < 0 - x wyswietlany
{
$x = 'x';
}
elseif($a == 1) // jeśli a == 1 - nie wyswietlamy 'x'
{
$a = '';
}
else
{
$a = '';
$x = '';
$znak = '';
}



if($a == 0 && $b == 0)
{
$a = 0;
$b = 0;
$x = '';
$znak = '';
$funkcja = $a + $b;
}
else
{
$funkcja = $a. $x. $znak. $b;
}


echo 'wzór twojej funkcji to: <font color="red">y = ' .$funkcja.'</font>';






SHiP
Ja bym dał:

  1. if (is_numeric($_POST['a']) && is_numeric($_POST['b']))

croc
A ja bym stworzył własną funkcję, bo is_numeric ma swoje wady.

  1. function isNumber($value) {
  2. return preg_match('/-?(?:(?:[1-9][0-9]*)|0)(?:[,.][0-9]+)?/', $value);
  3. }


Moja funkcja akceptuje zarówno kropkę jak i przecinek jako separator zmiennoprzecinkowy, dlatego dla dalszej obróbki należy zamienić ewentualny przecinek na kropkę:

  1. $a = str_replace(',', '.', $a);
everth
A ja bym zastosował Data Filtering (zwłaszcza funkcję filter_var_array() w połączeniu z Sanitization filters). Jak się już uczy to niech użyje nowych narzędzi.
Listonoszek
niestety mój dzisiejszy wakacyjny wyjazd przerwie moją naukę php na jakiś czas i niestety nie będę mógł już wypróbować jak działają zaprezentowane przez was rozwiązania. Tak czy owak, dziękuję bardzo za podane przez was warianty upgrade'u mojego skryptu : )

pozdrawiam
Listonoszek
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.