Seite 1 von 1

PHP mit MySQL -> Skript Problem

Verfasst: So 22.Mai, 2005 10:42
von Stoebi
Bitte öfters meinen Beitrag anschauen. Ich ergänze und korrigiere sehr sehr oft.
Dadurch sind leider mind. 2 Beiträge von mir ungeachtet geblieben trotz UPI2DB
System und hänge so nun in der Luft mit meinen Fragen.

Hallo,

folgendes Skript macht soweit alles was es soll, nur meine DB wird nicht upgedatet:
Output ist korrekt:
UPDATE test.phpbb2_smilies SET smilies_order = 10 WHERE smilies_id = 1
UPDATE test.phpbb2_smilies SET smilies_order = 20 WHERE smilies_id = 2
UPDATE test.phpbb2_smilies SET smilies_order = 30 WHERE smilies_id = 3
UPDATE test.phpbb2_smilies SET smilies_order = 40 WHERE smilies_id = 4
UPDATE test.phpbb2_smilies SET smilies_order = 50 WHERE smilies_id = 5
UPDATE test.phpbb2_smilies SET smilies_order = 60 WHERE smilies_id = 6
UPDATE test.phpbb2_smilies SET smilies_order = 70 WHERE smilies_id = 7
UPDATE test.phpbb2_smilies SET smilies_order = 80 WHERE smilies_id = 8
UPDATE test.phpbb2_smilies SET smilies_order = 90 WHERE smilies_id = 9
.
.
.
UPDATE test.phpbb2_smilies SET smilies_order = 880 WHERE smilies_id = 88

Hier mein Skript, ich würde mich freuen, wenn mir einer schreiben könnte,
was ich falsch gemacht habe und welche Änderung durchgeführt werden
müsste.

Code: Alles auswählen

<?php
$link = mysql_connect("localhost", "root")
   or die("Keine Verbindung möglich: " . mysql_error());
echo "Verbindung zum Datenbankserver erfolgreich<br /><br />";
mysql_select_db("test") or die("Auswahl der Datenbank fehlgeschlagen<br />");

for ($smilies_id = 1; $smilies_id <= 88; $smilies_id++) {
	$smilies_order = $smilies_id * 10;

	$sql = "UPDATE test.phpbb2_smilies
	SET smilies_order = $smilies_order
	WHERE smilies_id = $smilies_id";
	print($sql) . "<br />"; 
//   echo "$smilies_id " . "$smilies_order<br />";
}


/* ausführen einer SQL Anfrage */
$query = "SELECT * FROM phpbb2_smilies";
$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());

/* Ausgabe der Ergebnisse in HTML */
echo "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
   echo "\t<tr>\n";
   foreach ($line as $col_value) {
       echo "\t\t<td>$col_value</td>\n";
   }
   echo "\t</tr>\n";
}
echo "</table>\n";

/* Freigeben des Resultsets */
mysql_free_result($result);

/* schliessen der Verbindung */
mysql_close($link);
?>
Ich bekomme eine Fehlmeldung, wenn ich aus dieser Zeile (Zeile 10)
$sql = "UPDATE test.phpbb2_smilies
diese machen
$link = "UPDATE test.phpbb2_smilies

$link deshalb, weil ich ja oben in Zeile 2 die Verbindung zu meinem MySQL Server angebe,
aber ich bekomme dann bei der Ausführung des Skriptes folgende Fehlermeldung, auch wenn
ich zusätzlich die Zeile mysql_close($sql); einfüge:
Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in D:\apachefriends\xampp\htdocs\test.php on line 37

Teile des Codes habe ich von http://de3.php.net/manual/de/ entnommen, also entstammen
nicht aus meiner eigenen Feder.



Gruß Stöbi

Verfasst: So 22.Mai, 2005 11:20
von oxpus
So besser:

Code: Alles auswählen

<?php
$dbhost = '';
$dbname = '';
$dbuser = '';
$dbpasswd = '';

/*#############################################################################*/

$link = mysql_connect($dbhost, $dbuser, $dbpasswd) or exit;
mysql_select_db($dbname, $link) or exit;

echo "<table><tr><td>Verbindung zur Datenbank erfolgreich</td></tr></table><br />";

for ($smilies_id = 1; $smilies_id <= 88; $smilies_id++) {
	$smilies_order = $smilies_id * 10;

	$sql = "UPDATE test.phpbb2_smilies
	SET smilies_order = $smilies_order
	WHERE smilies_id = $smilies_id";
	print($sql) . "<br />"; 
//   echo "$smilies_id " . "$smilies_order<br />";
}


