"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

PHP Array Werteübergabe Problem ???

Bunny 20.08.2019 - 11:01 2852 20
Posts

Bunny

Addicted
Avatar
Registered: Oct 2002
Location: Austria
Posts: 525
Hallo,

seit 2 Tagen kämpfe ich mit der Übergabe von Variablen...
Mir ist grundsätzlich klar das es "lokale Variablen" und "globale Variablen" gibt... bzw. war ich immer der Meinung es verstanden zu haben :-)

Mein Problem ist wie folgt:

ich habe innerhalb meines <?php Script ?> ein Array definiert, welche ich dann anschließend in einem IF-Block verwende. Darin sollen werte dem Array hinzugefügt werden und in späterer Folge weiter verwendet werden. Daher wurde auch das Array AUßERHALB des IF-Block definiert.

Dies funktioniert auch noch. JEDOCH wenn ich im nächsten IF-BLOCK der später folgt das selbe Array verwenden möchte, weil ich die Werte daraus verwenden möchte funktioniert dies NICHT MEHR. WARUM ist das Array dann leer ?????


$rss_title = array();

if(isset($_POST['selected'])){
foreach ($_POST['checkbox'] as $news){
$sql_output = selectFeedByID($conn, $news);

while($row_output = $sql_output->fetch_assoc()){
$rss_title = $row_output["title"];
echo 'rss_title: ' .$rss_title. '<br />';
}}}

/* FUNKTIONIERT */
echo 'rss_title außerhalb: ' .$rss_title. '<br />';



if(isset($_POST['save'])){
/* FUNKTIONIERT NICHT */
echo 'rss_title innerhalb: ' .$rss_title. '<br />';

echo 'test <br/>';
}

BiG_WEaSeL

Super Moderator
-
Avatar
Registered: Jun 2000
Location: Wien
Posts: 8299
bin eingerostet, aber wenn du "$rss_title = $row_output["title"];" machst ist $rss_title ja kein array und zusätzlich kann man einen array iirc nicht einfach mit echo $variablenname ausgeben.

Edit: Lies mal https://stackoverflow.com/questions...from-while-loop

Obermotz

Fünfzylindernazi
Avatar
Registered: Nov 2002
Location: OÖ/RI
Posts: 5262
php ist schon ein zeitl aus bei mir, aber probier mal folgendes:

$rss_title = array();

if(isset($_POST['selected'])){
foreach ($_POST['checkbox'] as $news){
$sql_output = selectFeedByID($conn, $news);

while($row_output = $sql_output->fetch_assoc()){
$rss_title[] = $row_output["title"];
echo 'rss_title: ' .$rss_title. '<br />';
}}}

/* FUNKTIONIERT */
echo 'rss_title außerhalb: ' .implode(",",$rss_title). '<br />';


if(isset($_POST['save'])){
/* FUNKTIONIERT NICHT */
echo 'rss_title innerhalb: ' .implode(",",$rss_title). '<br />';
echo 'test <br/>';
}

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4286
Lokale Variablen sind innerhalb einer Funktion lokal, if's haben damit ncihts zu tun.

Sicher, dass isset($_POST['save']) True ist?

Bunny

Addicted
Avatar
Registered: Oct 2002
Location: Austria
Posts: 525
if(isset($_POST['save'])) ist bestimmt true, weil wenn ich den Button <input type="submit" name="save" value="Feeds speichern"> klicke zeigt der Browser dann echo 'test <br />'; an.

Bunny

Addicted
Avatar
Registered: Oct 2002
Location: Austria
Posts: 525
@Obermotz

Ich habe deine Variante probiert, jedoch keine Veränderung zu sehen...

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25429
Man kann nur raten, was hier vorgeht, weil der Output auch von den Zeilen in der Datenbank-Tabelle ist.

$rss_title wird bei jeder gefundenen Tabellenzeile überschrieben, der letzte gefundene Wert setzt also $rss_title für das darunterliegende echo. Dabei ist es gut zu wissen, dass die Reihenfolge zufällig sein kann, wenn es kein "ORDER BY" im SQL-Statement gibt.

Der Code von Obermotz sieht korrekt aus. Alle "title"-Werte werden in einem Array gespeichert und anschließend per implode für das echo formatiert.

ill

