PDA

View Full Version : problemi con il carrello php


Fede83
20-05-2004, 13:58
Ciao a tutti,
Ho un problema nel far funzionare un carrello, vi spiego cosa ho fatto:
1) ho fatto un database vuoto con mysql, l'ho chiamato carrello. E' formato da questi campi id (chiave primaria), codice, nome, descrizione, quantita, prezzo, totale

2) nel sito che sto costruendo ho inserito una immagine e un posto per scrivere la quantita di prodotto che si vuole ordinare affianco a ogni prodotto. La funzione di questa immagine è quella di aggiungere i prodotti e la quantità al carrello.

Problema:
quando clicco sull'immagnine non mi aggiunge niente al carrello mi visualizza solo la tabella del database vuota.

Io vi invio due codici:
CODICE DEL CARRELLO:

<?php

$conn = @mysql_connect("localhost","root","") or die("connessione fallita");
@mysql_select_db("test") or die ("connessione fallita");

$sql="INSERT INTO carrello (codice,nome,descrizione,quantita,prezzo,totale)
VALUES ('". $_GET['codice'] ."','". $_GET['nome'] ."','". $_GET['descrizione'] ."','". $_GET['prezzo'] ."','". $_GET['quantita'] ."','".$_GET['totale']."');";
@mysql_query($sql) or die ("query fallita : $sql");




$sql = "SELECT codice,nome,descrizione,quantita,prezzo,totale
FROM carrello
WHERE carrello.codice";
$risultato = @mysql_query($sql) or die ("query fallita : $sql");
print "<table border=1 bordercolor=white background=sfondo.gif align=center width=80%>";
print "<tr>
<td><b>CODICE</b></td>
<td><b>NOME</b></td>
<td><b>DESCRIZIONE</b></td>
<td><b>PREZZO</b></td>
<td><b>QUANTITA</b></td>
<td><b>PREZZO TOTALE</b></td>
</tr>";
$qtatot = 0;
$prezzotot = 0;
while ($linea = mysql_fetch_array($risultato)) {
$prezzo = $linea["quantita"]*$linea["prezzo"];
print "<tr>";
print "<td>".$linea["codice"]."</td>";
print "<td>".$linea["nome"]." </td>";
print "<td>".$linea["descrizione"]."</td>";
print "<td>".$linea["qta"]." </td>";
print "<td>".$linea["prezzo"]." €</td>";
print "<td>".$linea["totale"]." €</td>";
print "<td>".$prezzo." €</td>";
print "</tr>";


}

print "<tr>
</table>";


mysql_free_result($risultato);
mysql_close($conn);

?>

CODICE DEI PRODOTTI DOVE CE L'IMMAGINE, PRECHE SECONDO ME NON DO UN COMANDO ALL'IMMAGINE:

<?php
print "<table border= bordercolor=#676767 background=sfondo.gif align=center width=80% >
<form action=carrel.php name=frm method=get>";
$fd= fopen ("accessori.csv", "r");
while (!feof ($fd)){
$riga=fgets($fd, 4096);
if($riga!=""){
$arr=split(';', $riga);
print "<tr>";
print "<td>".$arr[0]."</td>";
print "<td>".$arr[1]."</td>";
print "<td>".$arr[2]."</td>";
print "<td>".$arr[5]."</td>";
print "<td><input type=text size=3 name=qta>
<img border=0 src=carrello.gif onclick=\"document.frm.submit()\">
</td>";
}

print "</tr>";
}

print "</form>";
print "</table>";

?>

ERRORI:

Notice: Undefined index: codice in c:\easyphp1-7\www\carrel.php on line 73

Notice: Undefined index: nome in c:\easyphp1-7\www\carrel.php on line 73

Notice: Undefined index: descrizione in c:\easyphp1-7\www\carrel.php on line 73

Notice: Undefined index: prezzo in c:\easyphp1-7\www\carrel.php on line 73

Notice: Undefined index: quantita in c:\easyphp1-7\www\carrel.php on line 73

Notice: Undefined index: totale in c:\easyphp1-7\www\carrel.php on line 73


SPERO CHE QUALCUNO MI POSSA AIUTARE.

cionci
20-05-2004, 20:11
Sostituisci mysql_fetch_array con mysql_fetch_assoc

