tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
665
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von boykottke
    boykottke boykottke ist offline Mitglied Silber
    Registriert seit
    Sep 2007
    Ort
    Leipzig
    Beiträge
    75
    Ja, ich glaube, diese Frage wird schon öfter gekommen sein, aber in der Suche hab ich jetzt nichts gefunden,w as mir wietergeholfen hätte.

    Folgender Code macht Ärger:

    Ein- und Austragen des Angebotes in das SESSION-Array:

    PHP-Code:
    if(!isset($_SESSION["marker"]) OR !is_array($_SESSION["marker"]))
    {
    $_SESSION['marker'] = array();
    }

    if(
    $_GET["marker"]== "1" AND !in_array$inserat_nr$_SESSION["marker"]))
    {
    array_push($_SESSION["marker"], $inserat_nr);
    }
    if(
    $_GET["marker"]== "2" AND in_array$inserat_nr$_SESSION["marker"]))
    {
    $key array_search($inserat_nr$_SESSION["marker"]);
    unset(
    $_SESSION["marker"][$key]);
    }

    echo 
    ' <div class="sendform">
    <div class="sendform_header">Zu Markern hinzuf&uuml;gen/entfernen</div>'
    ;

    if( 
    in_array$inserat_nr$_SESSION["marker"]))
    {
    echo 
    '<form action="index.php?kategorie=4&inseratnr='.$inserat_nr.'&profile_site='.$profile_site.'&marker=2" method="POST" target="">
    <p><input type="Submit" name="" value="Marker entfernen" id="login_buttons2"></p>
    </form>'
    ;
    }
    else
    {
    echo 
    '<form action="index.php?kategorie=4&inseratnr='.$inserat_nr.'&profile_site='.$profile_site.'&marker=1" method="POST" target="">
    <p><input type="Submit" name="" value="Marker setzen" id="login_buttons2"></p>
    </form>'
    ;
    }
    echo 
    '</div>'
    Anzeigen der Array-Daten der SESSION:

    PHP-Code:
    if(!empty($_SESSION["marker"]) AND is_array($_SESSION["marker"]))

    $select 'SELECT A.*, B.Bezeichnung, D.main_bild FROM inserat AS A LEFT JOIN rassen AS B ON A.Rasse = B.Nummer LEFT JOIN inserateignung AS C ON A.Inseratnr= C.Inseratnr LEFT JOIN medbilder AS D ON A.Inseratnr = D.inseratnr WHERE ';

    $i'0';
    foreach (
    $_SESSION["marker"] as $marker) {
    if (
    $i>'0')
    {
    $select.= 'OR ';
    }
    $select.= 'A.Inseratnr="'.$marker.'" ';
    $i++;
    }

    $select .= 'AND A.sichtbar = 1 AND A.Enddatum>="'.$actuell_day.'" GROUP BY A.Inseratnr ORDER BY A.Top DESC, A.Startdatum ASC'
    echo 
    '<div id="treffer_header">Ihre Marker:</div>';

    $siudb->sqlcommand($select);


    while(
    $data $siudb->sql_data())
    {

    $angebot_nr $data["Inseratnr"];
    $angebot_titel $data["Titel"];
    $angebot_preiskat $data["Preiskat"];
    $angebot_preis $data["Preis"];
    $angebot_rasse $data["Bezeichnung"];
    $angebot_rasseid $data["Rasse"];
    $angebot_ort $data["PLZStandort"].' '.$data["Standort"];
    $angebot_bundesland $data["Bundesland"];
    $angebot_top $data["Top"];
    $angebot_main_bild $data["main_bild"];
    $angebot_highlight $data["Highlight"];

    echo 
    '<div ';
    if(
    $angebot_highlight == 1) { echo 'class="search_results_1_highlight" ';} else { echo 'class="search_results_1" ';}
    if (
    $angebot_top== 1) { echo 'id="top'; if ($angebot_highlight== 1) {echo '_highlight';} echo '"'; }
    echo 
    '">';
    echo 
    '<table><tr><td valign="top">'; if (!empty($angebot_main_bild)) { echo '<img src="./media/main_pictures/MAIN'.$angebot_main_bild.'" width="120" height="90" border="0" alt="">'; } echo '</td><td valign="top">';
    echo 
    '<h1><a href="index.php?kategorie=4&inseratnr='.$angebot_nr.'">'.$angebot_titel.'</a></h1><p>';
    echo 
    '<b>Preis: &euro; '.$angebot_preis.' '.$angebot_preiskat.'</b><br><br>';
    echo 
    '<b>Rasse:</b> '.$angebot_rasse;
    echo 
    ' - <b>Standort:</b> '.$angebot_ort.' / '.$angebot_bundesland;
    echo 
    '</p></td></tr></table>';

    echo 
    '</div>';



    So, und nun wird es lustig. Mein Server liest die Daten normal aus dem Array in der SESSION, schreibt sie in der vorgegebenen Struktur aus und zeigt sie an. Der Server, auf dem Das Script laufen soll gibt folgenden Fehler aus:

    Warning: Invalid argument supplied for foreach() in /srv/www/xxx/marker.php on line 21

    Das Array $_SESSION["marker"] ist also letztlich kein Array mehr. Daher funktioniert die WHILE-Schleife nicht mehr. Also, nun meine Frage: Was muss ich am Code, was am Server ändern, damit es funktioniert.

    Leider ist es auch keine Alternative, das Ganze in einer Datenbank zu speichern, nur, um der Frage vorzubeugen.

    Danke und LG,

    Thomas
    Geändert von boykottke (18.03.08 um 00:01 Uhr)
     
    Warning! Keyboard not found, please press F1.

  2. #2
    Avatar von katosan
    katosan katosan ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Beiträge
    95
    session_register speichert keinen Arrays soweit ich weiß sondern legt für jedes Argument des Array eine eigen Variable an.

    lass dir mit print_r($_SESSION) deine Session anzeigen das weißt du was du iterieren musst

    gruß

    kato
     

  3. #3
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    wo verwendet er denn session_register? Finde ich nicht...

    @boykottke:

    Bist Du sicher, dass Du den richtigen Code-Ausschnitt zeigst? Die einzige foreach-Schleife, die ich sehe, befindet sich innerhalb der Bedingung

    PHP-Code:
    if(!empty($_SESSION["marker"]) AND is_array($_SESSION["marker"])) 
    Wenn $_SESSION["marker"] kein Array ist, wird der Zweig mit der Schleife also gar nicht ausgeführt.

    LG

    PS.: Es wäre vielleicht hilfreich, wenn Du den Code einrückst, das Klammern zählen ist ziemlich anstrengend...
     

  4. #4
    Avatar von boykottke
    boykottke boykottke ist offline Mitglied Silber
    Registriert seit
    Sep 2007
    Ort
    Leipzig
    Beiträge
    75
    Array ( [marker] => Array ( [0] => 137 ) )
    Warning: Invalid argument supplied for foreach() in


    Das ist die Originalausgabe... es sieht so aus, als sei marker ein Array.

    Scheint ebenso, dass er das array nach

    PHP-Code:
    if(!empty($_SESSION["marker"]) AND is_array($_SESSION["marker"])) 
    verliert, da es ja dort noch erfolgreich als Array geprüft wird...
     
    Warning! Keyboard not found, please press F1.

  5. #5
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    Scheint ebenso, dass er das array nach

    PHP-Code:
    if(!empty($_SESSION["marker"]) AND is_array($_SESSION["marker"]))
    verliert, da es ja dort noch erfolgreich als Array geprüft wird...
    PHP "verliert" nicht von alleine von einer Zeile zur nächsten ein Array. So, wie der Code da steht, kann der Fehler nicht durch diese foreach-Schleife ausgelöst werden. Prüf' noch mal, ob das auch wirklich Zeile 21 der Datei marker.php ist.
    Wo genau hattest Du das print_r($_SESSION) überhaupt eingebaut?

    LG
     

  6. #6
    Avatar von boykottke
    boykottke boykottke ist offline Mitglied Silber
    Registriert seit
    Sep 2007
    Ort
    Leipzig
    Beiträge
    75
    Ja, ich dachte bisher auch immer, dass er ein ARRAY nicht einfach so verlieren kann. Der richtige Codeausschnitt ist es. session_start steht in der übergeordneten index.php, eine session_register gibt es nicht, da die Variable $_SESSION["marker"] durch direkte Registrierung unter diesem Namen gespeichert wird, was laut PHP-Manual ab Version 4.1 auch ohne weiteres möglich ist. Gleichzeitig sind auf dem Server die register_globals deaktiviert. Dementsprechend würde der Code mit session_register nicht funktionieren.

    Ansonsten: Das ist tatsächlich die einzige for-Schleife im Code. Wie gesagt, erst überprüft er, ob es das ARRAY auch wirklich gibt, dann soll er das ARRAY auslesen und da kommt dann die Fehlermeldung.

    print_r($_SESSION) habe ich direkt über der IF-Bedingung ausgeben lassen. Deshalb meine Verwunderung.

    Ach so,d er Code war formatiert, als ich ihn eingegeben habe. Nach der Bearbeitung allerdings ist die Formatierung verloren gegangen, keine Ahnung Warum. Sorry...
    Geändert von boykottke (18.03.08 um 15:11 Uhr)
     
    Warning! Keyboard not found, please press F1.

  7. #7
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    irgendetwas musst Du übersehen. Kannst Du mal das ganze Script posten oder als Zip hochladen, wenn's zu groß ist?

    LG
     

  8. #8
    Avatar von boykottke
    boykottke boykottke ist offline Mitglied Silber
    Registriert seit
    Sep 2007
    Ort
    Leipzig
    Beiträge
    75
    Ich werde nachher mal die essentiellen Dateien hochladen... Hab sie allerdings nicht hier vor Ort, da ich grad auf Arbeit bin.

    Die Frage, die ich mir haltd erzeit stelle, ist die, warum das auf meinem Server geht, auf dem Kundenserver jedoch nicht...
     
    Warning! Keyboard not found, please press F1.

  9. #9
    Avatar von boykottke
    boykottke boykottke ist offline Mitglied Silber
    Registriert seit
    Sep 2007
    Ort
    Leipzig
    Beiträge
    75
    Okay, die entscheidenden Dateien sind schon oben... eingebunden werden sie durch die Index, die folgendermaßen aussieht:

    PHP-Code:
    <?php
    [LEFT]include('./conf/conf_source.php');
    include(
    './func/func.db.php');


    session_start ();

    $kategorie $_GET["kategorie"];
    if (!isset(
    $_GET["kategorie"]))
    {
    $kategorie 3;
    }

    $post_index $_GET["post_index"];

    if (!isset(
    $_GET["post_index"]) OR $_GET["post_index"]<0)
    {
    $post_index 0;
    }

    $datum getdate();
    $timestamp_global time();
    $actuell_day date("Y-m-d"$timestamp_global);

    // skin wird eingefügt
    include('./skin/pferdekauf_header.php');
    include(
    './skin/pferdekauf_menu.php');

    // an dieser stelle wird der hauptteil gestartet

    echo '&nbsp;';


    //kategorien werden geladen
    switch ($kategorie) {

    case 
    3:
    include(
    './vars/home.php');
    break;
    case 
    4:
    include(
    './vars/buy_horse.php');
    break;
    case 
    5:
    include(
    './vars/sell_horse.php');
    break;
    case 
    6:
    include(
    './vars/marker.php');
    break;
    case 
    7:
    include(
    './vars/faq.php');
    break;
    case 
    8:
    include(
    './vars/search.php');
    break;

    default:
    echo 
    'Keine Kategorie geladen';
    break;
    }
    // askin footer wird eingefügt[/LEFT]
    include('./skin/pferdekauf_footer.php');
    ?>
    PS: Scheinbar übergibt Eclipse keine Formatierung. Sorry.
     
    Warning! Keyboard not found, please press F1.

  10. #10
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    Okay, die entscheidenden Dateien sind schon oben...
    Meinst Du damit die Ausschnitte, die Du oben gepostet hast? Wie sieht die (komplette) marker.php aus?

    LG
     

  11. #11
    Avatar von boykottke
    boykottke boykottke ist offline Mitglied Silber
    Registriert seit
    Sep 2007
    Ort
    Leipzig
    Beiträge
    75
    Das ist die komplette marker.php...
     
    Warning! Keyboard not found, please press F1.

Ähnliche Themen

  1. Stateful-Bean verliert seine Werte warum?
    Von ceene im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 13
    Letzter Beitrag: 10.08.10, 12:56
  2. Array verliert Elemente
    Von DiDiJo im Forum PHP
    Antworten: 4
    Letzter Beitrag: 01.10.08, 17:17
  3. Antworten: 10
    Letzter Beitrag: 23.10.07, 15:41
  4. Objekt verliert Werte
    Von ZeroEnna im Forum Javascript & Ajax
    Antworten: 9
    Letzter Beitrag: 27.06.06, 09:08
  5. Antworten: 12
    Letzter Beitrag: 11.05.05, 21:05