2012-09-12 27 views
5

Escribo un sistema de orden simple donde varios números (rellenos dentro de un formulario) se escriben en otro archivo .php (también puede ser .html), usando la función fopen. Esto funciona bien, pero después de escribir en el archivo, quiero que el navegador realmente abra ese archivo escrito, preferiblemente en una nueva ventana del navegador . De esta forma mi cliente puede usar esto para imprimir, usar como una factura, etc.Abrir un archivo en una nueva ventana del navegador después de haberlo escrito (con fopen)

Ahora sigo siendo novato en php y no tengo experiencia con el uso de fopen. Pero en todas partes busco tutoriales, etc., se dice que fopen abre (o escribe, por supuesto) un archivo, pero no por lo que he experimentado. Simplemente parece permitir el acceso al archivo especificado para escribir y leer, en lugar de mostrar realmente la página recién escrita.

Para evitar cualquier confusión: NO quiero abrir enlaces como otras preguntas aquí en el estado SO.

mi código:

<form action="" method="post"> 
    <input type="text" id="amountTuna" name="numberTuna" value="0"/> 
    <input type="text" id="amountCheese" name="numberCheese" value="0"/> 
    <input name="send" id="send" type="submit" value="Post order" /> 
</form> 

<?php 
if (array_key_exists('send', $_POST)) { 
    $order = "order.php"; 
    $fh = fopen($order, 'w') or die("can't open file");//file handler 

    fwrite($fh, "Tuna sandwiches: " . stripslashes($_POST['numberTuna'])); 
    fwrite($fh, "Cheese sandwiches: " . stripslashes($_POST['numberCheese'])); 

    $fh = fopen($factuur, 'r'); 
    $fileip = fread($fh, filesize($factuur)); 
    fclose($fh); 
} 
?> 

Tratando diferentes parámetros tales como fopen'w', 'r', etc 'r+' no parece hacer ninguna diferencia. Eliminar fclose($fh) tampoco parece marcar la diferencia.

+0

Esto parece una extraña manera de registrar una orden - ¿ha considerado usando un DB para almacenar pedidos en? esto haría las cosas mucho más fáciles de grabar/mostrar y buscar por nombrar algunas ventajas – ManseUK

+0

¿Por qué quieres escribir en un archivo PHP? – Baba

+0

@ManseUK Bueno, sí, podría considerar hacerlo más tarde. Pero para ser específico, no es un sistema de orden de una tienda en línea, en cambio el dueño de la tienda solo llena los números de los sándwiches ordenados y lo quiere en una página para entregárselo al repartidor, y/o quizás usarlo como una factura para su cliente El 'cliente' es realmente un amigo mío, así que lo estamos haciendo paso a paso :). ¡Gracias por el consejo! – poepje

Respuesta

5

Utilice la secuencia de comandos JS para abrir una nueva ventana. Por ejemplo justo después de fclose($fh):

echo "<script>window.open($order, '_blank'); window.focus();</script>"; 
+0

Gracias, pero parece que no funciona de esa manera. Tampoco si lo hago como 'echo '"; ' – poepje

+0

pero se abre la ventana? si es así, simplemente verifique la ruta e inserte la correcta. – StasGrin

+0

No se abre ninguna ventana, y el archivo order.php ('$ order') está en la misma carpeta. PD. cambiar '

2

Guardar cosas en una base de datos probablemente sería mucho más fácil.

Dicho esto, usar fopen es abrir el archivo en sí, abrir el archivo escrito en una nueva ventana del navegador requerirá algunos scripts del lado del cliente (es decir, Javascript) para cargar el archivo recién creado.

Google Javascript window.open().

Tom

+0

Gracias, pero en php esto no es posible? Me resulta un poco confuso que 'fopen' realmente no abra el archivo, sino * acceso al archivo * en su lugar. Si estoy entendiendo correctamente – poepje

+0

Lo siento, debería haberlo explicado un poco mejor. Cuando un navegador se conecta a su servidor, cualquier cosa que tenga una extensión .php se procesa como un archivo PHP, todos los resultados se envían como una página HTML simple al navegador web. Debido a esto no puede usar PHP para interactuar con la computadora del cliente. El uso del método fopen() abre el archivo del sistema de archivos para que la aplicación PHP en el servidor pueda leer/escribir/modificar con los indicadores respetados. Espero que sea un poco más claro! –

+0

Quiero decir que cada tutorial, documentación, etc. lo llama 'abrir un archivo' mientras espero que realmente se abra en el navegador, no me refería a tu explicación;) Y ahora lo entiendo, lo conservaré en mente: D – poepje

1

Dado que lo que desea es escribir en una página imprimible .. has necesitado file_put_contents

Ejemplo

if (isset($_POST['send'])) { 
    $file = "test.html"; 
    $data = "Tuna sandwiches: " . stripslashes($_POST['numberTuna']) . "<br>"; 
    $data .= "Cheese sandwiches: " . stripslashes($_POST['numberCheese']) . "<br>"; 
    touch($file); 
    file_put_contents($file, $data); 
} 
+0

¿No es esto más o menos lo mismo que lo que hice con fopen? – poepje

+0

Gran diferencia 'file_put_contents' =' fopen + fwrite + fclose' – Baba

+0

Oh, ¿realmente es un atajo? Lo recordaré por piezas de código más grandes :) – poepje

Cuestiones relacionadas