/* ausführen einer SQL Anfrage */
$query = "SELECT * FROM phpbb2_smilies";
$result = mysql_query($query) or exit;

/* Ausgabe der Ergebnisse in HTML */
echo "<table>
";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
   echo "\t<tr>
";
   foreach ($line as $col_value) {
       echo "\t\t<td>$col_value</td>
";
   }
   echo "\t</tr>
";
}
echo "</table>
";

/* Freigeben des Resultsets */
@mysql_free_result($result);

/* schliessen der Verbindung */
@mysql_close();

?>
Die Angaben in den ersten Zeilen musst Du dann noch ergänzen.

Verfasst: So 22.Mai, 2005 11:37
von Stoebi
[quote="oxpus - So 22.Mai, 2005 11:20";p="32664"]So besser:

Code: Alles auswählen

<?php
$dbhost = '';
$dbname = '';
$dbuser = '';
$dbpasswd = '';

/*#############################################################################*/

$link = mysql_connect($dbhost, $dbuser, $dbpasswd) or exit;
mysql_select_db($dbname, $link) or exit;

echo "<table><tr><td>Verbindung zur Datenbank erfolgreich</td></tr></table><br />";

for ($smilies_id = 1; $smilies_id <= 88; $smilies_id++) {
	$smilies_order = $smilies_id * 10;

	$sql = "UPDATE test.phpbb2_smilies
	SET smilies_order = $smilies_order
	WHERE smilies_id = $smilies_id";
	print($sql) . "<br />"; 
//   echo "$smilies_id " . "$smilies_order<br />";
}


/* ausführen einer SQL Anfrage */
$query = "SELECT * FROM phpbb2_smilies";
$result = mysql_query($query) or exit;

/* Ausgabe der Ergebnisse in HTML */
echo "<table>
";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
   echo "\t<tr>
";
   foreach ($line as $col_value) {
       echo "\t\t<td>$col_value</td>
";
   }
   echo "\t</tr>
";
}
echo "</table>
";

/* Freigeben des Resultsets */
@mysql_free_result($result);

/* schliessen der Verbindung */
@mysql_close();

?>
Die Angaben in den ersten Zeilen musst Du dann noch ergänzen.[/quote]

Hallo,

@Oxpus

recht herzlichen Dank. Ich bin glücklich für heute, kann ich doch vorerst das Thema Smilies Order
abhaken, obwohl es mich tierisch stört mit dem einzelnen Pfeil nach oben bzw. nach unten Button.
Also das jedesmal nach Klick darauf zum Anfang der Seite gesprungen wird.

Leider funktionierte erst dein Skript, als ich diese Code zwischen deinen Zeilen 20 und 21
einfügte:

Code: Alles auswählen

$result = mysql_query($sql) or die("Anfrage fehlgeschlagen: " . mysql_error());
Ich kann mir das nicht wirklich erklären, warum gerade diese Zeile dafür sorgt, dass die
UPDATES auch in der DB geschrieben werden.

Kannst du oder wer anders mir/uns das erklären?


Gruß Stöbi

Verfasst: So 22.Mai, 2005 11:45
von oxpus
Ich dachte, Du wolltest hier nur eine Anzeige :!:
Okay zur Erklärung:
Diese Zeile ist der eigentliche Befehl, um eine SQL-Anweisung auszuführen. Er heisst ja auch "mysql_query()". Also Query gegen die MySQL-Datenbank.
$sql beinhaltet dabei nur, was ausgeführt werden soll. Und eben erst mit mysql_query() weiß die Datenbank, daß sie dieses auch tun soll (also vom PHP-Interpreter weitergereicht).
In phpBB selber wird das mit der Klasse $db->sql_query() abgedeckt, welche in den Scripten zur Verfügung steht. Dahinter verbirgt sich aber auch ein mysql_query(), wie Du in der db/mysql.php, bzw. db/mysql4.php sehen kannst.
Und da jede Verdingung eine eindeutige ID bekommt, gibt diese Funktion die ID zurück. Die kann man dann in einer Variablen speichern, wenn man Werte abfragen will ("SELECT..."). In phpBB wird hier ja meist $result verwendet. Und genau diese ID muss dann auch genommen werden, um die Daten auszulesen. Über diesen "Kanal" kommen dann die Daten zum Script.