[PHP] Problema WHERE

Andrea_2017

Utente Attivo
17 Set 2017
26
0
1
39
Ciao a tutti!
Ho un problema che non riesco a risolvere...data la mia poca dimistichezza

ho scritto questo codice (per il gdr che sto costruendo) che mi permette di "depositare" una somma di denaro dalla "tasca" del personaggio alla "banca"

Codice:
<?php
session_start();
require '../../config/includes_into.php';

// controllo sessione
if (empty($_SESSION['id_pg'])) {
 header("Location:../index.php"); } 
// fine controllo sessione

$db=dbconnect();
$id_personaggio= $_SESSION['id_pg'];

$sq="SELECT soldi FROM personaggi WHERE id = " . $_SESSION['id_pg'];
$Result = mysql_query($sq);
   $rs = mysql_fetch_array($Result);
            $soldi = $rs["soldi"];
If ($soldi < $DEPOSITO){
        echo "<script language='javascript'>alert('Non Possiedi Questa Somma');</script>";
    }
   else {
$deposito= "UPDATE personaggi SET Banca = Banca + $DEPOSITO WHERE id = " . $_SESSION['id_pg'];
mysql_query("$deposito") or die(mysql_error());

$agg_soldi= "UPDATE personaggi SET soldi = soldi - $DEPOSITO WHERE id = " . $_SESSION['id_pg'];
mysql_query("$agg_soldi") or die(mysql_error());


print "<script language='javascript'>alert('Deposito effettuato con successo.');</script>";
}


mysql_close ($connessione);

?>

ma quando vado a cliccare su DEPOSITA viene fuori questo messaggio:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 370' at line 1

