[PHP] Rindirizzamento alla homepage

Benix89

Nuovo Utente
26 Gen 2016
28
0
1
31
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:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
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'>";
}
//....
?>
 

Benix89

Nuovo Utente
26 Gen 2016
28
0
1
31
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?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
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
//...
?>
 

Benix89

Nuovo Utente
26 Gen 2016
28
0
1
31
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 '<'
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
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
 

Benix89

Nuovo Utente
26 Gen 2016
28
0
1
31
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ì?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
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>";
              }
//....
?>
 

Benix89

Nuovo Utente
26 Gen 2016
28
0
1
31
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.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
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
 

Benix89

Nuovo Utente
26 Gen 2016
28
0
1
31
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"?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
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"
 

Benix89

Nuovo Utente
26 Gen 2016
28
0
1
31
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?
 

Benix89

Nuovo Utente
26 Gen 2016
28
0
1
31
Grazie Borgo, troppo gentile. :oops:
Magari, se necessario, creo una nuova discussione nella sezione specifica (se c'è :D)
 

Benix89

Nuovo Utente
26 Gen 2016
28
0
1
31
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
Autore Titolo Forum Risposte Data
L Problemi form Pagina php HTML e CSS 2
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1
D problema php mysql PHP 1
E Barra di avanzamento codice PHP PHP 4
G creazione menu a tendina e invio a pagina php PHP 1
A inserire variabile php colore in div html PHP 2
Z Video protetto con PHP PHP 0
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
I Eecuzione di javascript in ciclo foreach php. PHP 7
S Libreria PHP per creare file dwg o dxf PHP 0
A [cerco - retribuito] Sviluppatore Php freelance per progetti vari Offerte e Richieste di Lavoro e/o Collaborazione 2
L Google chart php mysql PHP 2
R Download file multipli da directory php PHP 0
F pagina dinamica PHP PHP 3
P Rimozione automatica url da sitemap.xml con PHP PHP 1
L php tinymce mi duplica la classe label PHP 3
S Errore PHP - Notice: Undefined index ... PHP 14
N file manager da php 5 a 7 PHP 15
M Utilizzare la funzione mysql_num_rows() in PHP 5 PHP 3
elpirata Update dinamico informazioni scritte in una pagina php jQuery 11
N Mysql_result per PHP 7 PHP 2
Emix Select concatenate php sql ajax PHP 2
P Modifica con PHP di un node in una sitemap xml PHP 0
D Come usare funzione php PHP 6
P Cancellazione specifici files in una folder php PHP 1
R Tradurre stringhe con php e google translator PHP 4
I Salvataggio snapshot IPCAM tramite PHP PHP 5
felino PHP e script generazione file excel PHP 2
L Aiuto per programma web php/mySQL PHP 2
A Estrapolare parti di testo con PHP PHP 2
A Aiuto php colore diverso PHP 10
E Errore di lettura php in html PHP 8
J php, scegliere autista da select e mostrare se ha fatto un incidente PHP 8

Discussioni simili