2010-06-25 16 views
5

Tengo un pequeño problema. Accedo al sitio a través de foro.php? Id = 74 & modo = agregar o foro.php? Id = 74 & modo = editar funciona bien ... Pero cuando agrego dos puntos, punto y coma (; o :) a foro.php ? id = 74 & modo = agregar va a la opción de ediciónProblema en una condición php if

foro.php? id = 74 & modo = agregar; ?
foro.php id = 74 = & modo de añadir:?
foro.php id = 74 = & modo de añadir'

A continuación se muestra el código

<?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!!";} 
    ?> 

cualquier manera cómo prevenirla ?

Respuesta

8

Ha utilizado el operador de asignación = en lugar del operador de igualdad ==.

trate de cambiar esto:

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

a esto:

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

Gracias .. funcionó bien – LiveEn

5

El problema es que en las siguientes líneas, en la sentencia if, no se está comparando, pero la asignación de un valor a la elemento de modo en la matriz 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()); 
... 

Esa operación devuelve verdadero, la primera comparación es falso, y es por eso que va en la sección de edición.

5

Solución:

El problema radica, sin duda con la línea elseif ($_GET['mode']='edit') {; el operador = establece $_GET['mode'] en 'edit' (que siempre se evalúa como true). Una práctica buena, pero léxico-confuso para entrar en los condicionales está escribiendo así:

if (5 == $some_var) 

lo que le dará inmediatamente un error si la segunda = no se incluyó.

Sugerencia:

Es posible que desee implementar un control switch de organizar el código:

<?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

Gracias por la sugerencia .. No pensé de antes – LiveEn

Cuestiones relacionadas