cosa sbaglio?? :(
 

mr.x

Utente Attivo
9 Apr 2016
252
25
28
ciao
Ricontrolla i doppi apici..

Nn riesco a scrivere da cell, comunque
Mancano dei doppi apici prima del punto e virgola dopo il where
 

Andrea_2017

Utente Attivo
17 Set 2017
26
0
1
39
Intendi questo pezzo di codice?

Codice:
else {
$deposito= "UPDATE personaggi SET Banca = Banca + $DEPOSITO WHERE id = " . $_SESSION['id_pg'];
mysql_query("$deposito") or die(mysql_error());

$agg_soldi= "UPDATE personaggi SET soldi = soldi - $DEPOSITO WHERE id = " . $_SESSION['id_pg'];
mysql_query("$agg_soldi") or die(mysql_error());

se è questo, i doppi apici ci sono dopo id = "
ho provato cmq a metterli dove mi hai consigliato..ma nulla o probabilmente sbaglio qualcosa io
 

jonnino2004

Utente Attivo
23 Mag 2007
86
3
8
como
www.quizandoceffee.com
ciao

intanto un consiglio, deriva una tua classe da mysqli e metti tutto il codice per il database qui. E' una classe che fai una volta e userai sempre in tutti i progetti.

Per la query la sintassi sembra corretta sempre che il campo id sia numerico (non lo hai per caso lasciato come varchar?)

Controlla e se non è quello postaci lo schema della table (anche solo dei campi interessati)

Daniele
 

Andrea_2017

Utente Attivo
17 Set 2017
26
0
1
39
ciao

intanto un consiglio, deriva una tua classe da mysqli e metti tutto il codice per il database qui. E' una classe che fai una volta e userai sempre in tutti i progetti.

Per la query la sintassi sembra corretta sempre che il campo id sia numerico (non lo hai per caso lasciato come varchar?)

Controlla e se non è quello postaci lo schema della table (anche solo dei campi interessati)

Daniele

Ciao!
esattamente sto lavorando su due pagine php adesso.Una si chiama banca.php e posto di seguito il codice

PHP:
<?php

session_start();

require '../../config/includes_into.php';



// controllo sessione

if (empty($_SESSION['id_pg'])) {

 header("Location:../index.php"); } 

// fine controllo sessione



$db=dbconnect();

$id_personaggio= $_SESSION['id_pg'];





$sq="SELECT Banca FROM personaggi WHERE id = " . $_SESSION['id_pg'];

$Result = mysql_query($sq);

   $rs = mysql_fetch_array($Result);

            $Banca = $rs["Banca"];

            



$sq2="SELECT soldi FROM personaggi WHERE id = " . $_SESSION['id_pg'];

$Result2 = mysql_query($sq2);

   $rs = mysql_fetch_array($Result2);

            $soldi = $rs["soldi"];

            





?>



<html>

<link rel="stylesheet" href="../stile.css" type="text/css">

<center><div class="RedTIT"><strong><b>Banca</strong></b></div></center>

<br>

<center><font color="#ff0000">In banca hai &nbsp; <b><?=$Banca?></b> &nbsp; monete</font></center>

<br>

<center>

<font color="#ff0000">E tu ne hai <b><?=$soldi?></b></font>

</center>

<br><br>

<center>

 <table width=100% align=center  border=0 cellspacing=0 cellpadding=0>

 <tr valign="middle">

    <td colspan="2" bgcolor=000000><img src=blank.gif width=0 height=1></td>

   </tr>



   <tr>

<td align="center"><div class="RedTIT">Deposita</div></td>

</tr>

</table>

<br>

<table width=100% align=center  border=0 cellspacing=0 cellpadding=0>

<form method="post" action="do_deposita.php" name="DEPOSITA">

<tr>

<td align="center">Somma da depositare</td>

</tr>

<tr>

<td align="center"><input type="text" name="DEPOSITO" maxlength="11"></td>

</tr>

<tr>

<td align="center"><input type="Submit" name="DEPOSITA" value="Deposita" class="textFieldBase"></td>

</tr>

</table>

</form>

 <table width=100% align=center  border=0 cellspacing=0 cellpadding=0>

 <tr valign="middle">

    <td colspan="2" bgcolor=000000><img src=blank.gif width=0 height=1></td>

   </tr>



   <tr>

<td align="center"><div class="RedTIT">Ritira</div></td>

</tr>

</table>

<table width=100% align=center  border=0 cellspacing=0 cellpadding=0>

<form method="post" action="do_ritira.php" name="RITIRA">

<tr>

<td align="center">Somma da ritirare</td>

</tr>

<tr>

<td align="center"><input type="text" name="RITIRO" maxlength="11"></td>

</tr>

<tr>

<td align="center"><input type="Submit" name="RITIRA" value="Ritira" class="textFieldBase"></td>

</tr>

</table>

</form>

<table width=100% align=center  border=0 cellspacing=0 cellpadding=0>

 <tr valign="middle">

    <td colspan="2" bgcolor=000000><img src=blank.gif width=0 height=1></td>

   </tr>



   <tr>

<td align="center"><div class="RedTIT">Ritira</div></td>

</tr>

</table>

<table width=100% align=center  border=0 cellspacing=0 cellpadding=0>

<form method="post" action="do_trasferisci.php" name="TRASFERISCI">

<tr>

<td align="center">Somma da trasferire</td>

</tr>

<tr>

<td align="center"><input type="text" name="SOMMAT" maxlength="11"></td>

</tr>

<tr>

<td align="center">Cittadino a Cui Trasferire</td>

</tr>

<tr>

<td align="center"><input type="text" name="CHI" maxlength="11"></td>

</tr>

<tr>

<tr>

<td align="center">Causale del Trasferimento</td>

</tr>

<tr>

<td align="center"><input type="text" name="CAUSA" maxlength="11">

<br>

<input type="hidden" name="IO" value="<?=$_SESSION['id_pg']?>">

</td>

</tr>

<tr>

<td align="center"><input type="Submit" name="TRASFERISCI" value="Trasferisci" class="textFieldBase">

</form>

<form method="post" action="do_stipendio.php" name="STIPENDIO">

<input type="Submit" name="STIPENDIO" value="Ritira stipendio" class="textFieldBase"></td>

</tr>

</table>

</form>

<table width=100% align=center  border=0 cellspacing=0 cellpadding=0>

 <tr valign="middle">

    <td colspan="2" bgcolor=000000><img src=blank.gif width=0 height=1></td>

   </tr>

</table>

</body>

</html>

questa è collegata ad un'altra pagina che si chiama do_deposita.php con questo codice:

PHP:
<?php
session_start();
require '../../config/includes_into.php';

// controllo sessione
if (empty($_SESSION['id_pg'])) {
 header("Location:../index.php"); } 
// fine controllo sessione

$db=dbconnect();
$sq="SELECT soldi FROM personaggi WHERE id = " . $_SESSION['id_pg'];
$Result = mysql_query($sq);
   $rs = mysql_fetch_array($Result);
            $soldi = $rs["soldi"];
If ($soldi < $DEPOSITO){
        echo "<script language='javascript'>alert('Non Possiedi Questa Somma');</script>";
    }
   else {
$deposito= ("UPDATE personaggi SET Banca = Banca + $DEPOSITO WHERE id = 'nome'"
mysql_query("$deposito") or die(mysql_error());

$agg_soldi= ("UPDATE personaggi SET soldi = soldi - $DEPOSITO WHERE id = 'nome'"
mysql_query("$agg_soldi") or die(mysql_error());


print "<script language='javascript'>alert('Deposito effettuato con successo.');</script>";
}


mysql_close ($connessione);


?>
<html>
<head>
<title>Deposita</title>
<link rel="stylesheet" href="../stile.css" type="text/css">
</head>

<center>
<h1><font color="#800000">Banca</font></h1>
<br><br><br>
<form method="post" action="banca.php" name="DEPOSITA">
<input type="Submit" name="Indietro" value="Indietro" class="textFieldBase">
</form>
</center>
</html>

Mentre per quanto riguarda lo schema della tabella nel DB è questo:
2yo4sg2.png


281yl48.png


Grazie per l'interessamento!Spero di risolvere...
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
prima scrivi
WHERE id = " . $_SESSION['id_pg'];
poi scrivi
SET Banca = Banca + $DEPOSITO WHERE id = 'nome'"

perché ??????
 

Andrea_2017

Utente Attivo
17 Set 2017
26
0
1
39
prima scrivi
WHERE id = " . $_SESSION['id_pg'];
poi scrivi
SET Banca = Banca + $DEPOSITO WHERE id = 'nome'"

perché ??????

ho sbagliato a postare infatti...è un refuso..dopo le numerose prove fatte
tuttavia nonostante io metta

SET Banca = Banca + $DEPOSITO WHERE id = " . $_SESSION['id_pg'];

comunque non va!
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
$DEPOSITO ha decimali ? separati dal punto o dalla virgola ? quale dei due vuole il db che stai usando ?

prova a mettere un valore fisso al posto della variabile
con il punto 1.11
e poi prova con la virgola 1,11

che effetto fa ?
 

Andrea_2017

Utente Attivo
17 Set 2017
26
0
1
39
Il codice "esatto" è questo

PHP:
<?php
session_start();
require '../../config/includes_into.php';

// controllo sessione
if (empty($_SESSION['id_pg'])) {
 header("Location:../index.php"); } 
// fine controllo sessione

$db=dbconnect();
$sq="SELECT soldi FROM personaggi WHERE id = " . $_SESSION['id_pg'];
$Result = mysql_query($sq);
   $rs = mysql_fetch_array($Result);
            $soldi = $rs["soldi"];
If ($soldi < $DEPOSITO){
        echo "<script language='javascript'>alert('Non Possiedi Questa Somma');</script>";
    }
   else {
$deposito= ("UPDATE personaggi SET Banca = Banca + $DEPOSITO WHERE id = " . $_SESSION['id_pg']);
mysql_query("$deposito") or die(mysql_error());

$agg_soldi= ("UPDATE personaggi SET soldi = soldi - $DEPOSITO WHERE id = " . $_SESSION['id_pg']);
mysql_query("$agg_soldi") or die(mysql_error());


print "<script language='javascript'>alert('Deposito effettuato con successo.');</script>";
}


mysql_close ($connessione);


?>

e mi genera questo errore:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 390' at line 1
 

Andrea_2017

Utente Attivo
17 Set 2017
26
0
1
39
Allora se metto 1.11 mi deposita con successo ma esce poi questo errore

Warning: mysql_close() expects parameter 1 to be resource, null given in /web/htdocs/sito/home/dm/gioco/banca/do_deposita.php on line 30

ci siamo vicini alla soluzione? :(
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
devi assicurarti che $DEPOSITO contenga il punto come separatore dei decimali, quindi,
se tratti gli importi con il separatore delle migliaia, e dei decimali, in formato italiano
1.234,56
devi eliminare i punti
e convertire la virgola in punto
prima di passare la variabile alla query

se non tratti il separatore delle migliaia ma solo la virgola per separare i decimali
1234,56
devi convertire la virgola in punto
prima di passare la variabile alla query

tutto chiaro ?

per quanto riguarda mysql_close(), cerca sul manuale mysql (google) l'istruzione close e vedi come deve essere scritta,
probabilmente vuole la connessione tra le parentesi ma non conosco ....

fai sapere
 

Andrea_2017

Utente Attivo
17 Set 2017
26
0
1
39
devi assicurarti che $DEPOSITO contenga il punto come separatore dei decimali, quindi,
se tratti gli importi con il separatore delle migliaia, e dei decimali, in formato italiano
1.234,56
devi eliminare i punti
e convertire la virgola in punto
prima di passare la variabile alla query

se non tratti il separatore delle migliaia ma solo la virgola per separare i decimali
1234,56
devi convertire la virgola in punto
prima di passare la variabile alla query

tutto chiaro ?

per quanto riguarda mysql_close(), cerca sul manuale mysql (google) l'istruzione close e vedi come deve essere scritta,
probabilmente vuole la connessione tra le parentesi ma non conosco ....

fai sapere

La tua spiegazione è chiarissima...il problema è che non so come fare per vedere se $DEPOSITO contiene o meno il punto
Come avevo anticipato...molte cose ancora mi sono sconosciute..imparo man mano
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
puoi inserire la riga
PHP:
...
$DEPOSITO = str_replace(",", ".", str_replace(".", "", $DEPOSITO));
$db=dbconnect();
$sq="SELECT soldi FROM personaggi WHERE id = " . $_SESSION['id_pg'];
...

oppure puoi inserire nello script questa funzione

PHP:
function ValidateFloat($float) {
  $val = htmlentities(strip_tags(trim($float)));
  $val = str_replace(",", ".", str_replace(".", "", $val));
  $val = (float)filter_var($val, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
  return $val;
}

e la riga diventa

PHP:
$DEPOSITO = ValidateFloat($DEPOSITO);
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
ps,
la funzione che ti ho proposto, ha lo scopo di ripulire ciò che arriva dal browser, da "comandi maligni" che possono interagire con le tue pagine, la puoi quindi usare per gestire $_POST e $_GET
PHP:
$DEPOSITO = ValidateFloat($_POST['deposito']);
potresti creare funzioni analoghe, per tutti i tipi di input che prevedi di utilizzare, rendendo più facile e pulita la gestione
 

Andrea_2017

Utente Attivo
17 Set 2017
26
0
1
39
Ok ora non mi da più nessun errore....però non mi effettua il deposito..sto per strapparmi i capelli :mad:
In tasca ho 500...ne deposito 100 e in tasca me ne restano sempre 500..insomma non cambia nulla.

PHP:
<?php
session_start();
require '../../config/includes_into.php';

// controllo sessione
if (empty($_SESSION['id_pg'])) {
 header("Location:../index.php"); } 
// fine controllo sessione


$db=dbconnect();

function ValidateFloat($float) {
  $val = htmlentities(strip_tags(trim($float)));
  $val = str_replace(",", ".", str_replace(".", "", $val));
  $val = (float)filter_var($val, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
  return $val;
}
$DEPOSITO = ValidateFloat($DEPOSITO);

$sq="SELECT soldi FROM personaggi WHERE id = " . $_SESSION['id_pg'];

$Result = mysql_query($sq);
   $rs = mysql_fetch_array($Result);
            $soldi = $rs["soldi"];
If ($soldi < $DEPOSITO){
        echo "<script language='javascript'>alert('Non Possiedi Questa Somma');</script>";
    }
   else {
$deposito= ("UPDATE personaggi SET Banca = Banca + $DEPOSITO WHERE id = " . $_SESSION['id_pg']);
mysql_query("$deposito") or die(mysql_error());

$agg_soldi= ("UPDATE personaggi SET soldi = soldi - $DEPOSITO WHERE id = " . $_SESSION['id_pg']);
mysql_query("$agg_soldi") or die(mysql_error());


print "<script language='javascript'>alert('Deposito effettuato con successo.');</script>";
}



mysql_close ();


?>
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
sembra che il problema del where sia risolto, continuando con gli altri problemi,

la persona la riconosci da qui,
PHP:
if (empty($_SESSION['id_pg'])) {
 header("Location:../index.php"); }
e deposito da dove arriva ?

perché non provi a postare il form completo ?
 

Andrea_2017

Utente Attivo
17 Set 2017
26
0
1
39
Il form è questo:

HTML:
<table width=100% align=center  border=0 cellspacing=0 cellpadding=0>
<form method="post" action="do_deposita.php" name="DEPOSITA">
<tr>
<td align="center">Somma da depositare</td>
</tr>
<tr>
<td align="center"><input type="text" name="DEPOSITO" maxlength="11"></td>
</tr>
<tr>
<td align="center"><input type="Submit" name="DEPOSITA" value="Deposita" class="textFieldBase"></td>
</tr>
</table>
</form>
 <table width=100% align=center  border=0 cellspacing=0 cellpadding=0>
 <tr valign="middle">
    <td colspan="2" bgcolor=000000><img src=blank.gif width=0 height=1></td>
   </tr>

la cosa strana è che se al posto di $DEPOSITA faccio come mi hai consigliato tu ieri, ossia mettere un valore al posto della variabile, il valore che metto (ad esempio 100) questo mi viene effettivamente depositato in Banca..
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
la cosa strana è che
non c'è nulla di strano se si è capaci di identificare l'errore,

hai postato il form, ma non è in accordo con lo script do_deposita.php, script che non contiene la lettura dell'input
quindi ancora non so dove prendi il valore $DEPOSITO

al contempo nello script citato non c'è l'ombra di un controllo sugli errori, nel caso succeda un errore lo script non reagisce ...

mi permetto di postarti il form e lo script modificati (senza uso del db) che almeno dimostrano il funzionamento, a te ora sistemare i tuoi ...
HTML:
<?php
session_start();

$_SESSION['id_pg'] = 1023;
?>

<form method="post" action="do_deposita.php" name="DEPOSITA">
<tr>
<td align="center">Somma da depositare</td>
</tr>
<tr>
<td align="center"><input type="text" name="DEPOSITO" maxlength="11"></td>
</tr>
<tr>
<td align="center"><input type="Submit" name="DEPOSITA" value="Deposita" class="textFieldBase"></td>
</tr>
</table>
</form>
PHP:
<?php
session_start();
// require '../../config/includes_into.php';

if ( empty($_SESSION['id_pg']) ) {
    header("Location: index.php"); }

$DEPOSITO = ValidateFloat($_POST['DEPOSITO']);
echo "deposito = ".$_POST['DEPOSITO']."<br /><br />";
echo "deposito = ".$DEPOSITO."<br /><br />";

if ( empty($DEPOSITO) ) {
    header("Location: index.php"); }

$soldi = 20000;

// $db=dbconnect();

$sq="SELECT soldi FROM personaggi WHERE id = " . $_SESSION['id_pg'];
echo $sq."<br /><br />";

// $Result = mysql_query($sq);
//    $rs = mysql_fetch_array($Result);
//        $soldi = $rs["soldi"];

If ($soldi < $DEPOSITO)
{
    echo "<script language='javascript'>alert('Non Possiedi Questa Somma');</script>";
}
else
{
    $deposito = ("UPDATE personaggi SET Banca = Banca + $DEPOSITO WHERE id = " . $_SESSION['id_pg']);
    //mysql_query("$deposito") or die(mysql_error());
    echo $deposito."<br /><br />";

    $agg_soldi= ("UPDATE personaggi SET soldi = soldi - $DEPOSITO WHERE id = " . $_SESSION['id_pg']);
    //mysql_query("$agg_soldi") or die(mysql_error());
    echo $agg_soldi."<br /><br />";

    print "<script language='javascript'>alert('Deposito effettuato con successo.');</script>";
}
mysql_close ();

function ValidateFloat($float) {
    $val = htmlentities(strip_tags(trim($float)));
    $val = str_replace(",", ".", str_replace(".", "", $val));
    $val = (float)filter_var($val, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
    return $val;
}
upload_2017-10-14_19-49-26.png
 
Discussioni simili
Autore Titolo Forum Risposte Data
T [php] problema creazione query select-where PHP 5
K [php] Problema con inner join PHP 4
K [PHP] Problema con variabili concatenate. PHP 1
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
D problema php mysql PHP 1
D problema php mysql PHP 1
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
A Problema checkout carrello php PHP 2
G Problema caricamento tabelle MySql da PhP PHP 0
M Problema con php per calcolo costo percentuale PHP 7
O Problema Formmail in PHP su Aruba PHP 0
WebmasterFioriniAndrea Chat e php [problema] PHP 3
L [PHP] Problema con Telegram PHP 1
WebmasterFioriniAndrea [PHP] Problema che non mi fa vedere niente PHP 2
K Help: problema con uno script di booking in php! PHP 0
A [PHP] Problema query insert [RISOLTO] PHP 14
N [Apache] problema con estensione php Apache 0
C [PHP] Problema con download file PHP 0
M [PHP] Problema con preg_match PHP 1
gandalf1959 [PHP] problema con l'utilizzo di Header PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
M [PHP] Problema con query select PHP 2
L Problema jQuery validation AJAX (PHP 7) PHP 6
L Problema funzione mail() PHP PHP 3
S [PHP] Problema con istruzione "use" PHP 23
A Problema PHP PHP 1
M [PHP] problema if PHP 3
L [PHP] Problema su codice o server PHP 5
T [PHP] problema maggiore e minore PHP 4
Cosina [PHP] fwrite problema con le parole accentate PHP 9
M [PHP] Problema search form PHP 3
F [PHP] Problema con number_format PHP 3
L [PHP] problema count messo in una funzione. PHP 1
P [PHP] Progettino CRUD di esercitazione. Problema su $_FILE. PHP 9
trattorino [PHP] problema entrata immagini insert PHP 1
C Apache Cordova problema con php Programmazione 1
trattorino problema raccapricciante php conteggio query PHP 4
T PHP+MYSQL: problema con quelle maledette lettere accentate... PHP 5
F [PHP] Problema con array multidimensionale PHP 4
F Problema con pagine login in PHP PHP 2
M [PHP] Problema script ricezione e invio posta... PHP 1
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [PHP] Problema Invio Email Elseif PHP 2
A [PHP] Problema invio mail con funzione mail() PHP 3
gandalf1959 problema con la codifica caratteri accentati e speciali tra php e mysql PHP 3
L [PHP] Problema Script 'Not Found' PHP 4
webmachine [PHP][MYSQL] Problema con le SELECT PHP 5
alessandra86 [PHP] Popolamento database con form ricorsivi - problema array (foreach ) PHP 5
MattiaBL [PHP] Problema ciclo while PHP 3
dvdscr [PHP] Problema malfunzionamento Wordpress WordPress 13

Discussioni simili