Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  4 866
Hei freaks!

KODE:

Kode

// Update reinstall counter for this machine
$sql = "UPDATE `inventory` SET `reinstall` = `reinstall` +1 WHERE `atag` = '{$_GET['atag']}' LIMIT 1";
$query = $database->query($sql);
Som dere ser prøver jeg å oppdatere verdien `reinstall`. Den skal øke 1 for hver gang spørringen kjøres.

Problemet er at når jeg kjører dette gjennom scriptet mitt vil ikke verdien økes.
Jeg har prøvd spørringen i PHPmyadmin, og det funker akkurat som det skal. Velger jeg "create PHP code", får jeg akkurat samme kode som jeg selv har skrevet i PHP.

Nå har jeg ikke gitt fra meg så mye kode og eller forklaring, men det er ikke så mye å gi heller..

Er det noen som har en tanke om hva som går galt her?
Sitat av KayBeeOui Vis innlegg

Kode

// Update reinstall counter for this machine
$sql = "UPDATE `inventory` SET `reinstall` = `reinstall` +1 WHERE `atag` = '{$_GET['atag']}' LIMIT 1";
$query = $database->query($sql);
Vis hele sitatet...
Dette er vidåpent for SQL injection. Husk alltid real_escape_string for variabler utenfra.

Kode

$sql = sprintf("UPDATE `inventory` SET `reinstall` = `reinstall` +1 WHERE `atag` = '%s' LIMIT 1", $database->real_escape_string($_GET['atag']));
$query = $database->query($sql);
Men jeg vet ikke hvorfor det ikke fungerer. Prøv å echo det så du kan kontrollere at det faktisk er helt likt som PhpMyAdmin, eller sett inn en kontroll etterpå.

Kode

if (!$query)) {
    printf("Error: %s\n", $database->sqlstate);
}
Trådstarter
5 0
Sitat av khh Vis innlegg
Dette er vidåpent for SQL injection. Husk alltid real_escape_string for variabler utenfra.
Vis hele sitatet...
Det er jeg klar over. Men sikkerhet er ikke en viktig faktor her, da dette ikke er en nettside for "the public" e.l
Men takk for at du peker det ut!


Sitat av khh Vis innlegg
Men jeg vet ikke hvorfor det ikke fungerer. Prøv å echo det så du kan kontrollere at det faktisk er helt likt som PhpMyAdmin, eller sett inn en kontroll etterpå.
Vis hele sitatet...
Det viste seg faktisk å være en feil i $sql.. det er flaut hvor mange ganger man kan lese en kort linje uten å se en feil...

$_GET['atag'] skulle vært $_GET['ASSET']

MEN.. takket være deg fant jeg feilen, så mange takk, min venn
Sitat av KayBeeOui Vis innlegg
Det er jeg klar over. Men sikkerhet er ikke en viktig faktor her, da dette ikke er en nettside for "the public" e.l
Men takk for at du peker det ut!
Vis hele sitatet...
Joda, men det koster liksom så lite ekstra og er en god vane.

Sitat av KayBeeOui Vis innlegg
Det viste seg faktisk å være en feil i $sql.. det er flaut hvor mange ganger man kan lese en kort linje uten å se en feil...

$_GET['atag'] skulle vært $_GET['ASSET']
Vis hele sitatet...
Har gjort akkurat samme type feil mange, mange ganger selv også. Derfor er det første jeg gjør når noe ikke funker echo 'sql: "' . $sql . '"<br />';
Men flott det ordnet seg
Siden folk allerede uansett henger seg opp i detaljer: Du burde kanskje begynne å se på å ta i bruk prepared-statements. Dette kan gjøres via f.eks. PDO.

Et eksempel:

Kode

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
?>
Du kan se mange gode eksempler på hvordan det gjøred her:
http://php.net/manual/en/pdo.prepared-statements.php