[PHP] Problema WHERE

Andrea_2017

Utente Attivo
17 Set 2017
26
0
1
40
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?? :(
 
ciao
Ricontrolla i doppi apici..

Nn riesco a scrivere da cell, comunque
Mancano dei doppi apici prima del punto e virgola dopo il where
 
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
 
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

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...
 
prima scrivi
WHERE id = " . $_SESSION['id_pg'];
poi scrivi
SET Banca = Banca + $DEPOSITO WHERE id = 'nome'"

perché ??????
 
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!
 
$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 ?
 
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
 
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? :(
 
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
 
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
 
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);
 
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
 
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 ();


?>
 
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 ?
 
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..
 
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