2011-06-01 15 views
5

Tengo este código en un foreach que las listas de enlaces uniquecode:dificultad con la acción del formulario y las identificaciones únicas

<a id="<?php echo $id_to ?>" href="<?php echo ADDRESS; ?>messageSent.php?id=<?php echo $id_to ?>" class="charcoal_link" style="line-height: 20px;" onclick="showMessageArea(this); return false;" > 
    <?php echo $uniqueCode1?><span class="pink_text"><?php echo $uniqueCode2?></span><?php echo $uniqueCode3?> 
</a>  
<form id="message_area" style="display:none" method="post" action="<?php echo ADDRESS; ?>messageSent.php?id=<?php echo $id_to ?>">         
    <textarea name="message" rows="10" cols="20"></textarea> 
    <input name="Submit" type="submit" value="Send"></input> 
</form> 

esto es lo que me pasa cuando veo la fuente de la página:

<a href="http://www-rainbowcode-mobi/messageSent.php?id=36" class="charcoal_link" style="line-height: 20px;" onclick="showMessageArea(this); return false;" > 
    KUZELJA<span class="pink_text">000</span>RC 
</a>  
<form id="message_area" style="display:none" method="post" action="http://www-rainbowcode-mobi/messageSent.php?id=36">         
    <textarea name="message" rows="10" cols="20"></textarea> 
    <input name="Submit" type="submit" value="Send"></input> 
</form> 
<a href="http://www-rainbowcode-mobi/messageSent.php?id=38" class="charcoal_link" style="line-height: 20px;" onclick="showMessageArea(this); return false;" > 
    ALANZIM<span class="pink_text">000</span>RC 
</a>  
<form id="message_area" style="display:none" method="post" action="http://www-rainbowcode-mobi/messageSent.php?id=38">         
    <textarea name="message" rows="10" cols="20"></textarea> 
    <input name="Submit" type="submit" value="Send"></input> 
</form> 

el problema es cuando la acción se dispara y la página va al mensaje enviado y veo la fuente de la página de nuevo $id_to NO es la identificación del enlace en el que hice clic. Toma el ID del primer enlace, independientemente del enlace en el que hago clic

aquí la fuente de la página messageSent (I hecho clic en el enlace con id 38 NO 36): donde tengo una print_r($_REQUEST) y le da:

Array 
(
    [id] => 36 
    [message] => bj,nbgj, 
    [Submit] => Send 
) 

.

function showMessageArea(link) 
{ 
    var message_area = document.getElementById('message_area'); 
    message_area.parentNode.removeChild(message_area); 
    link.parentNode.insertBefore(message_area, link.nextSibling); 
    message_area.style.display="block"; 
} 
+2

no ver lo que hace el '' showMessageArea (...), pero tengo una sospecha, que se forma con los identificadores únicos (no !!!) puede ser la causa de la forma incorrecta para mostrarse y, de hecho, está enviando otro formulario distinto del deseado – mkilmanas

+0

function showMessageArea (enlace) { var message_area = document.getElementById ('message_area'); message_area.parentNode.removeChild (message_area); link.parentNode.insertBefore (message_area, link.nextSibling); message_area.style.display = "bloque"; } ¿POR QUÉ DEBO HACER ESTO? SOY DESPERTADO :) –

+0

No trabajo con PHP, así que perdónenme si estoy equivocado aquí. ¿Pero no codificaste 36 en esa ID de array que veo arriba? ¿Has pensado en establecer dinámicamente el valor de la ID en esa matriz en lugar de hacerlo en la codificación rígida? Solo un pensamiento. –

Respuesta

2

El problema son los identificadores que no son únicos.

Pruebe anexar $to_id a los ID de formulario, para que sean únicos (por ejemplo, <form id="message_area_<?php echo $to_id; ?>" ...).

Y luego actualizar showMessageArea función para hacer esto:

var message_area = document.getElementById('message_area_'+this.id); 

De esta manera usted estará operando en el elemento de la forma deseada.

Como sugerencia refactorización, se recomienda usar un único formulario en lugar y hacer id parámetro a ser <input type='hidden' name='id' id='message_id' value=''> y establecer su valor desde el showMessageArea(...) así:

document.getElementById('message_id').value = this.id; 
+0

lo tengo me gusta ahora pero ahora no muestra mi área de mensaje real y botón de enviar? function showMessageArea (enlace) { var message_area = document.getElementById ('message_area _' + this.id); message_area.parentNode.removeChild (message_area); link.parentNode.insertBefore (message_area, link.nextSibling); message_area.style.display = "bloque"; }

+0

showMessageArea (enlace) es JS, solo debo agregar y lo que hace es mostrar mi texto y enviar el botón directamente debajo del enlace en el que hice clic ... –

1

¿No debería tener punto y coma después de las declaraciones de php?

EDIT:

