• User

    Semplice modifica php+mysql

    Sto impazzendo, non capisco come fare in modo che lo script mi modifichi in un momento solo due righe del database (entrambe con lo stesso unique code)

    Premetto che non sono esperto di php.

    le righe di php da modificare sarebbero le seguenti:

     # Do DB update
                   $Set_LastActivity = time();
                   $query = "UPDATE InfResp_subscribers SET LastActivity = '$Set_LastActivity', TimeJoined = '$Set_LastActivity', Real_TimeJoined = '$Set_LastActivity', Confirmed = '1' WHERE SubscriberID = '$DB_SubscriberID'";
                   $DB_result = mysql_query($query) or die("Invalid query: " . mysql_error());
    

    In pratica ho due righe con lo stesso "uniquecode"
    INSERT INTO InfResp_subscribers (SubscriberID, ResponderID, SentMsgs, EmailAddress, TimeJoined, Real_TimeJoined, CanReceiveHTML, LastActivity, FirstName, LastName, IP_Addy, ReferralSource, UniqueCode, Confirmed, responder_double_r2) VALUES
    (8, 4, '', '[email protected]', 1283691697, 1283691697, 0, 1283691697, 'marco', 'silvestri', '93.46.198.5', 'none', '59206189558c28d', 1, 4);

    INSERT INTO InfResp_subscribers (SubscriberID, ResponderID, SentMsgs, EmailAddress, TimeJoined, Real_TimeJoined, CanReceiveHTML, LastActivity, FirstName, LastName, IP_Addy, ReferralSource, UniqueCode, Confirmed, responder_double_r2) VALUES
    (9, 1, '', '[email protected]', 1283691697, 1283691697, 0, 1283691697, 'marco', 'silvestri', '93.46.198.5', 'none', '59206189558c28d', 1, 4);

    Attualmente il codice php mi sposta soltanto il primo record da non confirmed (confirmed=0) a confirmed (confirmed=1)

    Vorrei che la modifica fosse fatta su tutte le righe contenenti quel determinato "uniquecode"


  • ModSenior

    Beh ma se stiamo parlando di modifiche allora credo ti serva la sintassi UPDATE, non INSERT.
    La prima fa appunto una modifica, la seconda un nuovo inserimento nella tabella, quindi una nuova riga.


  • User

    la funzione php è un update.

    Dove vedi insert è soltanto un export del database, per far capire come sono impostati i due record di esempio

    Come posso modificare la funziona php che ho incollato nel post precedente?


  • ModSenior

    Se metti la query cosi?

    $query = "UPDATE InfResp_subscribers SET LastActivity = '$Set_LastActivity', TimeJoined = '$Set_LastActivity', Real_TimeJoined = '$Set_LastActivity', Confirmed = '1' WHERE SubscriberID = '$DB_SubscriberID' AND uniquecode='$valoreUniquecode'";


  • User

    Sei stato illuminante, ho risolto in questo modo:
    $query = "UPDATE InfResp_subscribers SET LastActivity = '$Set_LastActivity', TimeJoined = '$Set_LastActivity', Real_TimeJoined = '$Set_LastActivity', Confirmed = '1' WHERE uniquecode='$valoreUniquecode'";

    Adesso ho un altro problema:
    Per eliminare un record ho questa riga:
    $query = "DELETE FROM InfResp_subscribers WHERE UniqueCode = '$code'";
    $DB_result = mysql_query($query) or die("Invalid query: " . mysql_error());

    La query funziona (infatti su phpmyadmin vengono eliminati i record giusti), ma la pagina restituisce (non capisco il motivo) questo errore:
    Invalid query: Unknown column 'UniqueCode' in 'where clause'

    Dove sbaglio?

    Grazie mille


  • ModSenior

    Che sia una parola chiave?
    Se provi ad anteporre il nome della tabella?

    DELETE FROM InfResp_subscribers WHERE InfResp_subscribers.UniqueCode


  • User

    la cosa che non capisco è perchè però nell'altra query funziona alla perfezione...

    $query = "UPDATE InfResp_subscribers SET LastActivity = '$Set_LastActivity', TimeJoined = '$Set_LastActivity', Real_TimeJoined = '$Set_LastActivity', Confirmed = '1' WHERE uniquecode='$valoreUniquecode'";

    Fa lo stesso lavoro anche se imposto come EmailAddress

    Domani riprovo con calma magari


  • ModSenior

    Potrebbe essere un problema di permessi dell'utente magari...


  • User

    Sono su cPanel ed ho impostato i permessi massimi per l'utente. Ad ogni modo appena ho tempo provo ad antepore il nome della tabella e vedo che succede


  • ModSenior

    Altrimenti attendiamo altri aiuti da altri utenti. 🙂
    Visto l'ora il mio cervello deve ancora accendersi... 😄


  • User

    Non va. nemmeno anteponendo il nome della tabella.

    Non so dove battere la testa, perchè con la stess identica dichiarazione in fase di UPDATE funziona alla perfezione.

    Chi mi sa dare una mano?


  • User

    Ho risolto in questo modo, commentanto una parte della seconda riga:

               $query = "DELETE FROM InfResp_subscribers WHERE EmailAddress = '$DB_EmailAddress'";
               $DB_result = mysql_query($query)/* or die("Invalid query: " . mysql_error())*/;
    

    é una cosa da pazzi? da problemi di qualche tipo?
    Se si, perchè?


  • ModSenior

    La riga che hai commentato serve appunto ad avvisarti su eventuali errori nello script.
    Semmai è da capire il perchè di quell'errore visto che sembra eseguire davvero la query.


  • User

    Non è che sembra eseguire lo script, lo esegue alla perfezione.

    Ad ogni modo, per quello che mi riguarda ho risolto.

    Grazie mille Marco 😉
    La prossima volta ci sentiamo per telefono 😉 sembrava di essere in chat 😉


  • ModSenior

    Ma almeno se passa un altro utente con lo stesso problema ha una traccia su come risolvere. 🙂
    Alla prossima qua nel Forum.

    Ciao.


  • User Attivo

    Se il tuo database gira su linux il problema potrebbe essere molto semplicemente... il case-sensitive.

    Nella prima query (quella funzionante) hai scritto "uniquecode", mentre nella seconda hai scritto "UniqueCode".
    Su linux, i nomi delle tabelle sono case-sensitive e con le giuste impostazioni lo sono anche i nomi delle colonne. A quel punto per lui "UniqueCode" non esiste, perché in realtà la colonna si chiama "uniquecode".
    A quel punto la query restituisce un errore e il die ne blocca l'esecuzione. Togliendo il die funziona perché la query non viene interrotta, ma potrei scommettere che non ti aggiorna la colonna "uniquecode"... 😉

    Spero di essere stato d'aiuto,
    un saluto.