[PHP] Rindirizzamento alla homepage

  • Creatore Discussione Creatore Discussione Benix89
  • Data di inizio Data di inizio

Benix89

Nuovo Utente
26 Gen 2016
28
0
1
35
Salve,
sto creando un metodo di pagamento basato su domande/risposte in cui la risposta corretta ad una domanda random fra un pool di domande predefinite vale come pagamento.

Vorrei che se l'utente da la risposta sbagliata, dopo la comparsa del messaggio "risposta sbagliata!", venisse "reindirizzato" nella homepage.

Questo è il codice che convalida la risposta se giusta e sbagliata.

PHP:
public function validate()
{
  foreach (Mage::getModel('emme_question/question')->load(1)->getSelectedAnswersCollection() as $answer)
  {
    if ($answer->getIsCorrect())
    {
        if ($answer->getId() == $_POST['my_custom_answer'])
        {
               Mage::getSingleton('core/session')->addSuccess('Risposta esatta');
          } else
            {
                    Mage::throwException('Risposta sbagliata!');
              }
    }  
  }
}

Come posso fare?
 
Ultima modifica di un moderatore:
ciao
se non fosse che stai usando la programmazione ad oggetti (che io evito come la peste) ti risponderei sempilemente, con un if
PHP:
<?php
//....
if($risposta=="Risposta sbagliata!"){
    echo "<meta http-equiv='Refresh' content='3; URL=pagina_che_ti_pare.php'>";
}
//....
?>
 
Come consigliato, ho usato per il reindirizzamento il codice

Codice:
echo "<meta http-equiv='Refresh' content='3'; URL='http://demo.mmstore.net/index.php/'>";'

Ma purtroppo non ha dato il risultato sperato.

Ho provato anche con il

Codice:
header(location: '/index.php/');

Ma nulla. Altri consigli?
 
ciao
ti posto tre esempi, però attento a header, se la usi non devi avere prima alcun output html o devi modificare l'output con ob_start() e ob_end_flush()
PHP:
<?php
header('Location: http://www.tuo_sito.com/');//o header('Location: index.php')
?>
PHP:
<?php
header( "refresh:3;url=index.php" );
?>
PHP:
<?php
//...
?>
<script language="JavaScript" type="text/javascript">
<!-- 
window.setTimeout ("location.href=('index.php')", 3000);
-->
</script>
<?php
//...
?>
 
PHP:
<?php
header('Location: http://www.tuo_sito.com/');//o header('Location: index.php')
?>

Questa soluzione l'avevo provata in precedenza. Se leggi su nei messaggi l'avevo scritto.

PHP:
<?php
header( "refresh:3;url=index.php" );
?>

Provata ma, purtroppo, senza successo.

PHP:
<?php
//...
?>
<script language="JavaScript" type="text/javascript">
<!--
window.setTimeout ("location.href=('index.php')", 3000);
-->
</script>
<?php
//...
?>

Mi da quest'errore

Parse error: syntax error, unexpected '<'
 
ciao
sei sicuro di averlo scritto giusto? funziona perfettamente
poi io generalmente uso header( "refresh:3;url=index.php" ); però attento se hai output html anche uno spazio prima del tag <?php è un out analogo se prima hai un echo o print
 
Ti scrivo tutto il codice:


Codice:
<?php
// app/code/local/Envato/Custompaymentmethod/Model/Paymentmethod.php
class Envato_Custompaymentmethod_Model_Paymentmethod extends Mage_Payment_Model_Method_Abstract {
  protected $_code  = 'custompaymentmethod';
  protected $_formBlockType = 'custompaymentmethod/form_custompaymentmethod';
  protected $_infoBlockType = 'custompaymentmethod/info_custompaymentmethod';

public function validate()
{
  foreach (Mage::getModel('emme_question/question')->load(1)->getSelectedAnswersCollection() as $answer)
  {
    if ($answer->getIsCorrect())
    {
        if ($answer->getId() == $_POST['my_custom_answer'])
        {
               Mage::getSingleton('core/session')->addSuccess('Risposta esatta');
          } else
            {
                    Mage::throwException('Risposta sbagliata!');
                    header('refresh:3;url=index.php');
              }
     }     
   }
}