...
Avatar
Registered: Nov 2003
Location: Salzburg
Posts: 2059
Entferne mal das erste echo.

fetch_assoc() gibt dir iirc eine collection zurück, bei der bei einem Zugriff eine Iteration durchgeführt wird, das heißt das abgefragte Element fällt aus der Collection raus.

Nachdem deine Variable nur eine Referenz ist, könnte das hier das Problem sein, ansonsten könnt ich mirs grad auch nicht wirklich erklären. Kann aber auch falsch liegen, die barebone mysqli Funktionen hab ich echt schon eine Ewigkeit nimma angegriffen.

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4286
anstatt $rss_title per echo auszugeben, nimm var_dump. Dann erhälst du mehr Infos über die Variable.

Bunny

Addicted
Avatar
Registered: Oct 2002
Location: Austria
Posts: 525
ich habe den Code jetzt etwas verändert..und zwar habe ich die Variable $row[] "außen" hinzugefügt.

im IF-Block dann verwendet: $row[] = $row_output;

$row = array();

if(isset($_POST['selected'])){
foreach ($_POST['checkbox'] as $news){
$sql_output = selectFeedByID($conn, $news);

while($row_output = $sql_output->fetch_assoc()){
$row[] = $row_output;
$rss_title[] = $row_output["title"];
echo 'rss_title: ' .$rss_title. '<br />';
}}}

"außerhalb" des IF-Block mache ich dann folgendes:


/* FUNKTIONIERT */
foreach ($row as $key) {
$test = $key['hashvalue'];
echo 'Hash: ' .$test. '<br />';
}



/* FUNKTIONIERT NICHT MEHR */
if(isset($_POST['save'])){
echo 'test';
foreach ($row as $key) {
$test = $key['hashvalue'];
echo 'Hash: ' .$test. '<br />';
}
}


In dem Array sind unter anderem Hash-werte gespeichert.. diese kann ich Problemlos herausholen .. jedoch im zweiten IF-Block funktionierts nicht mehr..
Bearbeitet von Bunny am 20.08.2019, 13:49

Bunny

Addicted
Avatar
Registered: Oct 2002
Location: Austria
Posts: 525
Zur Info..

Wenn ich das Array mit $var_dump($row) auslese, steht folgendes drin:

array(1) { [0]=> array(8) { ["id"]=> string(1) "1" ["title"]=> string(69) "Leck bei Mastercard? Daten von fast 90.000 Personen kursieren im Netz" ["url"]=> string(24) "http://heise.de/-4500593" ["summary"]=> string(161) "Eine frei zugängliche Excel-Tabelle soll die persönlichen Daten von zehntausenden Mastercard-Kunden enthalten – darunter auch Mitarbeiter von Geldinstituten." ["datum"]=> string(25) "2019-08-19T21:21:00+02:00" ["hashvalue"]=> string(64) "2c4fe2320538a2a00c98735b666062a38ed3fa5d9d4d688bb0dd858592a5accb" ["selected"]=> NULL ["reg_date"]=> string(19) "2019-08-20 09:55:22" } }

Obermotz

Fünfzylindernazi
Avatar
Registered: Nov 2002
Location: OÖ/RI
Posts: 5262
Also der scope der variablen ist in PHP klar definiert und das Ergebnis, das du hier erhältst ist nicht wirklich möglich.
Meine Theorie (gerade aufgestellt): du verschweigst uns etwas ;)

Du kannst ja mal den ganzen Code deines Files auf https://pastebin.com/ stellen und hier einen Link dazu posten, dann kann man kurz drüber schauen.

Bunny

Addicted
Avatar
Registered: Oct 2002
Location: Austria
Posts: 525
ja bitte gerne ! ...

hier der link: https://pastebin.com/nrujyyaD

Obermotz

Fünfzylindernazi
Avatar
Registered: Nov 2002
Location: OÖ/RI
Posts: 5262
Was passiert, wenn du den letzten Block durch folgendes ersetzt?
/* FUNKTIONIERT NICHT MEHR */
if(isset($_POST['save'])){
echo 'test';
foreach ($row as $key) {
var_dump($row)
}

Bunny

Addicted
Avatar
Registered: Oct 2002
Location: Austria
Posts: 525
Im Log-File sehe ich keine Fehlermeldung...

Ausgabe im Browser:

array(0) { } test
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz