IF und ELSE

cille

Erfahrenes Mitglied
Hi ho, muss mal wieder reinkommen in PHP, wie war das nochmal wenn ich ein VOTE skript mache, was auf TXT basis arbeitet.
Wenn da aber keiner gevotet hat kommt ja ne fehlermeldung.
D.h. ich muss mit if und else dies auseinanderhalten,
d.h. wiederum,
Wenn keiner gevotet hat, zeigt er mir nicht das Diagramm an sondern,
Es hat zur zeit keiner gevotet.

und wenn einer gevotet hat kommt das diagramm.
Wie mach ich das nochmal.

Hier der ergebnis.php code:
HTML:
<h2>Die Umfrage-Ergebnisse:</h2>
<?php
$datei = "result.txt";
$fp = fopen($datei, "r");
$vote = fread($fp, filesize($datei));
fclose($fp);
// String zerlegen, Array entsteht
$vote = explode(",",$vote);
// Gesamtzahl aller Wahlvorgänge
$gesamt = $vote[0] + $vote[1] + $vote[2];
//Höchstlänge der Balken angeben
$laenge = 400;
// Anteil von Balken 1,2,3 (Indexwert 0,1,2!)
$laenge0 = $vote[0] * $laenge / $gesamt;
$laenge1 = $vote[1] * $laenge / $gesamt;
$laenge2 = $vote[2] * $laenge / $gesamt;
// Werte auf ganze Zahlen runden
$laenge0 = round($laenge0);
$laenge1 = round($laenge1);
$laenge2 = round($laenge2);
?>
<?php
if (empty($gesamt) <1) {
}
else {
?>
<p>Anzahl der Stimmen: <b><?php echo $gesamt; ?></b></p>
<table>
<tr>
<td width="100">echt super</td>
<td>&nbsp;</td><td height="17" width="<?php echo $laenge0; ?>"background="images/vote0.gif">&nbsp;</td>
<td>&nbsp;<i><?php echo $vote[0]; ?></i></td>
</tr>
</table>
<table>
<tr>
<td width="100">ziemlich gut</td>
<td>&nbsp;</td><td height="17" width="<?php echo $laenge1; ?>" background="images/vote1.gif">&nbsp;</td>
<td>&nbsp;<i><?php echo $vote[1]; ?></i></td>
</tr>
</table> 
<table>
<tr>
<td width="100">geht so</td>
<td>&nbsp;</td><td height="17" width="<?php echo $laenge2; ?>" background="images/vote2.gif">&nbsp;</td>
<td>&nbsp;<i><?php echo $vote[2]; ?></i></td>
<?php
}
?>
</tr>
</table>
 
Wenn du den Code vernünftig einrückst, könnte ich da auch mal rüber gehen, das macht sich sonst echt bescheiden.
 
Ich hatte auch wenig Lust mir dass jetzt alles durchzuschauen.
Aufgefallen ist mir aber das hier:
PHP:
if (empty($gesamt) <1) {
Mit der Funktion empty erhälst du true oder false. Ich weiß nicht ob du hier nach Wahrheit oder Anzahl prüfen willst. Ansonsten benutzt du weiter oben im Code
PHP:
$vote = explode(",",$vote);
Dort trennst du nach Komma, ohne zu überprüfen ob du einen String aus der TXT geholt hast.
Für mich heißt das, entweder du bekommst ein "undefined offset" error, weil eben der String leer ist und explode nicht angewandt werden kann, oder empty wird niemals true liefern, da du ja dann $gesamt mit dem Array aus explode fühlst.

Was funktioniert den nicht? Wieso denkst du dein Ansatz wäre fehlerhaft?

Gruß!
 
Hier nochmal den eingerückten code, sry leute ^^

PHP:
<?php
  $datei = "result.txt";
  $fp = fopen($datei, "r");
  $vote = fread($fp, filesize($datei));
  fclose($fp);
// String zerlegen, Array entsteht
  $vote = explode(",",$vote);
// Gesamtzahl aller Wahlvorgänge
  $gesamt = $vote[0] + $vote[1] + $vote[2];
//Höchstlänge der Balken angeben
  $laenge = 400;
// Anteil von Balken 1,2,3 (Indexwert 0,1,2!)
  $laenge0 = $vote[0] * $laenge / $gesamt;
  $laenge1 = $vote[1] * $laenge / $gesamt;
  $laenge2 = $vote[2] * $laenge / $gesamt;
// Prozentsatz der jeweiligen Antwort
  $prozent0 = $vote[0] * 100 / $gesamt;
  $prozent1 = $vote[1] * 100 / $gesamt;
  $prozent2 = $vote[2] * 100 / $gesamt;
// Aufrunden der Prozentsätze auf keine 0 stellen hinter dem Komma
  $prozent0 = round($prozent0, 0);
  $prozent1 = round($prozent1, 0);
  $prozent2 = round($prozent2, 0);
// Werte auf ganze Zahlen runden
  $laenge0 = round($laenge0);
  $laenge1 = round($laenge1);
  $laenge2 = round($laenge2);
?>

Hier der code für die ausgabe (PHP auch drinnen):
HTML:
<p>Anzahl der Stimmen: <b><?php echo $gesamt; ?></b></p>
<table>
  <tr>
    <td width="100">echt super</td>
      <td>&nbsp;</td><td height="17" width="<?php echo $laenge0; ?>"background="http://www.tutorials.de/forum/images/vote0.gif">&nbsp;
      </td>
      <td>&nbsp;<i><?php echo $prozent0 ?> %</i> (<?php echo $vote[0]; ?>)
      </td>
  </tr>
</table>
<table>
  <tr>
    <td width="100">ziemlich gut</td>
    <td>&nbsp;</td><td height="17" width="<?php echo $laenge1; ?>" background="http://www.tutorials.de/forum/images/vote1.gif">&nbsp;
    </td>
    <td>&nbsp;<i><?php echo $prozent1; ?> %</i> (<?php echo $vote[1] ?>)
    </td>
  </tr>
</table> 
<table>
  <tr>
    <td width="100">geht so</td>
    <td>&nbsp;</td><td height="17" width="<?php echo $laenge2; ?>" background="http://www.tutorials.de/forum/images/vote2.gif">&nbsp;
    </td>
    <td>&nbsp;<i><?php echo $prozent2; ?> %</i> (<?php echo $vote[2] ?>)
    </td>
  </tr>
</table>

Der fehler liegt daran, wenn ich das so wie jetzt ausgebe, und es hat keiner gevotet entsteht ein PHP fehler,
aber dies kann ich mit "if" und "else" wegmachen
 
Meinst Du so? Oder verstehe ich das falsch?

PHP:
<?php
  
   if ($gesamt == 0) {  
        echo "Sorry, keine Daten vorhanden";
   }
   if ($gesamt < 1) {  
        //Ausgabe der Daten
?>
 
War die Divison durch 0, frage wurde ja schon beantwortet.

Nen kleiner Tip noch, du solltest auch die Prozentwerte in Arrays speichern, besser noch du optimierst ein wenig deinen Code, so dass du die Antworten nacheinander abarbeitest und gleich ausgibst.

Was wäre, wenn du irgendwann mehr als 3 Antworten anbietest. Müsstest mit CopyPaste arbeiten, sowas sollte aber vermieden werden.

Gruß TvP
 
Zurück