  public function getOrderPlaceRedirectUrl()
  {
    return Mage::getUrl('custompaymentmethod/payment/redirect', array('_secure' => false));
  }
}

Così?
 
ciao
dipende, se ad esempio hai
PHP:
<?php
echo "pinco";
//e qui usi la tua classe
?>
ti da errore in caso di risposta sbagliata in quanto l'heder viene dopo un out html l'eco e basta uno spazio fuori dai tag php, per quello sarebbe meglio usare un js
come ti ho detto non uso la programmazione ad oggetti e quindi non so se puoi fare una cosa del genere
PHP:
<?php
//....
public function validate()
{
  foreach (Mage::getModel('emme_question/question')->load(1)->getSelectedAnswersCollection() as $answer)
  {
  //....
  } else
            {
                    Mage::throwException('Risposta sbagliata!');
?>
<script language="JavaScript" type="text/javascript">
<!--
window.setTimeout ("location.href=('index.php')", 3000);
-->
</script>
<?php
              }
//....
?>
se non puoi forse ti conviene provare a mettere tutto il js in forma php
PHP:
<?php
//....
public function validate()
{
  foreach (Mage::getModel('emme_question/question')->load(1)->getSelectedAnswersCollection() as $answer)
  {
  //....
  } else
            {
                    Mage::throwException('Risposta sbagliata!');
                    echo "<script language='JavaScript' type='text/javascript'>";
                    echo "window.setTimeout (\"location.href=('index.php')\", 3000);";
                    echo "</script>";
              }
//....
?>
 
Grazie Borgo per l'aiuto e sopratutto per la pazienza.

Ho testato entrambi i codici, ma purtroppo senza successo.

Errore.jpg


Come vedi dall'immagine: io do la risposta sbagliata, compare il messaggio, clicco OK ma dopo non vengo reindirizzato alla Home Page.
 
ciao
a parte che è giusto milano, il 90% delle opere del louvre sono italiane, si sicuro che entri dentro quell'else?
metti, non so, un echo o un var_dump qualcosa per verificare, se sbagli dovrebbe risultare da qualche parte
dimenticavo, non so cosa hai messi, ma se hai messo il js tramite mostra sorgente dovresti vedere il js scritto
 
ciao
a parte che è giusto milano, il 90% delle opere del louvre sono italiane,

:p

si sicuro che entri dentro quell'else?

Compare (vedi immagine) il messaggio di errore: "Risposta sbagliata!" quindi queto non è una dimostrazione che entra nell'else?

metti, non so, un echo o un var_dump qualcosa per verificare, se sbagli dovrebbe risultare da qualche parte
dimenticavo, non so cosa hai messi, ma se hai messo il js tramite mostra sorgente dovresti vedere il js scritto

Non ho capito bene. Vuoi che sotto il Mage::throwException('Risposta sbagliata!'); metto un echo "ciao"?
 
ciao
non l'avevo visto quindi sembrerebbe che entri nell'else, comunque si prova a mettere un echo "ciao", forse meglio appena prima dell'istruzione di risposta sbagliata.
mi sorge però un dubbio guardando la finestra con quello che c'è scritto, sembrerebbe una finestra di popup generata a sua volta da un js e che nel caso la risposta sia sbagliata le istruzioni dopo Mage::throwException('Risposta sbagliata!'); non vengano eseguite, per verificare metti un echo "ciao prima" e uno echo "ciao dopo"
 
Hai ragione.
Tutto quello che faccio dopo Mage::throwException non verrà eseguito perchè l'eccezione interrompe il normale flusso del codice.
Inoltre, siccome la validazione parte da una chiamata AJAX nel checkout, non posso semplicemente fare l'echo di html o javascript, ma devo gestire il redirect direttamente lato client.

Dovrei riadattare questa parte del codice (dello script skin/frontend/base/default/js/opcheckout.js a partire dalla riga 875) in modo che oltre al semplice alert faccia anche il redirect.

Ti posto il codice:

Codice:
       /*
         * if there is an error in payment, need to show error message
         */
        if (response.error) {
            if (response.fields) {
                var fields = response.fields.split(',');
                for (var i=0;i<fields.length;i++) {
                    var field = null;
                    if (field = $(fields[i])) {
                        Validation.ajaxError(field, response.error);
                    }
                }
                return;
            }
            if (typeof(response.message) == 'string') {
                alert(response.message);
            } else {
                alert(response.error);
            }
            return;
        }

        checkout.setStepResponse(response);

        //checkout.setPayment();
    },

    initWhatIsCvvListeners: function(){
        $$('.cvv-what-is-this').each(function(element){
            Event.observe(element, 'click', toggleToolTip);
        });
    }
}

