Variable springt raus im return und ist NULL

Fonex47

Mitglied
Guten Tag,
Ich komme an diesem Punkt nicht mehr weiter, ich habe vieles rumprobiert nun weiß ich nicht mehr weiter.

PHP:
function privateLog($post, $hunter){
    $lastuserid = $post['user_id'];
    $tickspan = '';
    $tickspan = '<span class="tick">unwichtig</span>';

    if($hunter == $post['hunter']){
            if($lastuserid == $post['user_id']){
                    $class = ' class="hunter"';
                    return '<span class="borderHunter"></span><span class="usernameHunter">Ich</span><li id="priv' . $post['id'] . '"' . $class . '> 
                    <p>'.
                        processPrivateMsg($post).' '.
                    '<span class="time">'.$tickspan.''.displayDateNe($post['time']).' </span></p>';
                } else {
      
                    $class = ' class="hunter"';
                    return '<span class="borderHunter"></span><span class="usernameHunter"> Leer </span><li id="priv' . $post['id'] . '"' . $class . '> 
                    <p>'.
                        processPrivateMsg($post).' '.
                    '<span class="time">'.$tickspan.''.displayDateNe($post['time']).' </span></p>';

                }
          
            } else {
                return '<span class="borderTarget"></span><span class="usernameTarget">'.$post['user_name'].'</span><li id="priv' . $post['id'] . '"> 
                <p>'.
                    processPrivateMsg($post).
            '
                <span class="times">'.displayDateNe($post['time']).'</span></p>'.

                '</li>';
            }
    }
Ich vergleiche ob die letzte Nachricht also user_id vom selben wieder geschrieben wird.
Ich möchte das der erste else nicht mehr Ich rein schreibt sondern Leer lässt aber irgwie macht er das nicht er kommt garnicht zum else durch.


Mfg
Fonex
 
Zuletzt bearbeitet:

Yaslaw

n/a
Moderator
Du setzt am Anfang: $lastuserid = $post['user_id'];
$lastuserid wird nie verändert.
Anschliessend vergleichst du $lastuserid == $post['user_id']
Was denkst du kommt da immer dabei heraus? Wann sollte sich $lastuserid oder $post['user_id'] verändern, damit das mal nicht mehr TRUE ergibt?
 

Fonex47

Mitglied
Ich habe es auch ohne $lastuserid = $post['user_id']; probiert, sorry hatte es vergessen raus zu nehmen, mit
$lastuserid = $post['user_id']; gibt er die id raus die ich haben will aber er setzt das nicht um was ich möchte.

So aufjedenfall gibt er dann immer NULL zurück ohne das $lastuserid = $post['user_id']; zu setzen oben.
Mein Fehler tut mir leid.

Ich möchte das er wenn $lastuserid == $post['user_id'] das er nicht das Ich rein schreibt sondern den else nimmt und den namen bereich leer lässt bis die person gegenüber wieder geschrieben hat.
 

m.scatello

Erfahrenes Mitglied
Klassischer Fall von

Richtig debuggen
  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 

Fonex47

Mitglied
Klassischer Fall von Richtig debuggen
  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
Das ist doch ein Witz gerade oder ? Oder ist das ein Insider von dem ich nichts weiß ?

Ich habe keine erros aber ich denke das ich falsch abfrage oder mein if statement anders setzen muss deswegen habe ich nach hilfe gefragt.
 
Zuletzt bearbeitet:

Fonex47

Mitglied
Warum sollte das ein Witz sein?

Gebe die verwendeten Variablen aus und du wirst bestimmt das Problem finden. Ich verstehe nicht, warum solche Dinge nicht schon von alleine gemacht werden, um den Fehler einzukreisen.
PHP:
function privateLog($post, $hunter){
    $lastuserid = $post['user_name'];
    $tickspan = '';
    $tickspan = '<span class="tick"></span>';
    var_dump($lastuserid);
    if($hunter == $post['hunter']){
            if($lastuserid == $post['user_name']){
                    $class = ' class="hunter"';
                    return '<span class="borderHunter"></span><span class="usernameHunter">Ich</span><li id="priv' . $post['id'] . '"' . $class . '> 
                    <p>'.
                        processPrivateMsg($post).' '.
                    '<span class="time">'.$tickspan.''.displayDateNe($post['time']).' </span></p>';
                } else {
      
                    $class = ' class="hunter"';
                    return '<span class="borderHunter"></span><span class="usernameHunter"></span><li id="priv' . $post['id'] . '"' . $class . '> 
                    <p>'.
                        processPrivateMsg($post).' '.
                    '<span class="time">'.$tickspan.''.displayDateNe($post['time']).' </span></p>';

                }
          
            } else {
                return '<span class="borderTarget"></span><span class="usernameTarget">'.$post['user_name'].'</span><li id="priv' . $post['id'] . '"> 
                <p>'.
                    processPrivateMsg($post).
            '
                <span class="times">'.displayDateNe($post['time']).'</span></p>'.

                '</li>';
            }
    }

