2010-05-01 16 views
7

¿Tiene alguna sugerencia con mi problema. Necesito usar get y post al mismo tiempo. Obtener porque necesito mostrar lo que el usuario ha escrito. Y publicar porque necesito acceder a la base de datos mysql en relación con esa entrada. Se ve algo como esto:Publicar y obtener al mismo tiempo en php

<form name="x" method="get" action="x.php"> 
<input name="year" type="text"> 

<select name="general" id="general"> 
     <font size="3"> 
     <option value="YEAR">Year</option> 

</form> 

Esta es la salida del contenido de MySQL en función de lo comprobará el usuario:

<form name="y" method="post" action"y.php"> 
<input name="fname" type="checkbox"> 
</form> 

Y la acción forma de los dos combinados se verá algo como esto:

<?php 

       if($_POST['general'] == 'YEAR'){ 
        ?> 
        <?php echo $_GET["year"]; ?> 
        <?php 
      $result2 = mysql_query("SELECT * FROM student 
    WHERE student.YEAR='$syear'"); 
    ?> 
    <table border='1'> 
      <tr> 

        <?php if ($ShowLastName) { ?><th>LASTNAME</th><?php } ?> 
        <?php if ($ShowFirstName) { ?><th>FIRSTNAME</th><?php } ?> 
     </tr> 

    <?php while ($row = mysql_fetch_array($result2)) { 
     if (!$result2) { 

    } 
     ?> 
      <tr> 
        <td><?php echo $row['IDNO']?> </td> 
        <td><?php echo $row['YEAR'] ?> </td> 
    <?php if ($ShowLastName) { echo('<td>'.$row['LASTNAME'].'</td>'); } ?></td> 
        <?php if ($ShowFirstName) { echo('<td>'.$row['FIRSTNAME'].'</td>'); } ?> 

Realmente consigo muchos errores indefinidos cuando hago esto. ¿Qué puede recomendar que debería hacer para obtener el valor ingresado por el usuario junto con los datos de mysql?

+0

¿Por qué, exactamente, necesitas usar tanto '$ _GET' como' $ _POST' simultáneamente? Las razones que has dado hasta ahora no tienen sentido. – outis

+0

en realidad es solo mi idea. Me pregunto cuáles son las alternativas para lograr lo mismo – user225269

+0

podría finalmente revisar las respuestas a esta y sus preguntas anteriores y aceptar las más útiles o editar sus preguntas para señalar por qué ninguna de las respuestas resuelve su pregunta. Gracias. – Gordon

Respuesta

45

Solo puede tener un verb (POST, GET, PUT, ...) al hacer un HTTP Request. Sin embargo, se puede hacer

<form name="y" method="post" action="y.php?foo=bar"> 

y luego PHP rellenará $_GET['foo'] así, a pesar de la solicitud enviada era POST'ed.

Sin embargo, su problema parece ser mucho más que lo que intenta send two forms at once, dirigido a dos scripts diferentes. Eso es imposible dentro de una Solicitud.

+0

Tal vez con algo de JavaScript podamos modificar la acción antes de enviarla. Hombre, estaba buscando esto, gracias! – dpp

+0

¿Es esta una buena práctica? Estaba pensando en hacer esto para una API REST de servicio web, para enviar el nombre del método por '' $ _GET'' y parámetros de métodos específicos como '' $ _POST'' pero quería saber si hay alguna recomendación sobre cómo hacer esto –

+0

@ JuanCarlosAlpizarChinchilla no está seguro de lo que quiere decir con "enviar el nombre del método". La API REST generalmente no envía nombres de métodos. No estoy al tanto de una recomendación a favor o en contra de la técnica anterior más allá de lo que se da en el enlace sobre verbos ya. – Gordon

4

No puede hacer un GET y POST al mismo tiempo.

Combina las dos formas en una sola.

Por ejemplo, combine los formularios en un formulario de 'publicación'. En tu código, extrae lo que necesites de $ _POST.

Y 'AÑO' no es igual a 'Año', su código de muestra también necesita trabajo.

3

Como saig por las otras respuestas, no puede hacer una solicitud de obtención y publicación al mismo tiempo. Pero si desea unificar su código PHP para leer una variable recibida a través de una solicitud get o post, quizás podría usar $_REQUEST

3

POST y GET (como HEAD, FILE, DELETE etc.) son HTTP methods. Su navegador envía una petición HTTP al servidor con uno de ellos frente al pedido, por lo que no se puede enviado dos métodos al mismo tiempo (un ejemplo de la cabecera de la solicitud de un sniffer web):

GET/HTTP/1.1[CRLF] 
Host: web-sniffer.net[CRLF] 
Connection: close[CRLF] 
User-Agent: Web-sniffer/1.0.31 (+http://web-sniffer.net/)[CRLF] 
Accept-Encoding: gzip[CRLF] 
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7[CRLF] 
Cache-Control: no[CRLF] 
Accept-Language: de,en;q=0.7,en-us;q=0.3[CRLF] 
Referer: http://web-sniffer.net/[CRLF] 

La gran diferencia de GET y POST es que OBTENER una respuesta de un url y POST enviar también algunos datos de contenido a esa url. Cuando envía su formulario, los datos se recopilan en un formato estándar definido por el atributo enctype y se envían, también esta vez, a una url.

También la url está formateada de forma estándar y la parte de cadena que se encuentra detrás de ? El carácter se llama CUERY STRING.

Cuando el servidor recibe datos, comunica estas informaciones a PHP que lee la URL y lee el método, el cuerpo (datos) de la solicitud y una gran cantidad de otras cosas. Finalmente, llena sus matrices superglobales con estos datos para hacerle saber lo que el usuario envía ($_SERVER, $_GET y $_POST y un montón de otros);

¡Aviso importante! También si PHP completa $ _GET superglobal con la cadena de consulta de la URL y, finalmente, el $ _POST superglobal con los datos encontrados en el cuerpo de la solicitud, $ _POST y $ _GET no están relacionados con HTTP.

lo tanto, si usted quiere llenar $ _POST y $ _GET en el mismo tiempo debe enviar su formulario de esta manera:

<form method="post" action="http://myurl/index.php?mygetvar=1&mygetvar=2"> 
    <input name="year" type="text" /> 
    <imput type="submit" /> 
</form> 
2

no he probado esto, pero es una solución posible para enviar variables GET a través valor de acción de una forma ...

$request_uri = $_SERVER['REQUEST_URI']; 
$request_uri = str_replace("&", "?", $request_uri); 
$request_args = explode("?", $request_uri); 
foreach($request_args as $key => $val) { 
    if(strpos($val, "=") > 0) { 
     $nvp_temp = explode("=", $val); 
     $_GET[$nvp_temp[0]] = $nvp_temp[1]; 
    } 
} 

no es engañar completamente a prueba, pero me encontré con un problema con un header ("Location:") fallo anterior que incluyen variables GET no bein g visto por el servidor en $ _GET con una URL como http://website.com/page?msg=0 pero existían en la variable $ _SERVER ['REQUEST_URI']. Espero que esto ayude y buena suerte!

Cuestiones relacionadas