[PHP] Rindirizzamento alla homepage

Benix89

Nuovo Utente
26 Gen 2016
28
0
1
32
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
149
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
32
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
149
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
32
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
149
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
32
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
149
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
32
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
149
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
32
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
149
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
32
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
32
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
32
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
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 0
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
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
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

Discussioni simili