[php] warunek if i przekazanie danych mysql


(Marcindodo) #1

myślę że banalny problem, ale na moje logiczne myślenie robię wszystko ok

<?php

$dane=$_POST['tekst'];

$imie=$_POST['login'];


if (empty($dane) || empty($imie)){

echo 'nie wypelniono wymaganych komorek';

}


else{

$zapytanie="INSERT INTO `baza` (`id`,`imie`,`text`) VALUES ('','$imie','$dane')";

$idzapytanie=mysql_query($zapytanie);

mysql_close($polaczenie);

}

?>

dobrze mi pokazuje, kiedy nie mam uzupełnione wymaganych komórek, ale tak czy siak wysyła dane do tabeli. Jak są puste komórki to wypisze, że nie wypełniono poprawnie, jeśli jedna jest pusta to tak samo zgłosi błąd, ale co z tego skoro i tak wyśle wszystko do bazy i w krotkach mam puste dane. Próbowałem na kilka sposobów np bez empty tylko ="", z !empty.


(rozwalkompa) #2

Hm, u mnie działa, ale nie tworzyłem bazy, więc nie wiem czy zapisuje <- dopisałem

po wysłaniu zapytania i zwracało tylko jeśli pola były poprawnie uzupełnione. Spróbuj tak u siebie i napisz czy zawsze pokazuje "wysłano".


(Marcindodo) #3

u mnie pisałem ze dobrze zwraca echo i logicznie to chyba jest poprawnie

ale niezaleznie wlasnie od tego czy jest cos wpisane czy nie to i tak wyrzuca dane do bazy

samo wypisanie czy jest ok czy nie działa, tylko nie wiem czemu przechodzi do else jesli cos jest nie tak

jesli niespelnia warunku, czyli jakas komorka jest pusta to powinien skonczyc pętle i wypisac echo a on wypisze echo ze jest niepoprawnie ale i tak wpisze do bazy puste komorki


(Sitemaster) #4

pomijając fakt, że wypadało by najpierw sprawdzić czy postem coś wysłano (isset ) i to że nie filtrujesz w żaden sposób zapisywanych do bazy danych ...to zawsze możesz po echo dać exit albo die :stuck_out_tongue:


(Adwody1) #5

Zamiast :

if (empty($dane) || empty($imie))

Spróbuj:

if ($dane=='' or $imie=='')

Pozdrawiam :slight_smile:


(Marcindodo) #6

@Adwody

empty zastosowałem po tym jak sposób wyżej a zarazem ten co Ty zaproponowałeś nie zadziałał

dziwne czemu przechodzi do else skoro if nie zostało spełnione. Echo dobrze działa, w zależności od wypełnienia

może ktoś ma czas i zrobi to na bazie danych


(rozwalkompa) #7

Może spróbuj zmienić kolejność:

if (($_POST['tekst'] !="") && ($_POST['login'] !="")) {

$text = $_POST['tekst'];

$imie = $_POST['login'];

$user = 'user'; $password = 'haslo'; $database = 'adres_bazy'; mysql_connect('baza.pl', $user, $password);

@mysql_select_db($database) or die("Nie udało się wybrać bazy danych"); 

$zapytanie="INSERT INTO `baza` (`id`,`imie`,`text`) VALUES ('','$imie','$dane')";

mysql_real_escape_string($zapytanie);

$idzapytanie=mysql_query($zapytanie);

mysql_close();

echo('wyslano');

}

else {

echo ('nie wypelniono wymaganych komorek');

};

Tak u mnie działało poprawnie.

właśnie po to jest else, żeby się wykonać, gdy if nie jest spełnione :smiley:


(Adwody1) #8

Tak ale czy użyłeś dwóch znaków równości "==" ?


(kostek135) #9
<?php

$dane=$_POST['tekst'];

$imie=$_POST['login'];


if (empty($dane) || empty($imie)){

echo 'nie wypelniono wymaganych komorek';

}


else{

$zapytanie="INSERT INTO `baza` (`id`,`imie`,`text`) VALUES ('','$imie','$dane')";

$idzapytanie=mysql_query($zapytanie);

mysql_close($polaczenie);

}

?>

Nie jestem pewien, ale czy przypadkiem id nie jest autoincrement? Jeżeli tak, próbujesz przypisać mu pusty string, a on chce kolejną wartość zwiększoną o 1, nie wiem czy to może kolidować w jakiś sposób.


(mawej) #10

Tak jak powiedział to kostek135

Problem rozwiążesz pomijając przy dodawaniu pole id:

$zapytanie="INSERT INTO `baza` (`imie`,`text`) VALUES('$imie','$dane')";