McK
20-05-2004, 20:15
a dire il vero credo vada sostituita con mysql_fetch_row (anche se non so a cosa serve il fetch_assoc! :D).

Cmq, una volta estratti i dati con mysql_query ti ritrovi una sorta di array di record (o se preferisci una matrice). Prima di dividere l'array dovresti dividere le varie righe che identificano le singole tuple estratte dal db.

while ($linea = mysql_fetch_row($risultato)) {
$prezzo = $linea["quantita"]*$linea["prezzo"];
print "<tr>";
print "<td>".$linea["codice"]."</td>";
print "<td>".$linea["nome"]." </td>";
print "<td>".$linea["descrizione"]."</td>";
print "<td>".$linea["qta"]." </td>";
print "<td>".$linea["prezzo"]." €</td>";
print "<td>".$linea["totale"]." €</td>";
print "<td>".$prezzo." €</td>";
print "</tr>";


}


Ciao, McK

cionci
21-05-2004, 01:45
Originariamente inviato da McK
a dire il vero credo vada sostituita con mysql_fetch_row (anche se non so a cosa serve il fetch_assoc! :D).
mysql_fetch_assoc($res) è la stessa cosa di mysql_fetch_row($res, ASSOC)

http://it2.php.net/manual/en/function.mysql-fetch-array.php

Fede83
21-05-2004, 08:22
Ragazzi vi ringrazio per l'aiuto ma non è cambiato niente non mi aggiunge nessun prodotto al carrello, :cry:

McK
21-05-2004, 08:31
(grazie cionci, non avevo mai usati gli array associativi! ;))

Prova a fare una cosa, cambia la stringa che usi per inserire i dati nel database (carrello), tanto le variabili che passi via get o post attraverso i form html riesci a leggerle anche senza richiamare la funzione GET e POST di php, semplicemente richiamandone il nome.
Nel caso fai prima un assegnamento del tipo $cod=$_GET['codice'].

$sql="INSERT INTO carrello (codice,nome,descrizione,quantita,prezzo,totale)
VALUES ('$codice','$nome','$descrizione','$prezzo','$quantita','$totale')";

La sintassi sql prevede gli apici che racchiudano i valori, ricorda che se nel nome o nella descriziopne hai un apice (L'albero) la query non insersce niente nel database, devi sostituire la variabile in (L\'albero) attraverso la funzione addslashes($variabile).

Prova così, sicuramente il problema dell'inserimento è dovuto alla query sbagliata. Io di solito per controllarle uso phpmyadmin e incollo la query nel campo di testo "sql".

Ciao, McK

cionci
21-05-2004, 09:50
Originariamente inviato da McK
(grazie cionci, non avevo mai usati gli array associativi! ;))

Prova a fare una cosa, cambia la stringa che usi per inserire i dati nel database (carrello), tanto le variabili che passi via get o post attraverso i form html riesci a leggerle anche senza richiamare la funzione GET e POST di php, semplicemente richiamandone il nome.
Eh no...da PHP 4.0.4 la creazione delle variabili automatiche dai dati post e get è disattivata per default...
Bisogna riattivarla dalla configurazione... E' stato disattivato perchè portava a problemi di sicurezza... Quindi anche se è attivo il vecchio emtodo sullo spazio web...meglio usare il nuovo metodo con i vettori associativi $_GET, $_POST e $_SESSION...

Fede83
21-05-2004, 09:53
ciao mck,

quello che mi hai sritto l'ho gia provato, e mi da gli stessi errori:muro:

Spero che puoi darmi altri consigli.

ciao grazie

cionci
21-05-2004, 10:01
Quello che ti ho detto io l'hai fatto ?
Ma qual è la linea 73 ?!?!?!
Ma ci arrivi da un form a quella richiesta ?

McK
21-05-2004, 10:25
Bè ma l'errore che ti da (se la linea 73 è quella che usi con i GET) è semplicemente derivante dal fatto che tenti di leggere valori che non hai mai passato o cmq non riesce a trovare le variabili che tenti di leggere

McK

cionci
21-05-2004, 10:34
Infatti...se viene da una form probabilmente basta cambiare $_GET con $_POST...

