[PHP]Błąd z else


(Bellzebub) #1

Siemka :slight_smile: W php bawie sie od niedawna i wyskakuje mi taki blad Parse error: syntax error, unexcepted T_ELSE in /home/dotestu/public_html/index.php on line 11

<?php

mysql_connect('localhost','*******','*********) or die('blad polaczenia z baza danych');

mysql_select_db('dotestu_GRA') or die('blad wyboru bazy danych');

if(isset($_GET['action'])) {

switch($_GET['action']){

case 'login' : include 'login.php'; break;

default : include 'default.php'; break;

}

else{

include 'default.php';

}

mysql_close();

?>

Linijka 11 to else{

Wie ktos moze jaki tu jest blad?

P.S. Sory za brak polskich znakow, ale pisze z niemieckiego kompa


(ssn) #2

policz klamry w kodzie…

Otwierasz w sumie 3 klamry, a zamykasz 2.


(Bellzebub) #3

Wielkie dzieki za pomoc :smiley:


(GioWDS) #4

Możesz też to napisać tak:

<?php

if (!isset($_GET['action'])) $_GET['action'] = null;

switch($_GET['action'])

{

  case 'akcja1':

    break;

  default:

}

?>

(Bellzebub) #5

Mam jeszcze jeden problem

Po zalogowaniu sie wyskakuje mi

warning mysql_num_rows() supplied argument is not a valid mysql result resource in /home/dotestu/public_html/login.php on line 15

Nie ma takiego uzytkownika

A uzytkownik istnieje, jest w bazie danych

<?php

session_start();

mysql_connect(“localhost”,"*******","*******");

mysql_select_db(“dotestu_GRA”);

if(isset($_SESSION[‘zalogowany’])) {

echo "Witam, ".$_SESSION[‘login’];

}else{

if(isset($_POST[‘wyslij’])) {

if(mysql_num_rows(mysql_query("SELECT login, haslo

FROM user WHERE login = ‘".$_POST[‘login’]."’

&& haslo = ‘".$_POST[‘haslo’]."’ ")) > 0) {

if(mysql_num_rows(mysql_query("SELECT nr FROM users

WHERE login = ‘".$_POST[‘login’]."’

&& haslo = ‘".$_POST[‘haslo’]."’ ")) > 0 ) {

$_SESSION[‘zalogowany’] = true;

$_SESSION[‘login’] = $_POST[‘login’];

$_SESSION[‘haslo’] = $_POST[‘haslo’];

echo “Jestes zalogowany.”;

} else {

echo “Zle haslo, prosze spróbowac ponownie”;

}

} else {

echo “Nie ma takiego uzytkownika”;

}

} else {

?>

nazwa uzytkownika:

haslo:

<?php

}

}

?>

Linijka 15 to

&& haslo = ‘".$_POST[‘haslo’]."’ ")) > 0 ) {

Wie ktos moze co jest grane?


(Grzelix) #6

SQL koniunkcja to AND a nie &&

Zapytanie jest niepoprawne i zwracana jest wartość FALSE a nie resource którego oczekuje funkcja mysql_num_rows.


(Bellzebub) #7

Zamienilem to na AND i dalej ten sam blad jest.


(Grzelix) #8

To oznacza że nadal zapytanie jest nie poprawne zrób tak:

= "SELECT nr FROM users WHERE login = '".$_POST['login']."' AND  haslo = '".$_POST['haslo']."' ";echo $query;mysql_num_rows(mysql_query($query))  0 ) {



to wyświetli ci utworzone zapytanie. Odpytaj bezpośrednio bazę danych i zobacz jakimi błędami rzuca. 



Jeśli zapytanie było by poprawne wtedy mysql_num_rows nie rzucałby warningiem.



EDIT: błąd może być związany że rozciągnąłeś to zapytanie na kilka linijek. Możesz je zapisać w kilku linijkach, ale zrób wówczas konkatenacje kolejnych stringów w kolejnych liniach.

(Bellzebub) #9

(Grzelix) #10

chyba się nie zrozumieliśmy:

1 linijka:

$query = "SELECT nr FROM users WHERE login = '".$_POST['login']."' AND  haslo = '".$_POST['haslo']."' "; [/code]

Wiele linii (prawdopodobnie rzuci błędem):

[code=php]
=“SELECT nr FROM users
.$_POST[‘login’].”’ 
.$_POST[‘haslo’]."’ "; 

Wiele liniii (poprawniej niż przedtem):

="SELECT nr FROM users"." WHERE login = '".$_POST['login']."' AND haslo = '".$_POST['haslo']."' ";[/code]

(GioWDS) #11

Lepiej klepnąć (porównaj czas wykonywania):

$queryStr = 'SELECT `nr` FROM `users` WHERE `login` = \''.mysql_real_escape_string($_POST['login']).'\' AND `haslo`= \''.mysql_real_escape_string($_POST['haslo']).'\' LIMIT 1';

Jeszcze lepiej użyć sprintf(czytelniej to wygląda):

$queryStr = sprintf('SELECT `nr` FROM `users` WHERE `login` = \'%s\' AND `haslo` = \'%s\' LIMIT 1', mysql_real_escape_string($_POST['login']), mysql_real_escape_string($_POST['haslo']));

A dużo lepiej skorzystać z PDO, ale to grubsza modyfikacja. Dalej jeśli nadal chcesz korzystać z mysql_* to:

if ($query = mysql_query($queryStr)){

  if (mysql_num_rows($query) > 0)

    echo 'Dane pasują';

  else

    echo 'Dane nie pasują';

}

else die('Pokaż błąd');