Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: if su UPDATE

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    281

    if su UPDATE

    ciao a tutti
    premetto che quelle poche volte che mi occorre qualcosa uso asp però adesso ho uno script php da modificare e non so proprio come si fa.

    ho una stringa già esistente
    UPDATE `'._DB_PREFIX_.bqSQL($this->def['table']).'`
    SET `date_upd` = NOW()
    WHERE `'.bqSQL($this->def['primary']).'` = '.(int)$this->id);

    alla quale vorrei aggiungere un secondo SET
    nella tabella ci sono anche due campi email1 e email2 e vorrei che email2 fosse copiata in email1 solo se email2 è pieno

    ho pensato di fare
    UPDATE `'._DB_PREFIX_.bqSQL($this->def['table']).'`
    SET `date_upd` = NOW(), if('email2'=<>) 'email1' = 'email2'
    WHERE `'.bqSQL($this->def['primary']).'` = '.(int)$this->id);

    ma non funziona

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Se usi mysql ,potresti fare così (anche se c'entra nulla con php)
    codice:
    UPDATE `'._DB_PREFIX_.bqSQL($this->def['table']).'`
    SET `date_upd` = NOW(),
     email1 = IF(email2='', email1, email2)
    // se email2 può essere null allora
    // email1 = IF(email2='' OR email2 is null, email1, email2)
    WHERE `'.bqSQL($this->def['primary']).'` = '.(int)$this->id);

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    281
    grazie mille boots
    avevo scritto sul forum database ma mi hanno consigliato di scrivere quì

    provo e vi faccio sapere

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    281
    si il database è mysql però email2 deve essere copiata in email1 solo se è piena mi sembra che l'IF faccia il contrario cioè che copia email2 in email1 se email2 è vuota.

  5. #5
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    email1 = IF(email2='' OR email2 is null, email1, email2)

    Se email2 è vuota (o null) ci mette email1 (ovvero non cambia il valore) altrimenti email2 ...perchè dovrebbe fare il contrario?

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    281
    perchè di php non sono pratica e sto andando per tentativi
    comunque ho fatto delle prove e ho visto che su questa function non è possibile perchè è una function generica che vale per più tabelle e li campi da aggiornare sono nella tabella customer ...

    che dici la function sotto è possibile modificarla per fargli fare quello che voglio fare io ?

    public function getByEmail($email, $passwd = null, $ignore_guest = true)
    {
    if (!Validate::isEmail($email) || ($passwd && !Validate::isPasswd($passwd))) {
    die(Tools::displayError());
    }


    $result = Db::getInstance()->getRow('
    SELECT *
    FROM `'._DB_PREFIX_.'customer`
    WHERE `email` = \''.pSQL($email).'\' or `email2` = \''.pSQL($email).'\'
    '.Shop::addSqlRestriction(Shop::SHARE_CUSTOMER).'
    '.(isset($passwd) ? 'AND `passwd` = \''.pSQL(Tools::encrypt($passwd)).'\'' : '').'
    AND `deleted` = 0
    '.($ignore_guest ? ' AND `is_guest` = 0' : ''));


    if (!$result) {
    return false;
    }
    $this->id = $result['id_customer'];
    foreach ($result as $key => $value) {
    if (property_exists($this, $key)) {
    $this->{$key} = $value;
    }
    }
    return $this;
    }

  7. #7
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    cosa vorresti fare in questa funzione? aggiornare la tabella con email1 ed email2 ?
    Più che altro non ne capisco il motivo.

    Inoltre credo che dovresti aggiungere le parentesi nel OR, altrimenti fai casino con gli eventuali AND (and ha precedenza maggiore di or)

    WHERE (`email` = \''.pSQL($email).'\' or `email2` = \''.pSQL($email).'\')

    Per l'update
    Codice PHP:
    if (!$result) {
       return 
    false;
    }
       
    $this->id $result['id_customer'];
        foreach (
    $result as $key => $value) {
            if (
    property_exists($this$key)) {
               
    $this->{$key} = $value;
        }
       
       
    $query 'UPDATE '._DB_PREFIX_.'customer
                       SET email1 =  IF(email2="" OR email2 is null, email1, email2)
                       WHERE id_customer = ' 
    .$this->id;
      
    // esegui la query...non conosco come ti interfacci al database :-)

    Cmq, visto che hai due mail che senso ha sovrascriverne una ?
    Ultima modifica di boots; 19-04-2018 a 19:54

  8. #8
    lella, sta' attenta a fare un UPDATE secco sul db, nell'altro thread hai detto che vuoi sostituire email1 con email2 se la login viene validata su email2. quindi è un ragionamento che devi innescare sul programma, non sul db

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    281
    grazie boots due email le ho perchè ho unificato due ecommerce uno vecchissimo e alcuni clienti del vecchio sono anche clienti del nuovo solo che alcuni hanno cambiato email nel nuovo
    grazie per il consiglio del OR domani faccio le modifiche e vi faccio sapere.

    mentre per optime si inizialmente pensavo di sostituire email1 solo se la login validava email2 ma ho pensato che era difficoltoso verificare se un utente effettua il login con email1 o email2

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    281
    niente ..... è tutto oggi che provo ad interfacciare lo script con il database ma non riesco proprio ... la pagina php fa parte di prestashop 1.6.1.18 ... sicuramente lo conoscete ....

    dallo script sopra voi non riuscite a capire come fare ?

    ---------------------------------------
    $result = Db::getInstance()->getRow('SELECT * FROM `'._DB_PREFIX_.'customer`

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.