Abfragen durch Array funktioniert nicht
Guschner
- php
hallo zusammen,
irgendwie funktioniert das nicht. ich möchte 2 verschiedene abfragen an die datenbank senden, einmal mit SELECT und einmal UPDATE, aber er macht es nicht:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$link = mysql_connect($dbhost, $dbuser, $dbpass)
or die ("Could not connect");
mysql_select_db ($dbname)
or die ("Could not select database");
$sqls = array("UPDATE tutorials SET clicks = 'clicks +1' WHERE id = '$id'", "SELECT * FROM tutorials WHERE id = '$id'");
foreach($sqls as $sql) {
$result = mysql_query($sql) OR die(mysql_error());
}
while($line = mysql_fetch_array($result)) {
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Wo ist denn da der Fehler? ich weiß es absolut nicht.
bin über jeden rat dankbar.
gruß guschner
p.s. ich hatte um ca. 17:00 uhr schon mal gepostet, in der zwischenzeit hat sich der code geändert
Hi @all!
$link = mysql_connect($dbhost, $dbuser, $dbpass)
or die ("Could not connect");
mysql_select_db ($dbname)
or die ("Could not select database");
Das interessiert mich eigentlich nicht so wirklich, das solltest du können
$sqls = array("UPDATE tutorials SET clicks = 'clicks +1' WHERE id = '$id'", "SELECT * FROM tutorials WHERE id = '$id'");
also ich persöhnlich würde das in $sql1 und $sql2 schreiben und beide nacheinader abschicken.
so erspart man sich das foreach, was bei älteren PHP-Versionen eh noch nicht läuft (ist das vielldht der fehler?)
$result = mysql_query($sql) OR die(mysql_error());
wenn du das bei foreach reinschreibst, wird zuerste die erste abfrage in result gespeichert, dann die zweite überspeichert.
Willst du das wirlich?
while($line = mysql_fetch_array($result)) {
soweit ok, aber es wird halt nur die zweite abfrage genommen.
bin über jeden rat dankbar.
toll
p.s. ich hatte um ca. 17:00 uhr schon mal gepostet, in der zwischenzeit hat sich der code geändert
das ist kein grund noch mal zu posten.
MfG, Dennis.
Servus nochmal,
Habs mal umgeschrieben:
+++++++++++++++++++++++++++++++++++++++++
mysql_query("UPDATE tutorials SET clicks = clicks + 1 WHERE id = $id") OR die(mysql_error());
$query = mysql_query("SELECT * FROM tutorials WHERE id = $id") OR die(mysql_error());
while($line = mysql_fetch_array($query)) {
+++++++++++++++++++++++++++++++++++++++++++
funktioniert allerdings immer noch nicht - ist da vielleicht ein fehler den ich die ganze zeit übersehe?
sorry wg. den doppelpost
gruß guschner
Hello,
funktioniert allerdings immer noch nicht - ist da vielleicht ein fehler den ich die ganze zeit übersehe?
Gibts denn keine Fehlermeldungen?
Liebe Grüße aus http://www.braunschweig.de
Tom
Servus
Gibts denn keine Fehlermeldungen?
doch undzwar gibt mySQl diese hier aus:
You have an error in your SQL syntax near '' at line 1
die Anmeldung etc. funktioniert ohne Probleme.
gruß Guschner
Hi @all!
Gibts denn keine Fehlermeldungen?
doch undzwar gibt mySQl diese hier aus:
> You have an error in your SQL syntax near '' at line 1
Das wäre die erste Linie?
klar, du hast $id nicht in '' gesetzt und nicht durch . . ergänzt.
Du musst das so machen: wenn du $befehl = "irgendeinbefehlmitirgendeiner$variablen" schreibst, heißt der Befehlt IMHO auch so. Du musst $befehl = "irgendeinbefehlmitirgendeiner".$variablen schreiben. Bedeutung: der punkt hängt die aktuelle variable da dran, dahinter kann es wieder weitergehen: "irgendwas".$variable."nochwas"
Jezt klar geworden?
MfG, Dennis.
Hello Dennis,
liest Du eigentlich auch mal, was Andere auf ein Posting antworten?
Deine Ratschläge sind in diesem Fall nicht zielführend.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo,
also ich habe jetzt folgendes übernommen:
$sql1 = "UPDATE tutorials ".
"SET clicks = clicks +1 ".
"WHERE id = $id";
$res = mysql_query($sql1,$link);
if (!$res) echo mysql_error();
$sql2 = "SELECT * FROM tutorials ".
"WHERE id = $id";
$res = mysql_query($sql2,$link);
if (!$res) echo mysql_error();
while($line = mysql_fetch_array($res))
dort erhalte ich dann die fehlermeldung:
You have an error in your SQL syntax near '' at line 1
You have an error in your SQL syntax near '' at line 1
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/web31/html/wks/tutorials.php on line 58
Bei dem Script vom Dennis habe ich ebenso gleichen fehler:
You have an error in your SQL syntax near '' at line 1
bezieht sich dieser fehler auf die erste sql-abfrage oder schon auf die verbindungsdaten? soweit ich weiß nur auf den ersten query oder?
gruß Guschner
Hi @all!
You have an error in your SQL syntax near '' at line 1
Was steht denn in der ALLERersten Zeile deines Scripts?
<?php vielleicht?
schick uns mal die komplette erste Zeile.
bezieht sich dieser fehler auf die erste sql-abfrage oder schon auf die verbindungsdaten? soweit ich weiß nur auf den ersten query oder?
Auf die erste Zeile im Script - da gehören die Verbindungsdaten dazu.
MfG, Dennis.
Servus,
hier einmal das komplette script ausser dem Ende, da sich dort sowieso nur html befindet.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<?php
$id = $_GET[id];
require "functions.php";
if ($id == "67") {
htmlheaderpopup();
}
else {
htmlheader();
}
require "dbconfig.php";
$id = $_GET[id];
$link = mysql_connect($dbhost, $dbuser, $dbpass)
or die ("Could not connect");
mysql_select_db ($dbname)
or die ("Could not select database");
$sql1 = "UPDATE tutorials ".
"SET clicks = clicks +1 ".
"WHERE id = $id";
echo htmlentities($sql1);
$res = mysql_query($sql1,$link);
if (!$res) echo mysql_error();
$sql2 = "SELECT * FROM tutorials ".
"WHERE id = $id";
echo htmlentities($sql2);
$res = mysql_query($sql2,$link);
if (!$res) echo mysql_error();
while($line = mysql_fetch_array($res)) {
$submenu2 = urlencode($line[submenu]);
include "ch.html";
print " <font class='location'>location: <a href='index.php' class='headline2'>home</a> // <a href='menu.php?&show=$line[menu]' class='headline2'>$line[menu]</a> // <a href='submenu.php?show=$submenu2&prog=$line[menu]' class='headline2'>$line[submenu]</a> // <a href='$_SERVER[PHP_SELF]?id=$id' class='headline2'>$line[title]</a>";
include ("cm.html");
print "<table border='0'>
<tr>
...
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Hello,
wenn du dir nun noch einmal den gesamten Thread durchliest, und erstmal nur auf unseren Dialog achtest, dann wirst Du feststellen, dass das Problem gefunden wurde:
In $id steht nichts drin.
Nun musst Du natürlich suchen, wieso nicht. Könnte es sein, dass die Zuweisung an $ID ging? Variablen sind casesensitive.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo,
In $id steht nichts drin.
Nun musst Du natürlich suchen, wieso nicht. Könnte es sein, dass die Zuweisung an $ID ging? Variablen sind casesensitive.
die Variable $id wird erhalte ich über GET, ist auch kleingeschrieben. ich habe nun auch die verkettung miteingebaut:
$sql1 = "UPDATE tutorials ".
"SET clicks = clicks +1 ".
"WHERE id = ".$id;
echo htmlentities($sql1);
$res = mysql_query($sql1,$link);
if (!$res) echo mysql_error();
$sql2 = "SELECT * FROM tutorials ".
"WHERE id = ".$id;
allerdings wieder mit der gleichen fehlermeldung.
gruß Guschner
Hi @all!
In $id steht nichts drin.
Wenn du sie über Post erhältst, musst du $_POST['id'] schreiben!
bei Get: $_GET['id']
die Variable $id wird erhalte ich über GET, ist auch kleingeschrieben. ich habe nun auch die verkettung miteingebaut:
oh, da stehts ja, also:
$sql1 = "UPDATE tutorials ".
"SET clicks = clicks +1 ".
"WHERE id = ".$_GET['id'];
usw.
MfG, Dennis.
DANKE euch beiden!
es hat soeben funktioniert. Es lag wohl wirklich an GET, wobei ich das ganz oben in der DAtei schon einmal zugewiesen habe.
Endlich - man das war aber eine schwere Geburt!
Nochmals DAnke und einen schönen Abend noch!!
Gruß Guschner
Hi @all!
DANKE euch beiden!
Bitte, gern geschehen!
es hat soeben funktioniert. Es lag wohl wirklich an GET, wobei ich das ganz oben in der DAtei schon einmal zugewiesen habe.
Jo, das ist glaube ich ab PHP >4 so, das man die über $_GET holen muss.
Endlich - man das war aber eine schwere Geburt!
was für eine Ausdrucksweise *g*
Nochmals DAnke und einen schönen Abend noch!!
Bitte, Bitte, freu mich ja auch, wenn wir dir helfen konnten!
MfG, Dennis.
PS: warum änderst du den Absender und nicht den Titel des Threads? (</faq/#Q-20>)
Hi,
PS: warum änderst du den Absender und nicht den Titel des Threads? (</faq/#Q-20>)
;-) Weil ich nicht wusste wies ging - aber jetzt weiß ich es *g* thx!
gruß Guschner
Hello,
$sql1 = "UPDATE tutorials ".
"SET clicks = clicks +1 ".
"WHERE id = ".$_GET['id'];
Das macht nun am besten gar nicht, einen GPC-Parameter direkt in ein SQL-Statement einbauen. Immer vorher den Gültigkeitsbereich des übergebenen Wertes prüfen.
$id = intval($_GET['id']);
würde immer einen numerischen Wert aus dem Paramter machen, egal was drinsteht. Wenn also was total falsches drinsteht, wird $id == 0. Nun könne es nur noch passieren, dass ein negativer Wert entsteht, der im Query auch nichts zu suchen hat. Auch das sollte man abfangen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
die Variable $id wird erhalte ich über GET, ist auch kleingeschrieben. ich habe nun auch die verkettung miteingebaut:
eben nicht, denn bei der Kontrollausgabe des SQL-Strings ist sie ja nicht vorhanden.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
dort erhalte ich dann die fehlermeldung:
You have an error in your SQL syntax near '' at line 1
You have an error in your SQL syntax near '' at line 1
Die einzigen Stellen, an denen ein Leerstring eingeschleppt werden kann, ist die Variable $id, und um das herauszufinden, solltets Du dir nun doch mal langsam die SQL-Strings vor dem Query ausgeben lassen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi @all!
liest Du eigentlich auch mal, was Andere auf ein Posting antworten?
klar, aber hier antwortest du bisher nur du - übrigends hab ich schon alles von dir gelesen.
Deine Ratschläge sind in diesem Fall nicht zielführend.
das ist die Frage, oder will es wirklich $id da reinschreiben? Dollar BuchstabeI BuchstabeD, oder was?
Ansonsten muss man sich den String zusammenbasteln.
MfG, Dennis.
Hello,
You have an error in your SQL syntax near '' at line 1
In solch einem Fall empfiehlt es sich, das ausgerechnete (nicht ausgeführte) SQL-Statement nochmal zur Kontrolle ausgeben zu lassen:
$sql1 = "UPDATE tutorials ".
"SET clicks = clicks +1 ".
"WHERE id = $id";
echo htmlentities($sql1);
$res = mysql_query($sql1,$link);
if (!$res) echo mysql_error();
$sql2 = "SELECT * FROM tutorials ".
"WHERE id = $id";
echo htmlentities($sql2);
$res = mysql_query($sql2,$link);
if (!$res) echo mysql_error();
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi,
You have an error in your SQL syntax near '' at line 1
In solch einem Fall empfiehlt es sich, das ausgerechnete (nicht ausgeführte) SQL-Statement nochmal zur Kontrolle ausgeben zu lassen:
Dort kommt dann diese Meldung:
UPDATE tutorials SET clicks = clicks +1 WHERE id = You have an error in your SQL syntax near '' at line 1
SELECT * FROM tutorials WHERE id = You have an error in your SQL syntax near '' at line 1
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/web31/html/wks/tutorials.php on line 62
gruß Guschner
Hello,
Dort kommt dann diese Meldung:
es handelt sich um zwei Meldungen
Das ist die Ausgabe des Strings:
UPDATE tutorials SET clicks = clicks +1 WHERE id =
Und das ist die Fehlermeldung, die das Query zurückgibt:
You have an error in your SQL syntax near '' at line 1
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi @all!
Hier folgt die korriegierte Version:
+++++++++++++++++++++++++++++++++++++++++
$sql1 = "UPDATE
tutorials
SET
clicks = clicks + 1 <-- envetuell clicks + 1 noch in Anführungzeichen
WHERE
id = ".$id;
mysql_query($sql1) OR die(mysql_error());
$sql2 = "SELECT
*
FROM
tutorials
WHERE
id = ".$id;
$query = mysql_query("SELECT * FROM tutorials WHERE id = $id") OR die(mysql_error());
+++++++++++++++++++++++++++++++++++++++++++
Probiers mal aus - was sollen eigentlich die beiden Abfragen bringen?
MfG, Dennis.
Hi @all!
Hier folgt die korriegierte Version:
Und hier die korriegierte korriegierte Version:
+++++++++++++++++++++++++++++++++++++++++
$sql1 = "UPDATE
tutorials
SET
clicks = 'clicks +1'
WHERE
id = '".$id."'";
mysql_query($sql1) OR die(mysql_error());$sql2 = "SELECT
*
FROM
tutorials
WHERE
id = '".$id."'";
$query = mysql_query("SELECT * FROM tutorials WHERE id = $id") OR die(mysql_error());
+++++++++++++++++++++++++++++++++++++++++++
So schon eher.
Meines Erachtens ist es wichtig, die Punkte zu machen!
MfG, Dennis.
Hello,
$sql1 = "UPDATE tutorials ".
"SET clicks = clicks +1 ".
"WHERE id = $id";
$res = mysql_query($sql1,$link);
if (!$res) echo mysql_error();
$sql2 = "SELECT * FROM tutorials ".
"WHERE id = $id";
$res = mysql_query($sql2,$link);
if (!$res) echo mysql_error();
Meines Erachtens ist es wichtig, die Punkte zu machen!
Nö, wenn clicks ein numerisches Feld ist, dann kann man da nicht den String 'clicks + 1' reinschreiben.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi @all!
Meines Erachtens ist es wichtig, die Punkte zu machen!
Nö, wenn clicks ein numerisches Feld ist, dann kann man da nicht den String 'clicks + 1' reinschreiben.
Hi tom, es ging hier um die Punkte vor und nach den Variablen und nicht um die Anführungszeichen bei Clickst.
Gut, jetzt haben wir (oder du) schon mal das Problem mit dem click gelöst: KEINE Anführungsstriche.
Aber es ist trotzdem wichtig, die MySQL befehle richtig aufzubauen, wenn da eine Variable reinkommt muss die eben mit Punkten eingebaut werden.
MfG, Dennis.
Hello,
Aber es ist trotzdem wichtig, die MySQL befehle richtig aufzubauen, wenn da eine Variable reinkommt muss die eben mit Punkten eingebaut werden.
Nein, das muss man nicht. Lies Dir dazu bitte das Kapitel über Strings in PHP durch. http://de.php.net/types.string
Man sollte allerdings niemals ungeprüfte "Variablen", also externe Paramter ohne mysql_(real_)escape_string() in den String einfügen. Wenn man dies inline tut, benötigt man allerdings die Punkte für die verkettung der Funktionen mit dem übrigen SQL-String.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi @all!
1. echo 'normaler text und $variable'; --> funktioniert nicht
2. echo 'normaler text und ' . $variable; --> funktioniert
1. echo "normaler text und $variable"; --> funktioniert
2. echo "normaler text und " .$variable; --> funktioniert
Was ich sagen will ist folgendes:
Du hast recht, wenn du sagst, die zweite nr.1 tut es auch, aber; beim ersten Beispiel geht das nicht!
Deshalb möchte ich anderen immer raten, die zweite Mehtode zu verwende, da diese immer geht.
Ich hoffe, dir ist klar was ich meine.
Übrigends, deinen Link hab ich mir durchgelesen.
MfG, Dennis.
Hello,
- echo 'normaler text und $variable'; --> funktioniert nicht
Kann ja auch nicht, weil das so vorgesehen ist.
- echo 'normaler text und ' . $variable; --> funktioniert
muss, weil der Parser einen zusätzlichen Zyklus für die Konkatinierung verwendet.
- echo "normaler text und $variable"; --> funktioniert
Muss, weil die soppelten Häkchen den Parser anweisen, den String zu evaluieren. das ist also so vorgesehen!
- echo "normaler text und " .$variable; --> funktioniert
muss, weil der Parser einen zusätzlichen Zyklus für die Konkatinierung verwendet.
Deshalb möchte ich anderen immer raten, die zweite Mehtode zu verwende, da diese immer geht.
Und ich möchte raten, immer die passende, dafür vorgesehene Methode zu verwenden und außerdem lieber mehr Augenmerk auf die Sicherheit gegen Injizierung zu verwenden.
Übrigends, deinen Link hab ich mir durchgelesen.
Bitte, dafür hatte ich ihn gepostet. Hoffentlich hast Du auch verstanden, was dort beschrieben wird.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Tom,
[...]
- echo "normaler text und $variable"; --> funktioniert
Muss, weil die soppelten Häkchen den Parser anweisen, den String zu evaluieren. das ist also so vorgesehen!
eval ist so böse, daß es von Interpol(ieren) gejagt wird. ;)
*SCNR*
Gruß Alex
Hello,
eval ist so böse, daß es von Interpol(ieren) gejagt wird. ;)
eval() ist überhaupt nicht böse. Man muss nur wissen, wann und wie man es einsetzt.
Du könntest auf deinem WinDOS-PC ja auch >debug aufrufen und dann einen Jump auf 0000 eingeben. das ist echt böse.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
$link = mysql_connect($dbhost, $dbuser, $dbpass)
or die ("Could not connect");
mysql_select_db ($dbname,$link)
or die ("Could not select database");
$_sqls = array
(
"UPDATE tutorials SET clicks = 'clicks +1' WHERE id = '$id'",
"SELECT * FROM tutorials WHERE id = '$id'"
);
$_result = array();
foreach($_sqls as $sql)
{
$_result[] = mysql_query($sql,$link) OR die(mysql_error());
}
...
Spannende Konstruktion, die Result-Handler in einem Array zu speichern. Aber dann solltest Du das auch als Array behandeln.
Liebe Grüße aus http://www.braunschweig.de
Tom