2010-06-25 22 views
5

Mam mały problem. Uzyskuję dostęp do strony przez foro.php? Id = 74 & mode = add lub foro.php? Id = 74 & mode = edycja działa dobrze .. Ale kiedy dodaję dwukropek, średnik (; lub :) do foro.php ? id = 74 & mode = dodaj przejdź do opcji edycjiProblem w php jeśli warunek

foro.php? id = 74 & mode = add; ?
foro.php id = 74 & mode = dodać:
foro.php id = 74 & mode = dodatek”

Poniżej jest mój kod

<?php 
$numb=mysql_real_escape_string($_GET['id']); 

    if ($_GET['mode']=='add') { 

    $sql1="select * from cello where number='".mysql_real_escape_string($numb)."' LIMIT 1"; 
    $result1=mysql_query($sql1) or die(mysql_error()); 
    while ($row=mysql_fetch_array($result1)) { 

     $name=$row['name']; 
     echo $name; 
    } 
    } 


elseif ($_GET['mode']='edit') { 

$sql="select * from cello account_number='".mysql_real_escape_string($numb)."' limit 1"; 
$result=mysql_query($sql) or die(mysql_error()); 

    while ($row=mysql_fetch_array($result)) { 

$acnumb=$row['number']; 
$name=$row['name']; 
$address=$row['address']; 

echo $acnumb; 
echo $name; 
echo $address; 

    } 
    } 
else {echo "error!!";} 
    ?> 

Każdy sposób, jak temu zapobiec? ?

Odpowiedz

8

Użyłeś operatora przypisania = zamiast operatora równości ==.

Spróbuj zmieniając w ten sposób:

elseif ($_GET['mode']='edit') { 

do tego:

elseif ($_GET['mode']=='edit') { 
+0

Dzięki .. to działało dobrze – LiveEn

5

Problem polega na tym, że w kolejnych wierszach, w if, nie porównują, ale przypisanie wartości do Element mode w tablicy GET:

... 
elseif ($_GET['mode']='edit') { 

$sql="select * from cello account_number='".mysql_real_escape_string($numb)."' limit 1"; 
$result=mysql_query($sql) or die(mysql_error()); 
... 

Ta operacja zwraca wartość true, pierwsze porównanie to false, i dlatego przechodzi do sekcji edycji.

5

Rozwiązanie:

Problem na pewno leży po stronie linii elseif ($_GET['mode']='edit') {; operator = ustawia tam $_GET['mode'] na 'edit' (który zawsze jest oceniany jako true). Dobry ale leksykalnie-mylące praktyka, aby dostać się pisze warunkowe tak:

if (5 == $some_var) 

Który natychmiast dać błąd, jeśli drugi = nie została uwzględniona.

Sugestia:

Możesz wdrożyć kontrolę switch zorganizować swój kod:

<?php 
switch ($_GET['mode']) { 
    case 'add': 

     $sql1="select * from cello where number='".mysql_real_escape_string($numb)."' LIMIT 1"; 
     $result1=mysql_query($sql1) or die(mysql_error()); 
     while ($row=mysql_fetch_array($result1)) { 

      $name=$row['name']; 
      echo $name; 
     } 

     break; 

    case 'edit': 
     $sql="select * from cello account_number='".mysql_real_escape_string($numb)."' limit 1"; 
     $result=mysql_query($sql) or die(mysql_error()); 

     while ($row=mysql_fetch_array($result)) { 

      $acnumb=$row['number']; 
      $name=$row['name']; 
      $address=$row['address']; 

      echo $acnumb; 
      echo $name; 
      echo $address; 

     } 

     break; 

    default: 
     echo "error!!"; 
} 
+0

Dzięki za sugestię .. I nie myśleć to wcześniej – LiveEn

Powiązane problemy