Creo que el problema es que hay dos elementos con el id "message_area", por lo que siempre se refiere a la primera. Intente solo tener un formulario y establezca la acción de ese formulario cuando se haga clic en uno de los enlaces.

+0

Gracias a la alegría de estos errores simples ... La razón por la que nunca usé ningún código que mis maestros me dieron ... Siempre olvidaron un punto y coma o cosas similares ... Eso siempre lleva a una hora de depuración en lugar de estar terminado en 30 minutos – HTDutchy

+0

agregué; ¡en todos lados! pero aún la misma ID de resultado es 36 en messageSent y no 38, que es la identificación del enlace en el que hice clic por favor, ¿alguien puede ayudarme? –

+1

Una única instrucción dentro de las etiquetas php como el eco de arriba funcionará bien sin el punto –

1

No sé si esto lo arreglará porque no puedo ver un problema, pero podría intentar el siguiente código:

<a id="<?php echo $id_to ?>" href="<?php echo ADDRESS; ?>messageSent.php class="charcoal_link" style="line-height: 20px;" onclick="showMessageArea(this); return false;" > 
    <?php echo $uniqueCode1?><span class="pink_text"><?php echo $uniqueCode2?></span><?php echo $uniqueCode3?> 
</a> 
<form id="message_area" style="display:none" method="post" action="<?php echo ADDRESS; ?>messageSent.php?id=<?php echo $id_to ?>"> 
    <textarea name="message" rows="10" cols="20"></textarea> 
    <input type="hidden" name="id" value="<?php echo $id_to ?>" /> 
    <input name="Submit" type="submit" value="Send" /> 
</form> 

Y luego tratar print_r($_POST)

EDIT:

Bien, siguiendo su comentario Helloise, creo que lo siguiente puede funcionar:

<a id="messageid_<?php echo $id_to ?>" href="javascript:void(0);" class="charcoal_link" style="line-height: 20px;" onclick="showMessageArea(this,'<?php echo $id_to ?>'); return false;" > 
    <?php echo $uniqueCode1?><span class="pink_text"><?php echo $uniqueCode2?></span><?php echo $uniqueCode3?> 
</a>  
<form id="message_area" style="display:none" method="post" action="<?php echo ADDRESS; ?>messageSent.php">         
    <textarea name="message" rows="10" cols="20"></textarea> 
    <input name="Submit" type="submit" value="Send" /> 
    <input type="hidden" id="message_id" name="id" value="" /> 
</form> 

<script type="text/javascript"> 
    function showMessageArea(link,messageId) 
    { 
     document.getElementById('message_id').value=messageId; 
     message_area.parentNode.removeChild(message_area); 
     link.parentNode.insertBefore(message_area, link.nextSibling); 
     document.getElementById('message_area').style.display="block"; 
    } 
</script> 

Por lo tanto, aquí el punto principal es tener una forma como usted ha indicado, pero pasar la identificación que estamos utilizando en la función javascript. Desde allí, puede establecer el valor de la entrada oculta que luego se incluirá en los valores POST.

+0

que no funciona ... como dijeron los mkilmanas es porque mi ID de formulario no es única sino cómo conseguirla única. O tiene UNA etiqueta de formulario ... si tengo UNA etiqueta de formulario, ¿dónde la coloco en mi código? Probé en diferentes lugares, pero luego mi página no muestra el simplemente no sé más ... ¡he estado luchando con esto por EDADES! –

+0

@Helloise Smit Por favor, mira mi actualización. Al cambiar la forma en que funciona el javascript, puede tener un formulario que funcione para todos los enlaces –

+0

muchas gracias, también probaré su código :) pero finalmente lo conseguí y obtuve un mensaje único, mostrando así el área de mensaje –

1

intentar algo como esto:

después de hojear rápido ...

  • su falta $ antes ADDRESS . Debe ser $ADDRESS. Supongo que es una variable (ignore esto, se pasa por alto que es solo una constante)
  • falta su punto y coma después de muchas líneas de php.

    <a id="<?php echo $id_to; ?>" 
        href="<?php echo $ADDRESS;?>messageSent.php?id=<?php echo $id_to; ?>" 
        class="charcoal_link" 
        style="line-height: 20px;" 
        onclick="showMessageArea(this); return false;" 
        <?php echo $uniqueCode1;?> 
        <span class="pink_text"> 
         <?php echo $uniqueCode2?> 
        </span> 
        <?php echo $uniqueCode3;?> 
    ></a>  
    
    <form id="message_area" style="display:none" method="post" action="<?php echo $ADDRESS; ?>messageSent.php?id=<?php echo $id_to; ?>">       
        <textarea name="message" rows="10" cols="20"></textarea> 
        <input name="Submit" type="submit" value="Send"></input> 
    </form> 
    
+0

DIRECCIÓN puede ser una definición y probablemente no sea una variable. Semi-colons no son necesarios en este caso. –

+0

Correcto, se pasa por alto que es solo una constante – wired00

Cuestiones relacionadas