PHP Array Werteübergabe Problem ???
Bunny 20.08.2019 - 11:01 2809 20
Bunny
Addicted
|
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-
|
|
Obermotz
Fünfzylindernazi
|
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
|
Lokale Variablen sind innerhalb einer Funktion lokal, if's haben damit ncihts zu tun.
Sicher, dass isset($_POST['save']) True ist?
|
Bunny
Addicted
|
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
|
@Obermotz
Ich habe deine Variante probiert, jedoch keine Veränderung zu sehen...
|
mat
AdministratorLegends never die
|
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
...
|
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
|
anstatt $rss_title per echo auszugeben, nimm var_dump. Dann erhälst du mehr Infos über die Variable.
|
Bunny
Addicted
|
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
|
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
|
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
|
|
Obermotz
Fünfzylindernazi
|
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
|
Im Log-File sehe ich keine Fehlermeldung...
Ausgabe im Browser:
array(0) { } test
|