Sasch: a) Überschreiben von Daten b) "Universalbefehl"

Hallo!
Ich finde als Php-Newbie keine Lösung - die Uhrzeit unterstreicht meine Aussage.
Ich will (wohl ganz einfach eigentlich für einen routinierten Phpler) einen Befehl einfügen

<?
if($row[allereihen]<>"")
{
wenn alle reihen leer sind}
else
{
print(""); bitte gar nichts
}
?>

Also, wie muss ein Befehl aussehen, der mir sagt "alle Reihen, die nicht ausgefüllt sind, printen bitte gar nichts"?

Und eine weitere Frage: Bei der Ausgabe durch $row[spielstand] soll eben jener Spielstand immer überschrieben werden, d.h. wenn ich den Spielstand neu eingebe, soll $row[spielstand] die neue Angabe annehmen. Wie mache ich das?
Ich habe nen Php-Buch und google, aber es fällt ganz oft schwer zu jeweiligen Lösung die Probleme zu formulieren und zu finden.

Danke schön, gute Nacht!

  1. HI,
    ich bin vielleicht auch nicht so in das php biss nicht reingekommen, aber, von meinen Java kentnissen könntest du folgende lösung probieren

    <?php
    $empty=true;
    for($i=0;$i<count($row);i++)
    {
    if(empty && $row[$i] !="")
    {
    empty=false
    }
    }
    if(empty)
    {
    echo "Das Array ist leer";
    }
    ?>
    Jan
    P.S., wo ich bin ist es erst 10p.m.

  2. Hallo,

    Also, wie muss ein Befehl aussehen, der mir sagt "alle Reihen, die nicht ausgefüllt sind, printen bitte gar nichts"?

    das Fehlen einer Ausgabe wird auch in PHP durch die Abwesenheit von "Befehlen" dargestellt. Ein Beispiel:

    $row=array('huhu'=>'hallo','blub'=>'');  
    if($row['huhu']!='')  
        echo $row['huhu'];  
    if($row['blub']!='')  
        echo $row['huhu'];
    

    In Beiden Fällen wird auf das Vorhandensein eines Wertes geprüft. In keinem Fall wird durch eine else-Verzweigung auf die Abwesenheit eines Wertes explizit eingegangen. Also nimmt das Programm beim Eintritt des zuletzt beschriebenen Ereignis drauf keine Rücksicht und es wird folglich nichts ausgegeben.

    Und eine weitere Frage: Bei der Ausgabe durch $row[spielstand] soll eben jener Spielstand immer überschrieben werden, d.h. wenn ich den Spielstand neu eingebe, soll $row[spielstand] die neue Angabe annehmen. Wie mache ich das?

    Das machst Du durch eine einfache Zuweisung:

    $row['spielstand']=5;

    Ich habe nen Php-Buch und google, aber es fällt ganz oft schwer zu jeweiligen Lösung die Probleme zu formulieren und zu finden.

    Du solltes Dich stückweise vom Buch lösen und Dir das Manual PHPs unter http://www.php.net/manual/de/ erarbeiten.

    Gruß aus Berlin!
    eddi

  3. Hallo Sasch,

    <?
    if($row[allereihen]<>"")
    {
    wenn alle reihen leer sind}
    else
    {
    print(""); bitte gar nichts
    }
    ?>

    Also, wie muss ein Befehl aussehen, der mir sagt "alle Reihen, die nicht ausgefüllt sind, printen bitte gar nichts"?

    Du denkst in die falsche Richtung - probier mal 'alle Reihen, die ausgefüllt sind, printen bitte was'. Da PHP typenschwach ist, evaluiert ein leerer String zu false, oder im Klartext, deine Bedingung kannst Du auf if($row[allereihen]) verkuerzen.
    allereihen ist vermutlich ein String und keine Konstante, muesste also in Anfuehrungszeichen stehen. Damit dir sowas auffaellt, solltest du dein error_reporting einschalten. Und Short Tags sind auch eine schlechte Idee.

    Dein Code sieht demnach so aus:
    <?php                   // kein Short Tag
    error_reporting(2047);  // das gehoert eigentlich in die php.ini
    if($row['allereihen'])  // allereihen in Anfuehrungszeichen, kein Vergleichswert
                            // evtl. kaemen hier auch isset($row['allereihen']) oder !empty($row['allereihen']) infrage
    {
      print('irgendwas, zB. ' . $row['allereihen']); // 'allereihen' klingt nach Array, evtl. musst du da in einer Schleife durch
    }
                            // kein else, das ist hier ueberfluessig
    ?>

    Gruß,

    Dieter

  4. Vielen Dank für die vielen Antworten. So ganz bekomme ich es noch nicht hin. Hier mal mein Entwurf:

    ...

    <table class="ticker">
    <tr>
    <td class="wappen1"><img src=".../wappenbig/<? echo $row[heimwappen]; ?>" alt=""></td>
    <td class="big"><? echo $row[spielstand]; ?></td>
    <td class="wappen2"><img src=".../wappenbig/<? echo $row[gastwappen]; ?>" alt=""></td>
    </tr>
    </table>

    <table class="ticker">
    <tr>
    <td class="heimteam"><? echo $row[heimteam]; ?></td>
    <td class="klein"><? echo $row[spielminute]; ?></td>
    <td class="gastteam"><? echo $row[gastteam]; ?></td>
    </tr>
    </table>

    <table class="comment">
    <tr>
    <td class="small"><? echo $row[spielminute]; ?></td>
    <td class="small">
    <?
    if($row['spielstand']!='')
    echo $row['spielstand'];
    ?>
    </td>
    <td class="comment"><? echo $row[kommentar]; ?></td>
    </tr>
    </table>

    ...

    Wenn ich jetzt über PhpMyAdmin ne neue Zelle einfüge, dann erscheint natürlich der ganze Krams noch mal.
    Es soll aber nur diese Tabelle
    <table class="comment">
    <tr>
    <td class="small"><? echo $row[spielminute]; ?></td>
    <td class="small">
    <?
    if($row['spielstand']!='')
    echo $row['spielstand'];
    ?>
    </td>
    <td class="comment"><? echo $row[kommentar]; ?></td>
    </tr>
    </table>

    ausgegeben werden, wobei sich die Spielminute und das Ergebnis oben in der Tabelle durch das jeweils neue ersetzt werden sollen.

    Ist der Weg überhaupt der richtige oder pack ich das falsch an?

    Danke noch mal, Gruß

    1. Hallo,

      mir ist nicht klar geworden, wo Dein Problem ist.

      Gruß aus Berlin!
      eddi

      1. mir ist nicht klar geworden, wo Dein Problem ist.

        Sorry, das war dann wohl doch zu mißverständlich. Dann fange ich mal ganz vorne an.

        Ich will einen Liveticker bauen, bei welchem oben die Wappen, Vereinsnamen sowie Spielstände und gespielte Minuten stehen.
        Etwas weiter unten sollen Kommentare stehen in der Reihenfolge
        Minute - Spielstand - Kommentar, z.B.
        16. 7:3 Tor durch Klaus, das Spiel wird ein Selbstläufer.

        Dafür, so dachte ich, wäre es ja clever, Spielzeit und Spielstand nur einmal einzugeben (über PhpMyAdmin), so dass der Ticker das einmal für oben (den Spielstand in groß) und einmal beim Kommentar nimmt. Das funktionert soweit alles.

        Jetzt das Problem: Wappen und Vereinsname sollen EINMALIG oben stehen, nur der Kommentar soll zu den bisherigen Kommentare angehangen werden. Also so:

        WAPPEN HEIMTEAM   SPIELSTAND   WAPPEN GASTTEAM

        23. 8:10 Wir sind völlig von der Rolle
        ...
        17. 7:5 Der Gegner holt auf
        16. 7:3 Tor durch Klaus, das Spiel wird ein Selbstläufer.

        Bei meiner "Version" ist es derzeit so, dass wenn ich eine neue Spalte über PhpMyAdmin in diese Tabelle einfüge, komplett ALLES wieder "geprintet" wird. Also

        WAPPEN HEIMTEAM   SPIELSTAND   WAPPEN GASTTEAM

        23. 8:10 Wir sind völlig von der Rolle

        WAPPEN HEIMTEAM   SPIELSTAND   WAPPEN GASTTEAM

        17. 7:5 Der Gegner holt auf

        WAPPEN HEIMTEAM   SPIELSTAND   WAPPEN GASTTEAM

        16. 7:3 Tor durch Klaus, das Spiel wird ein Selbstläufer.

        Das war Problem Nr. 1. Problem Nr. 2:

        Zudem soll der oben stehende Spielstand, also der zwischen den beiden Wappen
        WAPPEN HEIMTEAM   SPIELSTAND   WAPPEN GASTTEAM

        immer auf den neuesten Stand gebracht werden und soll den alten Spielstand überschreiben.

        Ich hoffe das war etwas klarer.

        Danke schon einmal im voraus, Gruß