Problemas con app web en php

Buenas a todos! Estoy realizando una app web sencilla en PHP y necesito algo de ayuda!

- Tengo un menú horizontal que se queda gijado arriba, es dinamico y tiene varias paginas a modo de enlace.

Añadi este script para que cada vez que pulsara un enlace del menu me llevara a la pagina y esta pagina se cargara en su interor en la parte que fijamos de "contenido"


<script type="text/javascript">
$(document).ready(function() {
var url = 'http://localhost/perfum/';
$('#menu li a').click(function(e) {
e.preventDefault(); // Previene la acción por defecto, que sería enviarte a otra página
var href = url + $(this).attr('href'); // Esta línea extrae el contenido del atributo href del enlace clickeado
$('#contenido').empty(); // Limpia el div 'contenido'
$('#contenido').load(href); // Esta línea simplemente carga el contenido dentro del div 'contenido'
});
});
</script>


Problema: El caso es que cuando ya he cargado una pagina(pulsando un link del menu) como contenido, si esta tiene un formulario o cualquier cosa al pulsar botón validar, ya no me coge las propiedades del marco principal... y no se si la solución pasa por copiar el menú en dichas paginas...

Un saludo y gracias por leerme. Jordi
Hola:

Primero que nada, esa no es una buena solución si no quieres repetir todo muchas veces porque no es compatible con los buscadores, vale decir, el buscador (Google, por ejemplo) podrá encontrar tu página principal (perfum), pero no encontrará el resto del contenido. Para que lo encuentre, tendrías que utilizar el evento hashchange (http://blog.openalfa.com/como-hacer-que-las-aplicaciones-ajax-se-in…).

Segundo, no funciona porque los formularios deben ser enviados con el evento submit:

$(document).on('submit', 'form', function(e) {
  e.preventDefault();
  $.ajax({
    // Envías los datos DESPUÉS de validarlos
  });
});

Ya que estás utilizando PHP, lo mejor es crear plantillas:

template.php
<?php
  function head() {
    // Aquí pones el HTML que irá en el head
  }

  function menu() {
    // Aquí el HTML que irá en la navegación
  }

  function footer() {
    // Aquí lo que irá en el pié de página
  }
?>

Luego lo utilizas así:

index.php
<!DOCTYPE html>
<html>
  <head>
<?php
  include "template.php";
  echo head();
?>
  </head>
  <body>
    <header>
      <?php echo menu(); ?>
    </header>
    <h1>Contenido</h1>
    <p>El contenido de tu sitio web...</p>
    <?php echo footer(); ?>
  </body>
</html>

En general, cualquier cosa que sepas que no cambiará, o que cambiará poco, se puede incluir en una función en template.php y luego llamarla.
Buenas, yo los datos los envió desde el form! si abro la pagina directamente funciona bien y hace el insert bien! Probare tu solución a ver que tal! Pues el script de arriba lo saque de Internet y juraría que lo explicabas tu mismo (quizás me equivoque jajaja) ! Ahora mismo estoy haciendo una APP Web que se ejecutara siempre en local, he echo algún form de insertar perfumes y vendedores, no se utilizara para vender online por eso, voy a modificar ahora todo a ver si consigo arreglarlo.

"Entonces el css y demas lo he de añadir a todas las paginas cierto ? "
"Entonces el css y demas lo he de añadir a todas las paginas cierto?"

Si, lamentablemente es así :P.
Bueno he utilizado en el head metido todos los css, así se cargan en todas las paginas! Muy buena solución, muchísimas gracias por todo! tengo más dudas como por ejemplo como ocultar los enlaces que aparecen siempre en barra de direcciones, y otras dudas sobre como hacer facturas y cosas así, primero le pegare un repaso al foro antes de consultar!

Un saludo!
como ocultar los enlaces que aparecen siempre en barra de direcciones

¿Para qué querrías ocultar los enlaces de la barra de direcciones? No se me ocurre un caso donde sea necesario :P.

Pero bueno, suerte y me alegra haberte ayudado.

Saludos!
skaparate escribió:¿Para qué querrías ocultar los enlaces de la barra de direcciones? No se me ocurre un caso donde sea necesario :P.

Pero bueno, suerte y me alegra haberte ayudado.

Saludos!

Sí has sido de mucha ayuda! mira lo que yo me refiero es que es un app web pero que se usa como escritorio ya que no esta online, es solo para gestionar stock, vendedores, y cosas así!

1.Ejemplo como ir a diferentes partes de este foro, pulsar diferentes enlaces pero que no se muestre esto: "http://www.comocreartuweb.com/consultas/showthread.php/57747-Proble…", solo se muestre el dominio, piensa que al pasar los datos con el "get" se pasa toda la información y esteticamente no me gusta.

2. También me gustaría saber una cosa más, tengo un formulario sencillo tiene 1campo seleccionable y 1campo de texto y un boton, al pulsar el boton pues este suma o resta la cantidad de la caja de texto.... esto funciona perfecto al darle va a un php y hace un "update set " , pero me gustaría saber si podria poner un boton con un signo + y al pulsarlo se duplique este formlario y en lugarr de tener 1 fila, hayan 2, y si pulso al + pues 3 filas, así al pulsar el boton actualizo 3 perfumes en lugar de ir de 1 en uno, esto se puede hacer ? es muy complicado ? sin utilizar lo tipico de esconder con java script..

Gracias por tu ayuda!
1.Ejemplo como ir a diferentes partes de este foro, pulsar diferentes enlaces pero que no se muestre esto: "http://www.comocreartuweb.com/consultas/showthread.php/57747-Proble…", solo se muestre el dominio, piensa que al pasar los datos con el "get" se pasa toda la información y esteticamente no me gusta

1.- Ah, en ese caso tendrás que usar mod_rewrite (si usas apache/xampp/wamp como servidor) o UrlRewriter (si usas IIS).

2.- Claro que se puede. Por ejemplo (me voy a saltar partes, tu rellenas):

form.html
<form action="procesar.php" method="post">
  <div class="math">
    <label>Operador
      <select name="operador[]">
        <option value="+">+</option>
        <option value="-">-</option>
      </select>
    </label>
    <label>Valores: <input type="text" name="valores[]" /></label>
  </div>
  <button id="more">Añadir otro</button>
  
</form>
<script>
  jQuery(document).ready(function($) {
    var $html = $('div.math').eq(0);

    $('#more').click(function(e) {
      e.preventDefault();
      $($html).insertBefore($(this));
    }
  });
</script>

procesar.php
<?php
  print_r( $_POST );
  // Suponiendo que se hubieran añadido más de un campo, lo anterior mostraría lo siguiente:
  /*
  array(
    operador => array( 0 => '+', 1 => '-', N => 'etc' ),
    valores => array( 0 => 'valor0', 1 => 'valor1', N => 'etc' )
  );
  */
Ostras me he enfrascado con esto! Y no había leído tu respuesta! he puesto un clone.js que he encontrado por internet! no me convence del todo como queda la estructura pero de momento al menos parece funcional y ya conseguire modificarla, me faltaría que cuando le doy al botón submit, aunque haya metido 2 o 3 lineas solo actualiza la primera y creo que esto puede ser que lo arregle con el ejemplo que has puesto ;) mañana te cuento más! muchísimas gracias por estar siempre prestando ayuda!

Un saludo!

EDITO: Solucionado lo de pasar datos, siguiendo tu idea he realizado esto dentro del php ejemplo:

if($_GET['cantidad'])  
{  

$array=$_GET['cantidad'];  
foreach($array as $cantidad)  
{  
if(strlen($cantidad)>0)
{  
$campo2=$cantidad;
 
if (isset($_GET['compra'])) { //si es una compra haz esto:
if (isset($_GET['venta'])) { //si es una ventahaz esto:
if (isset($_GET['insertar'])) { //si inserto perfume haz esto:
}}}

Y ya me funciona correctamente! Estoy utilizando Xampp ahora buscare un ejemplo de lo que has puesto.

PD: Tengo en la hoja de estilo que todos los <a href> tengan un estilo que se pone en mayus al pasar por encima y demás, en el menú me gusta pero como puedo excluirlo de "1" unicó enlace ???? [:)] Un saludo y gracias otra vez!!!
skaparate escribió:1.- Ah, en ese caso tendrás que usar mod_rewrite (si usas apache/xampp/wamp como servidor) o UrlRewriter (si usas IIS).

Buenas de nuevo! Desde aquello he evolucionado bastante la app! ahora me quedan dos pequeños problemas que los expongo aquí:

1- tengo un formulario con un <option select> y una caja de texto, estos al pulsar + se van agregando en un array, y al pulsar el buton pues envio perfume[] y cantidad[] , todos los campos del form puedo validarlos con javascript, pero aun no he encontrado como validar estos 2 arrays...

2- No consigo hacer funcionar el mod_rewrite y eso que en phpinfo tengo habilitado todo, y he creado un .htaccessm y he intentado realizar alguna prueba lo más sencilla posible tipo:

RewriteEngine on
RewriteRule ^venta/(.+)_([0-9]+)$ actualizar.php?venta=Venta

Como siempre, muchas gracias por leerme!
Hola!

1.- Los datos no deben ser validados en javascript, siempre valida en el servidor (PHP). ¿Que pasa si el usuario deshabilita Javascript?

2.- Aprende cómo funcionan las expresiones regulares :). Cuando yo utilizo una expresión regular, todo lo que esté entre paréntesis se considera un grupo. Se accede a cada grupo utilizando el $ seguido de un número. Por ejemplo, si quisiera leer el grupo 1, entonces la expresión sería: $1. El caracter $ puede ser distinto (por ejemplo, en IIS UrlRewriter se usa {0} en lugar de $0).

La expresión regular ^venta/(.+)_([0-9]+)$ significa:

* Cualquier (URL en este caso) cosa que comience por venta
* Seguida de un slash (/).
* Captura cualquier cosa que aparezca inmediatamente después de un slash y antes de un guión bajo (_) - Grupo 1.
* Captura uno o más números después del guión bajo - Grupo 2.

Lo que hace mod_rewrite es pasar las capturas la parte derecha de la expresión regular, vale decir, a actualizar.php?venta=venta. No sé por qué capturas dos cosas distintas si solo esperas un parámetro.

La siguiente expresión sí debe funcionar:

^venta/(.+)_([0-9]+)$ actualizar.php?venta=$1&otro_parametro=$2

$1 = (.+) - Cualquier cosa
$2 = ([0-9]+) - Solo números

Luego, en actualizar.php, podrías obtener los valores así:

echo $_GET['venta'];
echo $_GET['otro_parametro'];
Buenas! Como siempre muchas gracias por contestestar, queria utilizar javascript por que tengo puesto un jalert modificado para que me de los avisos de si algo esta bien o esta mal, o si falta algo por rellenar!

Del estilo:

function validarForm(formulario) {
if(formulario.referencia.value.length==0) { //comprueba que no esté vacío
formulario.referencia.focus();
jAlert('No has escrito la referencia', 'Pure-Essence');
return false; //devolvemos el foco
}

Ya se que el usuario podria desactivarlo pero es para usar a modo APP en local, no por web, y yo me encargo de mantener este equipo.
El problema es, como valido con php o con jquery o como sea.... esto?

echo '<form name="f1" action="act_perfumes.php" method="GET" id="form1">';
		if (isset($_GET['compra'] )) {
			echo '<br><br><IMG SRC="img\compra.png"><br><br>';
			}
			else if (isset($_GET['venta'])) {
			echo '<br><br><IMG SRC="img\venta.png"><br><br>';
			}
			echo '<p class="clone"><select size="1" name="perfume[]" tabindex="1">';
		echo "$opt"; 
		echo '<input type="text" name="cantidad[]" size= 7 >';
		echo ' ml &nbsp&nbsp&nbsp&nbsp</p>';
                echo '<a href="" class="add" rel=".clone" style="color:red;">Agregar perfume</a></style><br><br>';
		 if (isset($_GET['compra'] )) {
				echo '<input type="submit" value="Insertar ml comprados" name="compra" tabindex="2">';
			}
			else if (isset($_GET['venta'])) {
			echo '<input type="submit" value="Restar ml vendidos" name="venta" tabindex="2">';
			}
echo '</form>';

Este formulario al pulsar en el botón "Agregar perfume" llama a un jquery que me clona estas lineas...
Para manejarlas en el siguiente formulario he utilizado arrays y todo me ha ido perfecto.... solo me queda hacer que se tenga que rellenar tanto el campo como sus clones... y que no puedas seleccionar 2 veces el mismo perfume...

2. Paso venta=venta, porque tambien podria pasar compra, es decir utiliza el mismo php y tiene que preguntar si quiere venta o compra.... he copiado y pegado en mi .htaccess y de momento no he conseguido que funcione... lo peor mañana tengo que presentar lo que tengo de app echo...


Como siempre muchisimas gracias por darme luz y tanta ayuda!
1.Bueno ya he podido solventar a medias lo de los enlaces, me funciona pero cuando paso parámetros de venta que son muchos, la cosa se complica... aun así menos el de venta ya están todos cambiados, gracias a tu explicación!

2. para comparar los 2 campos del array he usado este script:

$( document ).ready(function() {

	 $( "#form1" ).submit(function( event ) {

	  var invalid = 0;

		$("input[name^=cantidad]").each(function() {

		  if(this.value=="") {

			invalid++;

		  }

		});

		if(invalid > 0) {

			jAlert('No has escrito la cantidad', 'Pure-Essence');

			event.preventDefault();

		} 

	});

});

Ahora me gustaría poder comprar cada perfume que selecciono y que no se puede seleccionar 2 veces el mismo perfume! Un saludo! y muchas gracias por todo!
Ahora me gustaría poder comprar cada perfume que selecciono y que no se puede seleccionar 2 veces el mismo perfume! Un saludo! y muchas gracias por todo!

Podrías usar un botón para modificar la cantidad en lugar de seleccionarlo o no te sirve?
skaparate escribió:Podrías usar un botón para modificar la cantidad en lugar de seleccionarlo o no te sirve?

Buenas skaparate! pues no podría ya que realmente el usuario tiene que vender a un vendedor unos 5perfumes con diferentes cantidad. Así que agrega perfumes hasta 5 clones y despues lo envia:

Ejemplo

PERFUME 1 CANTIDAD1
PERFUME 2 CANTIDAD2
PERFUME 3 CANTIDAD3

BOTONVENTA

el caso es comprobar que Perfume1 no esta repetido con perfume3 por ejemplo!


Un saludo y muchísimas gracias!