ich bekomme den wert von der variable die ich haben möchte, zwar postet er die mit rein ich. Seh es durch den var_dump, aber er macht den else nicht weil die variable im return verschwindet. Das muss eigentlich so funktionieren wie ich es mache, tut es aber nicht.
 

m.scatello

Erfahrenes Mitglied
Vielleicht meinst du das auch so:
PHP:
function privateLog($post, $hunter)
{
   $result = '';
   $tickspan = '';
   $tickspan = '<span class="tick">unwichtig</span>';

   if($hunter == $post['hunter'])
   {
       if($lastuserid == $post['user_id'])
       {
          $class = ' class="hunter"';
          $result = '<span class="borderHunter"></span>
                     <span class="usernameHunter">Ich</span>
                     <li id="priv' . $post['id'] . '"' . $class . '>
                    <p>'.
                        processPrivateMsg($post).' '.
                    '<span class="time">'.$tickspan.''.displayDateNe($post['time']).' </span></p>';
       }
       else
       {
          $class = ' class="hunter"';
          $result = '<span class="borderHunter"></span><span class="usernameHunter"> Leer </span><li id="priv' . $post['id'] . '"' . $class . '>
                    <p>'.
                        processPrivateMsg($post).' '.
                    '<span class="time">'.$tickspan.''.displayDateNe($post['time']).' </span></p>';

       }

       $result .= '<span class="borderTarget"></span><span class="usernameTarget">'.$post['user_name'].'</span><li id="priv' . $post['id'] . '">
                   <p>'.
                      processPrivateMsg($post).
                  '
                    <span class="times">'.displayDateNe($post['time']).'</span></p>'.

                   '</li>';
   }
 
   return $result;
}
 

Fonex47

Mitglied
Vielleicht meinst du das auch so:
PHP:
function privateLog($post, $hunter)
{
   $result = '';
   $tickspan = '';
   $tickspan = '<span class="tick">unwichtig</span>';

   if($hunter == $post['hunter'])
   {
       if($lastuserid == $post['user_id'])
       {
          $class = ' class="hunter"';
          $result = '<span class="borderHunter"></span>
                     <span class="usernameHunter">Ich</span>
                     <li id="priv' . $post['id'] . '"' . $class . '>
                    <p>'.
                        processPrivateMsg($post).' '.
                    '<span class="time">'.$tickspan.''.displayDateNe($post['time']).' </span></p>';
       }
       else
       {
          $class = ' class="hunter"';
          $result = '<span class="borderHunter"></span><span class="usernameHunter"> Leer </span><li id="priv' . $post['id'] . '"' . $class . '>
                    <p>'.
                        processPrivateMsg($post).' '.
                    '<span class="time">'.$tickspan.''.displayDateNe($post['time']).' </span></p>';

       }

       $result .= '<span class="borderTarget"></span><span class="usernameTarget">'.$post['user_name'].'</span><li id="priv' . $post['id'] . '">
                   <p>'.
                      processPrivateMsg($post).
                  '
                    <span class="times">'.displayDateNe($post['time']).'</span></p>'.

                   '</li>';
   }

   return $result;
}
Klappt leider auch nicht.
könnntest du dir das vielleicht nicht live anschauen wäre dir echt dankbar. Wenn nicht auch nicht schlimm, danke dir für deine bemühung.
 

m.scatello

Erfahrenes Mitglied
Vielleicht erklärst du noch einmal, was du von dieser Funktion genau erwartest. So ganz werde ich aus der Beschreibung nämlich nicht schlau,
 

Neue Beiträge