WARNING: shuffle() expects parameter

|Nemo|
Ich habe mir ein Script installiert, das zufällige Werte ausgeben soll, wenn man einen HTML-Code einbindet.
Aber jetzt kommt an der Stelle, an der der HTML-Code eingefügt wurde:
Zitat:
Warning: shuffle() expects parameter 1 to be array, null given in /usr/export/www/vhosts/funnetwork/hosting/wiegehtdas/bannertausch/inc/showb
anner/getbanner.inc on line 13

In Zeile 13 steht:
code:
1:
shuffle ($bid);

Woran liegt dieser Fehler?
[kamui]
google.de "php Warning: shuffle() expects parameter 1 to be array, null given in"-> ein paar Links durchgeschaut -> http://www.flashforum.de/forum/archive/i...p/t-217375.html
|Nemo|
Erstmal danke!
Mit PHP kenne ich mich leider nicht so gut aus, deshalb kann ich damit jetzt nicht allzu viel anfangen.
Also gibt es ja demnach für $bid nur einen Wert, also kann auch nichts "geschuffelt" werden, richtig?
[kamui]
Ich kenne dein Skript ja nicht, also kann ich dir nichts genaues sagen ...

Schau dir mal http://de3.php.net/shuffle an.
Radiation
Ich würde tippen das $bid kein Array ist und Shuffle funktioniert nur im Array.
|Nemo|
Das Scrip heißt Banex.
In der Datenbank sind ja drei Werte für verschiedene Banner, dann ist es doch ein Array, oder? Er soll ja einen zufällig ausgewählten davon anzeigen.
[kamui]
Also, enwteder du hängst die Zeilen an, wo $bid & shuffle drin sind, oder du hängst einfach mal die gesamte Datei an Augenzwinkern

Wenn dus nicht in den Thread stellen willst, kannste mich auch im ICQ anschreiben
|Nemo|
OK, dann hänge ich's mal an:
[kamui]
Puh, also sieht eigentlich richtig aus soweit. Allerdings kenne ich die Funktion "shuffle()" erst, seit du hier dein Problem schilderst. Hast du es schon einmal mit rand probiert?
|Nemo|
Nein, bisher noch nicht.
Sollte das dann so aussehen?
php:
1:
2:
3:
4:
5:
6:
7:
srand ((float)microtime()*1000000);
rand ($bid);
srand ((float)microtime()*1000000);
rand ($bid);

$id "$bid[0]";
$id2 "$bid[1]";
lycoos
Wie wäre es mit array_rand?




php:
1:
2:
3:
4:
5:
6:
 <?php
srand((float) microtime() * 10000000);
$Banner = array("Banner1""Banner2""Banner3""Banner4""Banner5");
$rand array_rand($Banner1);
echo $Banner[$rand[0]] . "\n";
?> 
[kamui]
Nemo, bevor du eine Funktion anwendest, solltest du immer lesen, wie man das tut Zunge raus

Hier empfehle ich dir www.php.net Augenzwinkern Wenn du nicht erst auf die Page gehen willst, kannst du es auch so machen: php.net/FUNKTION (z.B. www.php.net/rand) Augenzwinkern
|Nemo|
@Kamui: Hatte ich eigentlich auch. Aber ich wusste nicht, wie ich den Code genau verändern sollte.

@lycoos:
Etwa dann in meinem Fall so?

----------------
Statt:
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
srand ((float)microtime()*1000000);
shuffle ($bid);
srand ((float)microtime()*1000000);
shuffle ($bid);

$id "$bid[0]";
$id2 "$bid[1]";

$checkban "$banner[lastbannerid]";
If ($id == "$checkban"){
$id "$bid[1]";
}

ElseIf ($id == ""){
$id "$bid[1]";
}

ElseIf ($id != "$checkban" || $id != ""){}


Das hier:
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
srand ((float)microtime()*1000000);
$rand array_rand($bid1);
srand ((float)microtime()*1000000);
$rand array_rand($bid1);

