[PHP] Rindirizzamento alla homepage

Benix89

Nuovo Utente
26 Gen 2016
28
0
1
34
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.046
150
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
34
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.046
150
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
34
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.046
150
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
34
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.046
150
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
34
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.046
150
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
34
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.046
150
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
34
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
34
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
34
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
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3
T fatture con voci fattura in php PHP 0

Discussioni simili