• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Probleme mit MYSQL ausgabe :(

maria1

Mitglied
Hallo,Ich versuche nun seit ner stunde den fehler zu finden.Leider finde ich ihn aber nicht !
Code:
Warning: mysql_fetch_array() expects parameter 1 to be resource, double given in /home/www/cwcity/hosting/p/o/poll/htdocs/home.php on line 8

Code:
Code:
error_reporting(E_ERROR | E_WARNING | E_PARSE);
	
	print"<div id='content_wrapper_head'><a class='show_title'><img src='core/img/updates.png'></a></div>";
	
	$sql = "SELECT * FROM uploads"; // dein select
	$result = mysql_query($sql); // ausführen des selects und speichern in ein resultset 
	while($row = mysql_fetch_array($result)) // schleife solange ausführen bis resultset keine zeilen mehr hat 


	{ 
	
	$title = $row['title'];
	$id = $row['id'];
	$cover = $row['cover'];
	$year = $row['year'];
	$gerne = $row['categorie'];
	$rating = "1,5";
	$idd = $row['id'];
	
	print"<div id='updates'>";
	
	print"<div id='updates_title'>";
	print"<a href='index.php?page=show&id=$id' onmouseover=\"Tip('<img src=\'$cover\' height=\'250px\' width=\'170px\'>')\" onmouseout=\"UnTip()\">$title</a>";
	print"</div>";
	
	print"<div id='updates_year'>";
	print"$year";
	print"</div>";
	
	print"<div id='updates_gerne'>";
	print"<a href='index.php?page=categorie&categorie=$gerne'>$gerne</a>";
	print"</div>";
	
	
	//QUERY RATING
	$sqll = "SELECT * FROM rating WHERE upload_id='$idd'"; // dein select
	$resultt = mysql_query($sqll); // ausführen des selects und speichern in ein resultset 
	while($roww = mysql_fetch_array($resultt)) // schleife solange ausführen bis resultset keine zeilen mehr hat 
	
	{ 
	$up = $roww['up'];
	$down = $roww['down'];
	
	$dividentor = $up+$down;
	$result_rating = $up*$down;
	$result = $result_rating/$dividentor;
	
	
	print"<div id='updates_rating'>";
	print"$result";
	print"</div>";
	
	
	
	
	
	
	print"</div>";
	}
	}
	
	
	
	?>

ich habe schon alle variablen geändert sodass sich nicht gleich sind zb. $sql und $sqll ... (wird natürlich geändert wenn alles funktioniert also die bezeichnung)

Problem: Ich bekomme statt 6 Ausgaben nur eine, und eben die fehlermeldung ..

Danke
 
Du solltest dich mit mysql intensiver auseinandersetzen. Das was du da machst sieht stark so aus, als ob es einfacher mit einem join zu lösen ist. Sowas ist eine wichtige Grundlage von SQL - neben der Normalisierung - wenn man das nicht kennt, sollte man nicht anfangen damit.

Das deine Skripte darüber hinaus anfällig für SQL Injection sind, haben wir dir darüber hinaus auch schon mehrmals gesagt.

Ich fände es unverantwortlich dir auf dieser Stufe zu helfen, du entwicklest Programme, die gefährlich sind und unnötig lange Laufzeiten produzieren.
 
Hmm ok danke ... Naja das mit der SQL Injection is mir klar. Ich nutze das script auch nur über Xampp und eben lokal..

Dennoch danke!
 
Hmm dennoch würde mich interessieren was falsch ist ...
Ich finde den fehler einfach nicht , ich verwende für die abfrage ja immer verschiedene variablen ...
:-?
 
Die Fehlermeldung sagt dir in welcher Zeile. Das heisst natürlich auch du brauchst danach das Script nicht nach Fehlern abzusuchen.

Zeile 8 ist eine Schleife.
Double heisst doppelt

Preisfrage:
Was ist hier doppelt:
HTML:
$title = $row['title'];     
$id = $row['id'];     
$cover = $row['cover'];     
$year = $row['year'];     
$gerne = $row['categorie'];     
$rating = "1,5";     
$idd = $row['id'];


Tipp: es ist rechts von den Gleichheitszeichen zu finden.


Frage: Warum verwendest du print anstatt echo?
Print ist eine Funktion und Echo ist Sprachbestandteil. Nutze besser Echo.

Du solltest dir das PHP Manual mal durchlesen, damit meine ich nicht die Funktionsvielfalt, sonder die dortigen Tipps und Hinweise zur Anwendung von PHP in Verbindung mit html und den Bereich der Formulardaten.
 
Du überschreibst die Variable $result.

Edit:

Double ist ein Datentyp. In PHP heißen die normalerweise aber Float, das ist etwas verwirrend.

print ist technisch gesehen ebenfalls ein Sprachkonstrukt. Die Unterschiede zu echo sind mehr oder weniger kosmetischer Natur. Zumindest wüsste ich keinen Fall, wo eine Unterscheidung wirklich relevant wäre.
 
Zuletzt bearbeitet:
Heisst das man kann

$row['id'];

2 mal verwenden innerhalb der Ausgabe?

Echo war wohl in früheren Versionen schneller als Print. Habe das irgendwie noch so in Erinnerung. Das Manual sagt aber das beides Sprachkonstrukte sind.
 
Ja, das ist ein stinknormales Array in diesem Fall, also generell eine PHP-Datenstruktur und nichts, das irgendwie an eine externe MySQL-Ressource gebunden wäre.

Ich bin auch ein überzeugter echo-Mensch, aber ein wesentliches Argument ist mir wie gesagt nicht bekannt.



In some cases, print might be useful though. Since print can be used as a function.

- http://www.phpgolf.org/tips :D
 
Ihr schweift ab jungs :)

