Hallo ik heb een database met twee waarden punten en totpunten
nu probeer ik met deze code
mysql_query("UPDATE klaverjassen SET totpunten = '".$row['totpunten']." + $punten WHERE speler = $speler");

met een query haal ik de laatst bekende totpunten op en wil daar de in een formulier op gegeven punten bij optellen. Maar de waarde blijft in het nieuwe record op 0 nul staan
Alvast bedankt voor de hulp.

Luc Gomes
Luc Gomes op 15/08/2014 16:29:26

$row['totpunten'] geeft het aantal punten van het vorige record van de betreffende speler en $punten zou in de afhandeling van het formulier daarbij moeten worden opgeteld zodat er volgende week een andere waarde hangt aan $row['totpunten']

Is dit wat er met echo ook daadwerkelijk getoond wordt of is dit wat er volgens jou in zou moeten zitten?
allereerst heb ik geprobeerd om een verbinding te maken met mysqli dat werkt helaas (nog) niet bij mijn provider (hosting pakketje).
<?php
$con = mysqli_connect("localhost","xxxxxx","xxxxx","xxxxx");

// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
echo "verbonden met MySQL: "
?>
geen verbinding.

het optellen van de waarden gaat nog steeds niet de echo geeft wel de goede waarde.
hier onder mijn script

<?
$result = mysql_query("SELECT totpunten,totmarsen FROM klaverjassen WHERE speler=speler");
if (!$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
$row = mysql_fetch_row($result);


$speler = $_GET['speler'];
$punten = $_GET['punten'];


$sql = 'UPDATE klaverjassen
SET totpunten=$row[0]+$punten
WHERE speler=".$speler."';
$retval = mysql_query( $sql );
if(! $retval )
{
die('Could not update data: ' . mysql_error());
}
echo "Updated data successfully\n";
?>
wat doe ik fout
Bij de quotes ga je de mist in:

<?php
$sql = 'UPDATE klaverjassen
        SET totpunten=$row[0]+$punten
        WHERE speler=".$speler."';
?>

zie de kleurtjes en besef dat die puntjes concatenate operators van php zijn, maar omdat je de string in php niet afsluit (geen enkele quote achter de dubbele) komen ze nu terecht in je query string. En dat betekent dat je zoekt op een speler wiens naam begint en eindigt met een punt. Ik durf te stellen dat die niet gevonden wordt (maar de query klopt verder dus je krijgt geen foutmelding).

Hoe het wel moet weet je zelf ook wel, dus dat hoef ik niet voor te doen.
Bij het maken van je databaseverbinding, zou je een foutmelding moeten krijgen. Welke is dat?
Waarom gebruik je bij de databaseverbinding myqli en in de andere code mysql?

Debuggen: echo de query ($sql) en zie wat er dan staat. Is dat wat er staat wat je verwacht? Of, zoals Erwin H aangeeft, wat anders?

Waarom regel 10 en 11?
Je query is onveilig, omdat je nergens controleert of $_GET['punten'] wel een getal is en $_GET['speler'] gebruik je onbeveiligd (--> mysql_real_escape_string).

Wees consequent in het gebruik van " en '
Op regel 4 echo je met ' op andere plaatsen met "
Op regel 2 gebruik je bij mysql " en op regel 14 ineens '

Verder is het nu vermoedelijk voor iedereen erg makkelijk om in een url een naam en punten te zetten, waarna de database wordt geupdate. Pietje of Carla kan dan zijn/haar naam in de url zetten en 100 punten.
obelix,

eerder werd mij aangeraden om mysqli te gebruiken maar mijn hosting provider kan dat volgens mij (nog) niet aan.
Probeerde met mysqli een verbinding te maken en kreeg een fout melding dat de syntax niet werd herkend ofzo.

ik ben een complete beginneling in php dus het ziet er inderdaad best wel rommelig uit. daar moet ik aan werken. dat laatste van pietje of carla is voor mij abacadabra jezal ongetwijfeld gelijk hebben maar hoe beveilig ik dat dan?

Luc

[size=xsmall]Toevoeging op 17/08/2014 13:09:31:[/size]

even off topic of misschien ook wel helemaal niet in:
<?php
$sql = 'UPDATE klaverjassen
SET totpunten=$row[0]+$punten
WHERE speler=".$speler."';
?>
is $spelen een string volgens mij gaat het daarom fout.
Nu heb ik het volgende:

   
 <script language="javascript" type="text/javascript">
            function populateData(id)
            {
                alert('in populateData');
                y = document.getElementById("spelerid");
                document.getElementById("speler").value = speler[y.selectedIndex];
            }
    </script>
    <body>
        <?php
            mysql_connect("localhost", "xxxx", "xxxx") or die("Connection Failed");
            mysql_select_db("xxxxx")or die("Connection Failed");
            $query = "SELECT * FROM speler";
            $result = mysql_query($query);
        ?>              
        <select id="spelerid" class="dropdown" onchange="populateData(this.value)">


            <?php
                while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
            ?>  
            <option value="<?php echo $line['speler'];?>"> <?php echo $line['speler'];?>
            <?php
                $id = $line['spelerid'];           
                $source_name = $line['speler'];
                }
            ?>
        </select>               
        <P><INPUT ID="spelerid" TYPE="TEXT" NAME="spelerid" SIZE="25"></P>    
     
    </body>
 

