2009-08-03 26 views
10

Si tuviera algo como esto:

?FormSub=Submit&qty=1&partno=ipod&notes=apple&unitprice=102.99&rowid=1&qty=2&partno=Ear+Buds&notes=Headphones&unitprice=45.99&rowid=2 

¿Es posible bucle a través del GET de devolver los resultados en una tabla HTML y también añadir a una tabla de SQL?

O habría que tenga que añadir el rowid a continuación, final de cada $_GET (es decir qty1=1&partno1=ipod ...)?

Gracias por mirar.

+1

desinfectar la entrada del usuario antes de hacer nada con ellos – ardsrk

+18

Nadie olvida mesitas Bobby ... – Skilldrick

+6

@Skilldrick: vínculo obligatorio a las Tablas pequeño Bobby cómica: http://xkcd.com/327/ – Dinah

Respuesta

36

Sin embargo, puede recorrer $_GET. Es sólo una matriz:

foreach ($_GET as $key => $value) { } 

Cuando se opta por hacer sus consultas SQL, recuerde que debe desinfectar todas sus entradas. Del mismo modo para mostrar valores en la página. Use htmlentities para desinfectar para la visualización de HTML. Suponiendo que su base de datos es MySQL, use mysql_real_escape_string para SQL.

+0

[Algunos dicen] (https://stackoverflow.com/questions/46483/htmlentities-vs-htmlspecialchars) que 'htmlspecialchars' es mejor que' htmlentities', la elección para el lector. – reallynice

6

$ _GET es una matriz .. lo que sólo puede iterar sobre ella usando foreach

foreach($_GET as $query_string_variable => $value) { 
    echo "$query_string_variable = $value <Br />"; 
} 

también se puede hacer extract($_GET) a hacer que todos ellos tan variables .. pero no voy a sugerirlo.

Si desea guardarlo en db, debe considerar mysql_real_escape_string($value).

Para imprimir una tabla HTML ... ¿quieres algo como esto?

$count = count($_GET); 
if($count > 0) { 
    echo "<table>"; 
    foreach($_GET as $query_string_variable => $value) { 
     echo "<tr><td>$query_string_variable</td><td>$value</td></tr>" 
    } 
    echo "</table>"; 
} 

Espero que esto ayude.

+1

+1, pero '$ query_string_variable' es un poco largo y difícil de manejar. Algo como '$ key' o' $ param' es mucho más fácil de leer. – DisgruntledGoat

1

Véase el FAQ How do I create arrays in a HTML <form>?

Así, en su caso, una petición de:

?FormSub=Submit&qty[]=1&partno[]=ipod&notes[]=apple&unitprice[]=102.99&rowid[]=1&qty[]=2&partno[]=Ear+Buds&notes[]=Headphones&unitprice[]=45.99&rowid[]=2 

crearía una matriz de la forma:

array(
    'FormSub' => 'Submit', 
    'qty' => array(
     0 => '1', 
     1 => '2' 
    ), 
    'partno' => array(
     0 => 'ipod', 
     1 => 'Ear Buds' 
    ), 
    'notes' => array(
     0 => 'apple', 
     1 => 'Headphones' 
    ), 
    'unitprice' => array(
     0 => '102.99', 
     1 => '45.99' 
    ), 
    'rowid' => array(
     0 => '1', 
     1 => '2' 
    ) 
) 

pero espero que no acepta los valores sin validación o incluso usarlo para un orden real.

Además GET is intended to be used for data retrieval only:

En particular, la Convención se ha establecido que los métodos GET y cabeza no debe tener la importancia de tomar una acción que no sea la recuperación.

Para las solicitudes con efectos secundarios (alteración de los datos en el servidor) debe utilizar POST.

6

¡cuidado! alguien podría fácilmente alterar esto y presentar:

?FormSub=Submit&qty=1&partno=ipod&notes=apple&unitprice=0.99&rowid=1&qty=2&partno=Ear+Buds&notes=Headphones&unitprice=0.05&rowid=2 

nota: "preciounitario" era 102.99 y 45.99, pero se han cambiado a 0,99 y 0,05, supongo que están a la venta a un precio increíble!

+1

¡Buena llamada! Amazon una vez tuvo un agujero en su código que no era mucho más avanzado que este. De hecho, hubo algunas personas que obtuvieron algunos artículos a un precio excelente. – Dinah

+0

Sí, gracias por su preocupación - este es un sistema de cotización intencional ... no para Joe Public ..... –

+1

@Bifter, incluso si esto es para uso "interno", todavía no es una muy buena manera de hacerlo –

Cuestiones relacionadas