PHP Array Werteübergabe Problem ???

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/php-array-wertebergabe-problem_254219/page_1 - zur Vollversion wechseln!


Bunny schrieb am 20.08.2019 um 11:01

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 schrieb am 20.08.2019 um 11:14

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 schrieb am 20.08.2019 um 11:18

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 schrieb am 20.08.2019 um 11:19

Lokale Variablen sind innerhalb einer Funktion lokal, if's haben damit ncihts zu tun.

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


Bunny schrieb am 20.08.2019 um 12:26

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 schrieb am 20.08.2019 um 12:31

@Obermotz

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


mat schrieb am 20.08.2019 um 12:39

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 schrieb am 20.08.2019 um 12:53

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 schrieb am 20.08.2019 um 13:16

anstatt $rss_title per echo auszugeben, nimm var_dump. Dann erhälst du mehr Infos über die Variable.


Bunny schrieb am 20.08.2019 um 13:46

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..


Bunny schrieb am 20.08.2019 um 13:51

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 schrieb am 20.08.2019 um 14:27

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 schrieb am 20.08.2019 um 14:47

ja bitte gerne ! ...

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


Obermotz schrieb am 20.08.2019 um 15:00

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 schrieb am 20.08.2019 um 15:05

Im Log-File sehe ich keine Fehlermeldung...

Ausgabe im Browser:

array(0) { } test




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026