Hallo Maria,

bist du Sicher, dass das der Code der "home.php" ist, guck mal bitte noch einmal nach.

Den der Code sieht mir, auch wenn nicht schön, relativ korrekt aus. Ich bin auch etwas verwirrt in Bezug auf:"Es kommt eine Ausgabe und der Rest wird nicht mehr ausgegeben, dafür eine Warnung."

Vorrangig das er sich über ein "double" aufregt macht auf dem ersten Blick keinen Sinn, da die Funktion "mysql_query" meines erachten nur false und resource als Rückgabetyp besitzt.

Du könntest versuchen die verwendeten Variablen vorher jedes mal zu leeren oder durch ein Leeren Datensatz zu ersetzten, wobei ich nicht denke , dass das die Lösung zum Problem ist.

Ich mach mir erst einmal einen Kaffee und danach kann ich mal noch ein Blick drüber setzten.
 
Zuletzt bearbeitet:
Oder mal meine Beiträge lesen… ;)

Edit:

Hm, ja, falls das nicht so rüberkam: Ich habe die Frage in #6 beantwortet. Das war kein „Wundern“ über die Fehlermeldung. Kann man aber unter Umständen so lesen, gebe ich zu.

Double, Float, Real meint im PHP-Kontext immer den Datentyp Float. PHP dröselt da nicht weiter auf.

Die Variable, die den Zugriff auf die Ergebnismenge der Query gestattet, …

PHP:
$result = mysql_query($sql); // ausführen des selects und speichern in ein resultset 
while($row = mysql_fetch_array($result)) // schleife solange ausführen bis resultset keine zeilen mehr hat

…wird hier gegen Ende des ersten Schleifendurchlaufs mit einer Fließkommazahl überschrieben:

PHP:
$result = $result_rating/$dividentor;
 
Zuletzt bearbeitet:
@mermshaus

Wow sehr gute Erfassungsgabe! War es die Faulheit oder die Formatierung oder doch die Oberflächlische betrachtung, dass mich diese Zeile übersehen lies.. was auch immer: Diese Zeile klärt alle Verwirrungen auf^^

@Maria

Benutzt ein anderen Namen für die Variable und Informier dich etwas genauer über.. ich glaub es nennt sich: Scoping.

PHP: Variable scope - Manual
 
...Das deine Skripte darüber hinaus anfällig für SQL Injection sind, haben wir dir darüber hinaus auch schon mehrmals gesagt.
Ich fände es unverantwortlich dir auf dieser Stufe zu helfen, du entwicklest Programme, die gefährlich sind und unnötig lange Laufzeiten produzieren.
Hmm ok danke ... Naja das mit der SQL Injection is mir klar. Ich nutze das script auch nur über Xampp und eben lokal......
Hmm sehr komisch, dass du dich da weigerst ENDLICH auf diese Einwürfe einzugehen und mysql_real_escape_string() zu verwenden.
Nicht nur Injections rühren aus solchen Fahrlässigkeiten, auch Fehler.

Nebenbei, man setzt auch Tabellennamen und Datenbanknamen unter Backquotes, Variablen werden nicht direkt unter den Anführungszeichen verarbeitet, es heisst also nicht so:
PHP:
$sqll = "SELECT * FROM rating WHERE upload_id='$idd'"; // dein select
sondern
PHP:
$sqll = "SELECT * FROM `rating` WHERE `upload_id`= '".$idd."'"; // dein select
oder
PHP:
$sqll = 'SELECT * FROM `rating` WHERE `upload_id`= \''.$idd.'\''

Ersetz in deinem Code mit einem Editor mal $idd durch das Array $idd['test'] und lass dich überraschen.
 
zorndyuke schrieb:
Wow sehr gute Erfassungsgabe!

Die Antwort steht im Prinzip eben in der Fehlermeldung, wenn man die richtig deutet. Ich hatte die leider auch schon oft genug.

maria1s Variante:

Code:
mysql_fetch_array() expects parameter 1 to be resource, double given

Die „klassische“ Variante ist:

Code:
mysql_fetch_array() expects parameter 1 to be resource, boolean given

Das bedeutet in aller Regel, dass die Query fehlerhaft war. $result enthält deshalb den Wert false (boolean) statt einer Ressourcenkennung (resource).

PHP:
$result = mysql_query('SELECT an error');

while ($row = mysql_fetch_array($result)) {

}

sysop schrieb:
Variablen werden nicht direkt unter den Anführungszeichen verarbeitet, es heisst also nicht so: […]

Na ja, doch. In doppelten Anführungszeichen werden Variablen ersetzt.

Wobei das natürlich eine Stilfrage ist. Ich finde es tendenziell hässlich, aber explizit falsch oder „unüblich“ würde ich es nicht nennen.
 
Wohl nicht unüblich, macht aber ein edit per Ersetzung kaum lauffähig. Macht man aus solchen Variablen ein Array, läuft garnix mehr.... also eine sehr häufige Fehlerquelle.
 
Zurück
Oben