McK
21-05-2004, 10:58
Bè il cambio del get col post dipende dal metodo che hai usato per creare la form... pastaci anche la parte di codice chiamante (quella col form) così capiamo meglio dove sta il problema.

Fede83
21-05-2004, 13:26
VI SPEGO MEGLIO:

1) AVEVO UN DOCUMENTO IN EXCEL DOVE CI SONO DEI LISTINI PREZZI, HO TRASFORMATO QUESTO DOCUMENTO IN UN FILE CSV , E L'HO RICHIAMATO CON IL CODICE PHP, AFFIANCO A OGNI PRODOTTO HO MESSO UNO SPAZIO PER SCRIVERE LA QUANTITA E L'ICONA DEL CARRELLO CHE QUANDO CI CLICCHI SOPRA DOVREBBE AGGIUNGERE IL PRODOTTO AL CARRELLO, PER CUI DEVE SCRIVE IL PRODOTTO SUL DATABASE VUOTO CHE HO CREATO SU MYSQL, MA NON LO FA. MI VISUALIZZA SOLTANTO LA TABELLA CON I CAMPI CODICE, NOME, DESCRIZIONE, PREZZO, QUANTITA,TTOTALE PERò IL BENEDETTO PRODOTTO NON MELO AGGIUNGE.

VI MANDO IN ALLEGATO:
ACCESSORI.CSV , DOVE CI SONO I PRODOTTI CON I PREZZI
CARREL.PHP, CHE SAREBBE IL CARRELLO CHE PER ADESSO è VUOTO
OPEN.PHP, CHE SAREBBE IL CODICE CHE RICHIAMA ACCESSORI.CSV, QUI CE L'ICONA DEL CARRELLO.

cionci
21-05-2004, 14:31
Manca il value a questi input hidden...

print "<input type=\"hidden\" name=\"codice\">";
print "<input type=\"hidden\" name=\"nome\">";
print "<input type=\"hidden\" name=\"descrizione\">";
print "<input type=\"hidden\" name=\"prezzo\">";
print "<input type=\"hidden\" name=\"quantita\">";
print "<input type=\"hidden\" name=\"totale\">";

McK
21-05-2004, 15:40
No cionci in realtà gli dovrebbe venire assegnato attraverso il javascript che sta sopra, ma sinceramente non sono proprio sicuro che funzioni!
Secondo me è meglio se elimini il javascript per l'aggiunta nel carrello (i javascript sono client side, quindi non è detto che funzionino su tutti i browser dei tuoi utenti) e fai una cosa tipo quella che ti ha suggerito cionci, cioè assegnando subito i valori alle variabili. Così:

print "<input type=\"hidden\" name=\"codice\" value=\"$arr[1]\">";
print "<input type=\"hidden\" name=\"nome\" value=\"$arr[2]\">";
print "<input type=\"hidden\" name=\"descrizione\" value=\"$arr[3]\">";
print "<input type=\"hidden\" name=\"prezzo\" value=\"$arr[5]\">";


Secondo me però sarebbe da rivedere totalmente questa parte del tuo sito e fare una riprogrammazione DOC. Potresti per esempio assegnare all'immaginetta del carrello il codice del prodotto con href sulla stessa pagina:

<a href=\"stessapagina.php?id=$art[1]\"><img src=\"carrello.gif\"></a>

In questo modo ogni volta che clicchi su un carrellino ti viane ricaricata la pagina con la lista degli articoli e ti viene passato il codice (ed eventualmente la quantità associata) dell'articolo che hai scelto. In questo modo puoi gestirti anche un campo con il totale e l'elenco degli oggetti in the cart. Ricordati solo che al secondo oggetto che viene aggiunto (con conseguente reload della pagina) dovrai passare in hidden anche l'id e la quantità dell'oggetto che avevi già inserito... e così via (in pratica passi ogni volta un array fino alla conferma dell'ordine).
Non è forse il massimo, ma è la prima cosa che mi è venuta in mente. Se preferisci tenere il tuo codice ti consiglio di fare un po' di debug e vedere se viene assegnato il corretto valore dell'articolo quando pigi sul carrello (fai un echo "$variabile da controllare" nell'altro file per vedere se ti arriva il valore)

Ciao, McK