Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Carrello elettronico Ajax - PHP

    Ho un problemino con uno script Ajax. Nel dettaglio questo script dovrebbe permettere di aggiungere e rimuovere dal carrello dei prodotti (di conseguenza aggiungerli o rimuoverli dal DB).
    Per quanto riguarda l'aggiunta di un prodotto funziona tutto tranquillamente, ma ho dei problemi nel rimuoverli dal DB.
    Nello specifico quando vado a cancellare un elemento dal carrello, questo viene eliminato si dal carrello stesso, ma non dal DB nonostante le istruzioni di codice in PHP mi sembrano scritte bene. Difatti mi viene dato un messaggio di errore nel momento in cui tenta di rimuoverli.

    Le funzioni che fanno riferimento alla rimozione sono le seguenti:

    Codice PHP:

    function removeProductFromBasket(productId)
    {
        var 
    productRow document.getElementById('shopping_cart_items_product' productId);
        
        var 
    numberOfItemCell productRow.cells[0];
        if(
    numberOfItemCell.innerHTML == '1'){
            
    productRow.parentNode.removeChild(productRow);    
        }else{
            
    numberOfItemCell.innerHTML numberOfItemCell.innerHTML/1;
        }
        
    updateTotalPrice();
        
    ajaxRemoveProduct(productId);    
    }


    function 
    ajaxRemoveProduct(productId)
    {
        var 
    ajaxIndex ajaxObjects.length;
        
    ajaxObjects[ajaxIndex] = new sack();
        
    ajaxObjects[ajaxIndex].requestFile url_removeProductFromBasket;    // Saving product in this file
        
    ajaxObjects[ajaxIndex].setVar('productIdToRemove',productId);
        
    ajaxObjects[ajaxIndex].onCompletion = function(){ ajaxValidateRemovedProduct(ajaxIndex); };    // Specify function that will be executed after file has been found
        
    ajaxObjects[ajaxIndex].runAJAX();        // Execute AJAX function        
    }


    function 
    ajaxValidateRemovedProduct(ajaxIndex)
    {
        if(
    ajaxObjects[ajaxIndex].response!='OK')alert('Errore mentre si tenta di rimuovere il prodotto dal Database');
        

    L'alert che mi viene visualizzato è proprio quello visualizzabile nella precedente funzione.

    Il codice in PHP che viene chiamato dalla funzione ajaxRemoveProduct, specificato nella variabile url_removeProductFromBasket, è remove.php, che si occupa per l'appunto della cancellazione effettiva dal DB che elenco di seguito.

    Codice PHP:

    if(!isset($_POST['productIdToRemove']))die("Not OK");

                    
    // SELEZIONE DELL'ID RELATIVO ALL'UTENTE CHE STA EFFETTUANDO LA TRANSAZIONE
        
        
    $query "SELECT `id`
                                FROM user
                                   WHERE user.username='
    $user_nome'" ;
        
                       
    $result mysql_query($query);                  
                     while(
    $row_U mysql_fetch_assoc($result)) {
                     print
    "
    "
    ;
                     print
    "ID: $row_U[id]
    "
    ;
                     
    $userid=$row_U[id];
                     }
                    
                     if (!
    $result) {
                        echo 
    mysql_error();
                        exit;
                        }
        
                       
        
        
    // CANCELLAZIONE DELLA RIGA RELATIVA AL PRODOTTO DA ELIMINARE
                       
                    
    $res "DELETE
                                    FROM `shopping_cart`
                                    WHERE id_product = '
    {$_POST['productIdToRemove']}' AND id_user='$userid' LIMIT 1";
                    
                    
    $ris mysql_query($res) or die("Errore");    
               
                    
                    echo 
    "OK"
    Credo che qualcosa non vada nelle query, dal momento che eliminandole e lasciando solamente le due righe di codice sotto elencate (che non eseguono alcuna operazione sul DB), il messaggio di errore specificato nella funzione ajaxValidateRemovedProduct(ajaxIndex) non mi viene ritornato.

    Codice PHP:

    if(!isset($_POST['productIdToRemove']))die("Not OK");    

    // Quì dovrei aggiungere le mie query per le operazioni sul DB.

    echo "OK"
    Potete gentilmente aiutarmi a risolvere questo problema?
    Grazie mille in anticipo.
    moscacieca

  2. #2
    UP!
    moscacieca

  3. #3
    Facendo delle prove mi sono accorto che nel file remove.php, se lascio solamente queste due righe di codice, senza aggiungere alcunchè

    Codice PHP:

    if(!isset($_POST['productIdToRemove']))die("Not OK");    

    // Quì dovrei aggiungere le mie query per le operazioni sul DB.

    echo "OK"
    non mi tira fuori il messaggio di errore, mentre qualsiasi altra cosa scrivo, anche una semplice variabile o un semplice echo, mi notifica il messaggio di errore presente nella funzione (dimenticavo che le funzioni elencate sono contenute in un file .js).

    Codice PHP:

    function ajaxValidateRemovedProduct(ajaxIndex)
    {
        if(
    ajaxObjects[ajaxIndex].response!='OK')alert('Errore mentre si tenta di rimuovere il prodotto dal Database');
        

    Come è possibile? Da cosa può dipendere questo problema?
    moscacieca

  4. #4
    UP!
    moscacieca

  5. #5
    Nessuno sa come aiutarmi?
    moscacieca

  6. #6
    Ho davvero poco tempo per mettermi a leggere tutto il tuo codice, ma se (come sospetti) l'errore è nelle query, allora posso provare a darti subito qualche dritta perché c'è qualcosa che non mi torna nella tua sintassi.
    Innanzi tutto ricorda che se in una query, indichi il nome della tabella (nome_tabella.nome_colonna), poi devi usare questa sintassi per tutta la stringa SQL.
    Questo per quello che riguarda la tua prima query, quella di SELECT. Peraltro, quel tipo di sintassi ti torna utile nelle JOIN, quindi quando devi pescare dati da più tabelle. Per una semplice select come la tua, non ne vedo proprio l'utilità.
    Nella query di DELETE, invece, il problema potrebbe nascere dal fatto che le variabili che sono nella clausola di where, erano tra apici.
    Visto che mi sembra di capire che i due parametri siano dei numeri interi (due ID), e che quindi le colonne che vai ad interrogare siano di tipo INT, non puoi mettere i valori tra parentesi, altrimenti MySQL li interpreta come stringhe e ti restituisce un errore.
    Prova a fare le modifiche come le ho scritte io e ricorda che per debuggare una query, bastano piccoli accorgimenti.
    1. manda in echo la stringa SQL e controlla sempre se viene stampato quello che ti aspetti.
    2. Con il comando mysql_query() aggiungi sempre il DIE che ti stampi il mysql_errno() ed il mysql_error(), così sai subito i motivi di un eventuale scazzo della query (te lo dice MySQL e se proprio non sai come agire, quantomeno scrivi nel forum che tipo di errore ti viene restituito piuttosto che un generico "non funziona".
    3. La stringa di query mandata in echo, la copi e la incolli in una shell di MySQL e vedi se da shell ti viene restituito lo stesso errore oppure no.

    OK, ti ho detto tutto.
    Di seguito lo script.



    p.s. - Ah.... come ho scritto in firma, sia per una questione mia personale, sia per una questione di regole del forum, gradirei non ricevere messaggi privati con richieste di aiuto e/o di codice

    Codice PHP:
    if(!isset($_POST['productIdToRemove'])) {
       echo 
    "Not OK" ;
       exit;
    }                        
    // SELEZIONE DELL'ID RELATIVO ALL'UTENTE CHE STA EFFETTUANDO LA TRANSAZIONE              
    $query "
       SELECT `id` 
       FROM user 
       WHERE username= '
    $user_nome
    "
    ;                             
    $result mysql_query($query) or DIE (mysql_error());

    while(
    $row_U mysql_fetch_assoc($result) {
    print
    "
     ID: "
    $row_U[id]."

    "
    .$row_U['id'];
    }
    // CANCELLAZIONE DELLA RIGA RELATIVA AL PRODOTTO DA ELIMINARE
    $prod2remove $_POST['productIdToRemove'];
    $res "
       DELETE FROM `shopping_cart` 
       WHERE id_product = 
    $prod2remove 
       AND id_user= 
    $userid
       LIMIT 1
    "
    ;
    $ris mysql_query($res) or die("Errore");
    echo 
    "OK"
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7
    Ciao Alcio74, perdonami ma non avevo proprio letto in fondo alla firma le tue volontà.
    Innanzitutto grazie per la tua risposta.
    Inoltre, a parte gli accorgimenti alle query che mi hai fatto giustamente notare e che ho corretto, volevo chiederti come ti sembra possibile che nel file in questione ovvero remove.php, qualsiasi riga di codice vada ad inserire a parte le righe di seguito

    Codice PHP:
    if(!isset($_POST['productIdToRemove']))die("Not OK");    

    // Quì dovrei aggiungere le mie query per le operazioni sul DB.

    echo "OK"
    mi tiri fuori l'errore specificato nella funzione di controllo

    Codice PHP:
    function ajaxValidateRemovedProduct(ajaxIndex)
    {
        if(
    ajaxObjects[ajaxIndex].response!='OK')alert('Errore mentre si tenta di rimuovere il prodotto dal Database');
        

    Specificatamente se lascio il file remove.php vuoto con solamente le due righe di codice su mensionate, tutto funziona (ovviamente senza cancellare dal DB, dato che ho omesso le query), mentre qualsiasi altra parte di codice vada ad inserire in aggiunta, anche una sola variabile, non mi funziona più tirando fuori l'errore dell'ALERT!!!!!!!!!!!!!!
    Quindi a questo punto credo che non dipenda dalle query, che preventivamente ho corretto con i tuoi consigli, ma c'è qualcosa di più.
    Ti ripeto, anche se inserisco un semplice echo, oltre alle due righe non mi funziona più nulla, come se si aspettasse come risultato solamente la stringa in ECHO "OK", oppure "NOT OK".
    Dipende forse mica da:

    Codice PHP:
    if(ajaxObjects[ajaxIndex].response!='OK'
    Grazie mille
    moscacieca

  8. #8
    UP!
    moscacieca

  9. #9
    Ripeto che non ho avuto modo di controllare tutto il tuo script, e stavolta aggiungo che non ho capito quale comportamento anomalo esca fuori.
    Ad ogni modo.........

    Non sono convinto che il DIE messo in quella maniera faccia appieno il proprio lavoro.
    Prova a correggere così:
    Codice PHP:
    if(!isset($_POST['productIdToRemove'])) {
      echo 
    "Not OK";     
      exit;
    } else {
      
    // Quì dovrei aggiungere le mie query per le operazioni sul DB. 
      
    echo "OK";

    Hai provato a mandare in echo $_POST['productIdToRemove']???
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

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 © 2025 vBulletin Solutions, Inc. All rights reserved.