$id "$bid[0]";
$id2 "$bid[1]";

$checkban "$banner[lastbannerid]";
If ($id == "$checkban"){
$id "$bid[1]";
}

ElseIf ($id == ""){
$id "$bid[1]";
}

ElseIf ($id != "$checkban" || $id != ""){}

Dann habe ich aber das hier nicht drin:
php:
1:
$Banner = array("Banner1""Banner2""Banner3""Banner4""Banner5");

Könnte man das denn irgendwie so machen?
php:
1:
2:
$Banner = array{
SELECT FROM database_table};

Ich weiß, Syntax ist zu 100% falsch! smile




##################



Edit:
Mit diesem Code hier
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
$result_get_banner mysql_query("SELECT user_login FROM users WHERE imp_left > 0 AND act='1' AND numban > 0");

while ($banner mysql_fetch_array($result_get_banner)){
$bid[] = "$banner[user_login]";
}
$ip getenv ("REMOTE_ADDR");
$bid[] = array("$banner[user_login]"); 
srand ((float)microtime()*1000000);
$rand array_rand($bid1);
srand ((float)microtime()*1000000);
$rand array_rand($bid1);

$id "$bid[0]";
$id2 "$bid[1]";

bekomme ich wenigstens keine Fehlermeldung mehr, aber auch keinen Banner:
http://hooklines.ho.funpic.de/
[kamui]
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
$result_get_banner mysql_query("SELECT user_login FROM users WHERE imp_left > 0 AND act='1' AND numban > 0");

while ($banner mysql_fetch_array($result_get_banner)){
    $bid[] = "$banner[user_login]";
}

$ip getenv("REMOTE_ADDR");

srand ((float)microtime()*1000000);
$rand array_rand($bid1);

$id "$bid[0]";
$id2 "$bid[1]";


Probiers mal so. (Wieso machst du eigtl. ein array_rand rein, wenn du am Ende $id und $id2 sowieso feste Werte zuweist ?)
|Nemo|
Mit deinem Code kommt folgendes:
Zitat:
Warning: array_rand() [function.array-rand]: First argument has to be an array in /usr/export/www/vhosts/funnetwork/hosting/wiegehtdas/bannertausch/inc/showb
anner/getbanner.inc on line 15

Da ist ja auch vor "rand" kein Array...
Was ist denn an meinem Code noch falsch? Denn eine Fehlermeldung kommt ja nicht mehr:
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
$result_get_banner mysql_query("SELECT user_login FROM users WHERE imp_left > 0 AND act='1' AND numban > 0");

while ($banner mysql_fetch_array($result_get_banner)){
$bid[] = "$banner[user_login]";
}
$ip getenv ("REMOTE_ADDR");
$bid[] = array("$banner[user_login]"); 
srand ((float)microtime()*1000000);
$rand array_rand($bid1);
srand ((float)microtime()*1000000);
$rand array_rand($bid1);

$id "$bid[0]";
$id2 "$bid[1]";
[kamui]
Also zu deinem Code:

- Du hast zweimal:
code:
1:
2:
srand ((float)microtime()*1000000);
$rand = array_rand($bid, 1);

drin, was unnötig ist, da es hintereinander ist, und die Variable $rand überschrieben wird.

- In Zeile 7 weist du dem Array $bid noch einen weiteren Wert zu, der selber ein Array ist, aber keinen Inhalt hat (denn es ist außerhalb der while()-Schleife, in der $banner gilt)
|Nemo|
Danke!
Ich habe jetzt hier schon viel gelernt und werde mich weiter damit beschäftigen und viele Seiten im Internet lesen, bis ich es rauskriege! großes Grinsen
Das bringt glaube ich mehr, als wenn mir einer direkt den richtigen Code postet.
[kamui]
Das wird das beste sein. Denn "Learning by Doing" ist immernoch am besten, meiner Meinung nach Augenzwinkern