var Review = Class.create();
Review.prototype = {
    initialize: function(saveUrl, successUrl, agreementsForm){
        this.saveUrl = saveUrl;
        this.successUrl = successUrl;
        this.agreementsForm = agreementsForm;
        this.onSave = this.nextStep.bindAsEventListener(this);
        this.onComplete = this.resetLoadWaiting.bindAsEventListener(this);
    },

    save: function(){
        if (checkout.loadWaiting!=false) return;
        checkout.setLoadWaiting('review');
        var params = Form.serialize(payment.form);
        if (this.agreementsForm) {
            params += '&'+Form.serialize(this.agreementsForm);
        }
        params.save = true;
        var request = new Ajax.Request(
            this.saveUrl,
            {
                method:'post',
                parameters:params,
                onComplete: this.onComplete,
                onSuccess: this.onSave,
                onFailure: checkout.ajaxFailure.bind(checkout)
            }
        );
    },

    resetLoadWaiting: function(transport){
        checkout.setLoadWaiting(false, this.isSuccess);
    },

    nextStep: function(transport){
        if (transport && transport.responseText) {
            try{
                response = eval('(' + transport.responseText + ')');
            }
            catch (e) {
                response = {};
            }
            if (response.redirect) {
                this.isSuccess = true;
                location.href = response.redirect;
                return;
            }
            if (response.success) {
                this.isSuccess = true;
                window.location=this.successUrl;
            }
            else{
                var msg = response.error_messages;
                if (typeof(msg)=='object') {
                    msg = msg.join("\n");
                }
                if (msg) {
                    alert(msg);
                }
            }

            if (response.update_section) {
                $('checkout-'+response.update_section.name+'-load').update(response.update_section.html);
            }

            if (response.goto_section) {
                checkout.gotoSection(response.goto_section, true);
            }
        }
    },

    isSuccess: false
}

Sai darmi qualche dritta?
 
Grazie Borgo, troppo gentile. :oops:
Magari, se necessario, creo una nuova discussione nella sezione specifica (se c'è :D)
 
Ciao Borgo, poi ho risolto solo :D

Bastava inserire un window.location = 'http://demo.mmstore.net/index.php/'; dopo l'allert dell'errore.

Codice:
        if (response.error) {
            if (response.fields) {
                var fields = response.fields.split(',');
                for (var i=0;i<fields.length;i++) {
                    var field = null;
                    if (field = $(fields[i])) {
                        Validation.ajaxError(field, response.error);
                    }
                }
                return;
            }
            if (typeof(response.message) == 'string') {
                alert(response.message);
            } else {
                alert(response.error);
        window.location = 'http://demo.mmstore.net/index.php/';
            }
            return;
        }
 

Discussioni simili