hierbij is het de bedoeling dat ik uit de speler tabel de speler selecteer en dat ik daar automatisch de bijbehorende ID in de input box krijg tot nu toe krijg ik alleen de alert "in populateData"
Heeft iemand een idee wat hier fout gaat?
Luc Gomes op 17/08/2014 12:54:07

eerder werd mij aangeraden om mysqli te gebruiken maar mijn hosting provider kan dat volgens mij (nog) niet aan.
Probeerde met mysqli een verbinding te maken en kreeg een fout melding dat de syntax niet werd herkend ofzo.

de kans dat je hostingprovider geen mysqli ondersteunt lijkt me klein. Anders zou ik op zoek gaan naar een ander.
Vermoedelijk heb je ergens een fout in je code zitten.
Maar als je hulp nodig hebt, zul je die moeten geven (of zelf moeten zoeken op internet).

Luc Gomes op 17/08/2014 12:54:07

dat laatste van pietje of carla is voor mij abacadabra jezal ongetwijfeld gelijk hebben maar hoe beveilig ik dat dan?

Vraag 1 is waarom je met GET werkt en niet met POST in je formulier.
Als je straks een url krijgt als
http://www.mijnwebsite/update.php?naam=pietje&punten=100 is dat door iedereen heel eenvoudig te wijzigen. Ik verander pietje in obelix en 100 en 1000.
Zit die update.php (ik weet niet hoe het bij jou heet) achter een inlogpagina / zit er een beveiliging op? Dan wordt het al wat lastiger. Verder zou ik in ieder geval gaan werken met POST.


Plaats je code aub tussen code-tags ( [.code.] / [/.code.] zonder punten).
Zo is het niet echt leesbaar.

$id = $line['spelerid'];          
$source_name = $line['speler'];

Wat is hier de reden voor?

Heb je nou de andere problemen al opgelost? Of ga je verder met iets, terwijl het vorige nog niet (goed) werkt?
Zoals ik al vertelde ben ik een beginneling en ik dacht begrepen te hebben dat het WHERE met een integer erin het beste werkt.
Nu bevat de WHERE de speler(naam), in mij formulier selecteer ik de spelers met een dropdown uit de tabel spelers.
Nu wil ik ook het spelerid opnemen in de tabel klaverjassen zodat de getallen op de juiste plaats worden opgeteld als dat al werkt :).

En ja zowel het formulier als "procces.php" zitten achter een inlog beveiliging.
Is het heel veel (extra) moeite om een punt (.) en/of komma (,) in je tekst te zetten. En hier en daar een Hoofdletter aan het begin van een zin. Bovenstaande is voor mij compleet onleesbaar.

En pas je vorige post even aan met die code-tags aub.
Geregeld beide aangepast sorry voor de onhandigheid.

[size=xsmall]Toevoeging op 17/08/2014 14:23:34:[/size]

We komen dichterbij maar het is het nog steeds net niet:

<?
$result = mysql_query("SELECT totpunten,totmarsen FROM klaverjassen WHERE speler=speler");
if (!$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
$row = mysql_fetch_row($result);

echo $row[0];
echo $punten;

$sql = mysql_query("UPDATE klaverjassen SET totpunten = '".$row[0]."' + '".$_GET['punten']."' WHERE speler = '".$_GET['speler']."'");

$retval = mysql_query( $sql );
if(! $retval )
{
die('Could not update data: ' . mysql_error());
}
echo "Updated data successfully\n";
?>

geeft de volgende foutmelding maar ik kan nergens de '1' vinden in de query.

3546 (totpunten vorige week)
3647 (punten deze week beide met de echo)


Could not update data: 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 '1' at line 1

Ik ben zo vrij geweest om de line leesbaarder te maken.
Slordig:

<?php
$result = mysql_query("SELECT totpunten,totmarsen 
                       FROM klaverjassen 
                       WHERE speler=speler");
?>

En dan doel ik op dat 'WHERE speler=speler'. Dan haal je namelijk alle spelers op.... dat is neem ik aan toch ook weer niet de bedoeling.

En die '1' in je query komt ongetwijfeld voort uit de data die je in de string plakt. Dus als je gewoon naar je code blijft staren kom je die nooit tegen. Wat je (altijd!) moet doen bij een fout in je sql, is de query string echo'en zoals mysql die voor zijn kiezen krijgt. Dus in jouw geval op regel 12 zet je even om te testen:

<?php
//$sql = mysql_query("UPDATE klaverjassen SET totpunten = '".$row[0]."' + '".$_GET['punten']."' WHERE speler = '".$_GET['speler']."'");
echo "UPDATE klaverjassen 
      SET totpunten = '".$row[0]."' + '".$_GET['punten']."' 
      WHERE speler = '".$_GET['speler']."'";
exit;
?>

En leer svp ook af om die hele query om 1 regel te proppen, maakt het zo verschrikkelijk onleesbaar. Een php script schrijf je ook niet op 1 regel, hoewel het voor de parser niets uitmaakt.

Reageren