"$variable" ist überflüssig, einfach nur $variable, ohne Anführungszeichen.
Du testet das Zustandekommen der Datenbankverbindung nicht ab und Dank den @ vor den Funktionen wird nicht mal mehr eine Warnung ausgegeben. Sollte man ändern.
Das Skript ist anfällig für SQL Injections, auch in einer nicht-feindlich gesinnten Umgebung, da muss keine böse Absicht dahinter stecken.
http://en.wikibooks.org/wiki/Program...:SQL_Injection
$name ist doch bestimmt eine Zeichenkette. Zeichenketten müssen auch für den Mysql Server in Anführungzeichen gesetzt werden. WHERE name=Anton ist ungültig*, es muss als WHERE name='Anton' beim Mysql Server ankommen.
(edit: * bzw deutet der Mysql Server Anton dann als Feldnnamen und wieviele Tabellen haben schon ein Feld namens Anton? ;))
mysql_query() liefert keine Zahl oder Zeichenkette, es liefert eine Ergbnisresource. Mittels dieser Resource kann man auf die Datensätze und die einzelnen Werte zugreifen. Dafür muss man allerdings eine Funktion aufrufen, wie zum Beispiel
mysql_fetch_array oder
mysql_result.
Das SELECT ist überflüssig. Du musst den Wert nicht abholen, da Du das im UPDATE in einem machen kannst.
Die Parameter werden jetzt also doch per GET übergeben? D.h. der ganze Hokuspokus
Code:
Get POST variables and put into superglobal array
$p_data = implode('', file('php://input'));
$p_data = explode('&', $p_data);
foreach ($p_data as $p_val) {
$d_parts = explode('=', $p_val);
$_POST[$d_parts[0]] = urldecode($d_parts[1]);
}
(als könnte php nicht selbst POST Daten parsen ;)) kann ersatzlos gestrichen werden?
PHP-Code:
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
//Zum testen
$test = "Test";
echo "<pre class=\"debug\">\n";
echo 'test: '; var_dump($test);
echo '_GET: '; var_dump($_GET);
echo "</pre>\n";
//----------
if(!isset($_GET['user'],$_GET['free'])) {
echo 'Parameter user oder free fehlt';
die();
}
$host = "localhost";
$user = "**********";
$pass = "**********";
$dbname = "************";
$mysql = @mysql_connect($host, $user, $pass) or die(mysql_error());
@mysql_select_db($dbname, $mysql) or die(mysql_error($mysql));
$sql="UPDATE
jos_users
SET
free = free + " . intval($_GET['free']) . "
WHERE
name='". mysql_real_escape_string($_GET['user'], $mysql) . "'";
echo '<p class="debug">' . htmlentities($sql) . "</p>\n";
$result=mysql_query($sql, $mysql) or die(mysql_error($mysql));
echo mysql_affected_rows($mysql) . ' Datensätze wurden aktualisiert';