tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
908
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    jensef jensef ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    13
    habe ein Bildervote-System entwickelt.Beim klick auf ein Bild kann man seinen Vote abgeben und dabei wird danach das nächste Bild gezeigt wo man dann auch voten kann.
    Nun mein Problem.
    Ich habe in der db 10 Bilder. er soll nur die 10 Bilder nacheinander beim voten anzeigen und dann aufhören.Zur Zeit kann man die Bilder ohne ende voten weil sie immer und immer weiterlaufen.
    Ich möchte es bei 10 abbrechen.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    
    <?
      @include("config.php");
      @mysql_connect($db_server,$db_user,$db_password) or die("Datenbankverbindung fehlgeschlagen");
      @mysql_select_db($db_name) or die("Datenbankauswahl fehlgeschlagen");
     
      if($_POST["vote"]){
        mysql_query("UPDATE ".$db_table_pictures." SET points=points+".$_POST["vote"].",votes=votes+1 WHERE id=".$_POST["id"].";");
      }
     
      if(strlen($_GET["comment_name"])>2 && strlen($_GET["comment_text"])>2){
        $name = $_GET["comment_name"];
        $name = str_replace("<","&lt;",$name);
        $name = str_replace(">","&gt;",$name);
        $name = stripslashes($name);
     
        $text = $_GET["comment_text"];
        $text = str_replace("<","&lt;",$text);
        $text = str_replace(">","&gt;",$text);
        $text = stripslashes($text);
     
        mysql_query("INSERT INTO ".$db_table_comments." VALUES('',".$_GET["show"].",'$name','$text',".time().");");
      }
     
      if(!$_GET["show"] and !$_POST["show"]){
        $result = mysql_query("SELECT * FROM ".$db_table_pictures.";");
        while(list($ids[]) = mysql_fetch_row($result));
        while(true){
          srand((double)microtime()*1000000);
          $show = rand(1,mysql_num_rows($result));
          if(array_search($show,$ids)){
            break;
          }
        }
      }
      else{
        $show = $_GET["show"] ? $_GET["show"] : $_POST["show"];
      }
     
      $row        = mysql_fetch_array(mysql_query("SELECT * FROM ".$db_table_pictures." WHERE id=$show;"));
      list($next) = mysql_fetch_row(mysql_query("SELECT id FROM ".$db_table_pictures." WHERE id>$show ORDER BY id ASC LIMIT 0,1;"));
     
      if($row["points"] != 0){
        $row["points"] = number_format($row["points"]/$row["votes"],2,",","");
      }
     
      if(!$next){
        list($next) = mysql_fetch_row(mysql_query("SELECT id FROM ".$db_table_pictures." WHERE id>1 ORDER BY id ASC LIMIT 0,1;"));
      }
      
      echo $header;
      echo "
              <form action=\"".$PHP_SELF."\" method=\"post\">
                <table align=\"center\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\">
                  <tr>
                    <td rowspan=\"2\">schlecht</td>
                    <td rowspan=\"2\" width=\"10\">&nbsp;</td>";
     
      for($i=1;$i<=$max_points;$i++){
        echo "
                    <td align=\"center\">$i</td>";
      }
     
      echo "
                    <td rowspan=\"2\" width=\"10\">&nbsp;</td>
                    <td rowspan=\"2\">gut</td>
                  </tr>
                  <tr>";
     
      for($i=1;$i<=$max_points;$i++){
        echo "
                    <td align=\"center\"><input type=\"radio\" name=\"vote\" value=\"$i\" onClick=\"submit();\"></td>";
      }
     
      echo "
                  </tr>
                </table>
                <input name=\"show\" type=\"hidden\" value=\"$next\">
                <input name=\"id\" type=\"hidden\" value=\"".$row["id"]."\">
              </form>
            </td>
          </tr>
          <tr>
            <td colspan=\"2\" height=\"8\">&nbsp;</td>
          </tr>
          <tr>
            <td align=\"center\" colspan=\"2\" height=\"".$img_height."\"><img alt=\"\" border=\"0\" src=\"".$img.$show.$img_format_info."\"></td>
          </tr>
          <tr>
            <td colspan=\"2\" height=\"10\">&nbsp;</td>
          </tr>
          <tr>
            <td valign=\"top\" width=\"50%\">Bild von <b>".$row["creator"]."</b><br><br>".$row["comment"]."<br><br></td>
            <td align=\"right\" valign=\"top\" width=\"50%\">Punkte: <b>".$row["points"]."</b> (".$row["votes"]." Votes)<br><br></td>
          </tr>
          <td colspan=\"2\">
            <hr>";
     
      $result = mysql_query("SELECT * FROM ".$db_table_comments." WHERE id_pic=".$row["id"]." ORDER BY date DESC;");
     
      if(mysql_num_rows($result) == 0){
        echo "
            Keine Kommentare";
      }
      else{
        while($row = mysql_fetch_array($result)){
          echo "
            <b>".$row["name"]."</b> schrieb am ".date("d.m.",$row["date"])." um ".date("H:i",$row["date"]).":<br>
            ".$row["text"]."
            <br><br>";
        }
      }
     
      echo "
            <hr>
            <b>Kommentar schreiben:</b>
            <form action=\"".$PHP_SELF."\" method=\"get\">
              <table align=\"center\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">
                <tr>
                  <td>Name:</td>
                  <td><input maxlength=\"50\" name=\"comment_name\" size=\"30\" type=\"text\"></td>
                </tr>
                <tr>
                  <td valign=\"top\">Kommentar:</td>
                  <td><textarea cols=\"70\" name=\"comment_text\" onkeyup=\"this.value=this.value.slice(0,".$comment_size.")\" rows=\"6\"></textarea></td>
                </tr>
                <tr>
                  <td>&nbsp;</td>
                  <td><input type=\"submit\" value=\"Kommentar schreiben\"></td>
                </tr>
              </table>
              <input name=\"show\" type=\"hidden\" value=\"$show\">
            </form>";
      echo $footer;
      @mysql_close();
    ?>
     
    es gibt nur 3 Weltstädte,New York,Tokio und Erfurt

  2. #2
    Claudia_aus_NRW Claudia_aus_NRW ist offline Mitglied Silber
    Registriert seit
    Dec 2004
    Beiträge
    91
    Hallo,

    ich weiß nicht ob das bei dem auch geht was du gemacht hast, aber wenn ich immer nur eine Bestimmte Menge aus der DB dastellen will dann mach ich das mit:

    PHP-Code:
       LIMIT 10
    in dem Fall werden nnun nur die Aktuellen 10 aus der Datebank dagestellt. Kannst ja mal versuchen ob das auch bei dir geht

    Gruß Claudia
     

  3. #3
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Hi

    ich verstehe das so, dass Du nur 10 Bilder ingesamt hast und diese aber nach wie vor beim Select aufgerufen werden, auch wenn schon mehrere gevotet worden sind.

    Ist das der Fall, dann kannst Du z.B. die bereits gevoteten ids in eine Session speichern. Wenn Du die ids nacheinander einspeicherst und durch ein Komma trennst, kannst Du zum Filtern des Selectstatements den in-Opertor verwenden.

    bsp.

    $query = "select id, bilder from tabelle where id not in (".$_SESSION['vote'].")";

    Gibt bestimmt noch andere Möglichkeiten, aber irgendwie musst Du die Werte ablegen und später filtern.
     
    liebe Grüße, die Luzie

  4. #4
    jensef jensef ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    13
    mit der session das klingt super, nur habe ich das noch nicht so oft gemacht, und mir fehlt da glaube gerade die passende idee wie ich das in eine session-id packe.
     
    es gibt nur 3 Weltstädte,New York,Tokio und Erfurt

  5. #5
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Hi

    die Idee ist einfach, dass, falls die Session noch nicht existiert, diese beim 1. Voting den 1. Wert bekommt. bei jedem zusätzlichen Vote speichert sich der neu gevotete Wert mit Komma zusätzlich mit in die Session rein. Die Session kann dann letztendlich 10 Werte enthalten. Du könntest noch die mysql_num_rows() abfragen um beim 11. Aufruf eine Angabe machen zu lassen, dass kein Bild mehr da sei.

    PHP-Code:
    <?
    session_start
    ();
    [...]
    if ( !isset(
    $_SESSION["vote"]) );
      {
         
    $hinzufuegen $id;
         
    $_SESSION["vote"] .= $hinzufuegen.",";
         }
      
    $what substr($_SESSION["vote"],0,-1);
      
      
    $sql "select feld from tabelle where id not in ($what) order by rand(id) limit 1";
      [...]
    ?>
    Wie aber gesagt, ich bin auch kein Profi, es gibt bestimmt noch andere Möglichkeiten.
     
    liebe Grüße, die Luzie

  6. #6
    jensef jensef ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    13
    das klingt ja wirklich nach der Lösung meines Problems, aber ich weis leider nicht genau wo ich das plazieren soll.Mit den session's hatte ich schon immer meine probleme.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    
     $row = mysql_fetch_array(mysql_query("SELECT * FROM ".$db_table_pictures." WHERE id=$show;"));
      list($next) = mysql_fetch_row(mysql_query("SELECT id FROM ".$db_table_pictures." WHERE id>$show ORDER BY id ASC LIMIT 10 ;"));
     
      if($row["points"] != 0){
        $row["points"] = number_format($row["points"]/$row["votes"],2,",","");
      }
     
      if(!$next){
        list($next) = mysql_fetch_row(mysql_query("SELECT id FROM ".$db_table_pictures." WHERE id>1 ORDER BY id ASC LIMIT 10 ;"));
      }
      
      echo $header;
      echo "
              <form action=\"".$PHP_SELF."\" method=\"post\">
                <table align=\"center\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\">
                  <tr>
                    <td rowspan=\"2\">schlecht</td>
                    <td rowspan=\"2\" width=\"10\">&nbsp;</td>";
     
      for($i=1;$i<=$max_points;$i++){
        echo "
                    <td align=\"center\">$i</td>";
      }
     
      echo "
                    <td rowspan=\"2\" width=\"10\">&nbsp;</td>
                    <td rowspan=\"2\">gut</td>
                  </tr>
                  <tr>";
     
      for($i=1;$i<=$max_points;$i++){
        
        
        echo "
                    <td align=\"center\"><input type=\"radio\" name=\"vote\" value=\"$i\" onClick=\"submit();\"></td>";
      }
      echo "
                  </tr>
                </table>
                <input name=\"show\" type=\"hidden\" value=\"$next\">
                <input name=\"id\" type=\"hidden\" value=\"".$row["id"]."\">
              </form>
            </td>
          </tr>
          <tr>
            <td align=\"center\" colspan=\"2\" height=\"".$img_height."\"><img alt=\"\" border=\"0\" src=\"".$img.$show.$img_format_info."\"></td>
          </tr>
          <tr>
            <td colspan=\"2\" height=\"10\">&nbsp;</td>
          </tr>
          <tr>
            <td valign=\"top\" width=\"50%\"></td>
            <td align=\"right\" valign=\"top\" width=\"50%\">Punkte: <b>".$row["points"]."</b> (".$row["votes"]." Votes)<br>Bild Nr.$bnr<br></td>
          </tr><td colspan=\"2\">";
        "</table>";
     
      echo $footer;
     
    es gibt nur 3 Weltstädte,New York,Tokio und Erfurt

  7. #7
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Hier mal ein Beispiel von mir zum Testen der Vorgehensweise. Du musst es Dir natürlich für Deine Bedürfnisse umschreiben. Ich habe jetzt bewusst mal ein echo auf den SQL-String gesetzt, damit Du siehst, wie sich dieses im Laufe der Bilderausgabe verändert. Die Bilder werden im order by über rand() nach dem Zufall ausgeworfen.

    Einfach mal als ganzes testen. Ich baue ungern Änderungen in gepostete Scriptteile ein. Das macht auch keinen Sinn, denn funktionieren wird sowas nicht, gerade wenn diese etwas aufwendiger sind.

    PHP-Code:
    <?
    session_start
    ();
    $what "";
     
    // Verbindung zur mySQL - Datenbank herstellen
    $server "localhost"$user "root"$pass "";
    $database "db";
    $table     =    "bilder";
    $table1    =    "vote";
    $verbindung mysql_connect($server,$user,$pass)
        or die (
    "Keine Verbindung möglich");
        
    mysql_select_db($database$verbindung)
        or die (
    "SQL-Fehler = ".mysql_error());
        
     
    // Abfrage, wenn Formular abgeschickt ist    
     
    if(isset($_POST[Submit])) {
     
     
    // einfügen eines neuen Votes
     
    $query "insert into $table1 (bildid, anzahl) 
                     Values ("
    .$_POST['bildid'].",".$_POST['myvote'].")" 
                    
    or die ("SQL-Fehler = ".mysql_error());
                     
    mysql_query($query);
        
         
    // Abfrage, ob Session vorhanden oder nicht
         // wenn nicht, dann bilden und Werte aus Formularfeld bildid einfügen            
         
    if ( !isset($_SESSION["vote"]) );
                  {
                 
    $hinzufuegen $_POST['bildid'];
                 
    $_SESSION["vote"] .= $hinzufuegen.",";
                  }
              
    $what "where id not in (".substr($_SESSION["vote"],0,-1).")";
      } 

      
    // Select zur Abfrage und Aufruf der Bilder    
      
    $sql "SELECT id, bild from $table $what order by rand()";
      echo 
    $sql."<hr>";
      
    $rs mysql_query($sql);
      
    $row mysql_fetch_array($rs);
      
    $total mysql_num_rows($rs);
      
      
    // Ausgabe des jeweiligen Bildes mit Formular
      
    if($total == 0
            {
          echo 
    '<div style="text-align:center;">Kein Bild mehr da</div>';
          } else {
          
    $id $row[0];
          
    $bild $row[1];
            echo 
    '<form name="form1" method="post" action="'.$_SERVER['PHP_SELF'].'">';
          echo 
    '<input type="hidden" name="bildid" value="'.$id.'">'.$bild;
          echo 
    '<input type="radio" name="myvote" value="1"> 1 ';
          echo 
    '<input type="radio" name="myvote" value="2"> 2 ';
          echo 
    '<input type="radio" name="myvote" value="3"> 3 ';
          echo 
    '<input type="submit" name="Submit" value="Abschicken"></form>';
      } 
    mysql_free_result($rs);
    mysql_close($verbindung);
    ?>
    Geändert von Luzie (07.03.05 um 17:53 Uhr)
     
    liebe Grüße, die Luzie

  8. #8
    jensef jensef ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    13
    das liest sich ja gut, geht so wie du es schreibst auch, habe aber leider alles in einer Tabelle.
     
    es gibt nur 3 Weltstädte,New York,Tokio und Erfurt

  9. #9
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Zitat Zitat von jensef
    das liest sich ja gut, geht so wie du es schreibst auch, habe aber leider alles in einer Tabelle.
    Hi
    meinst Du jetzt eine html-Tabelle für die Ausgabe oder stecken Bilder und Vote in eine DB-Tabelle?

    Wobei eine Umsetzung aufgrund dieses Aspektes bestimmt nicht scheitern muss. Im übrigen war es nur ein Beispiel, eine Anregung, eine Möglichkeit der Realisierung mit der man mal arbeiten kann. Aber ich vermute mal, dass Du es nicht ausprobiert hast.

    Also dann.
     
    liebe Grüße, die Luzie

  10. #10
    jensef jensef ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    13
    hallo,

    doch habe ich.es ist alles in einer Tabelle.es steht die id die points und die votes drin.
    Die bilder stehen nicht drin die hole ich mir aus dem ordner anhand der id.also id 3 ist 3.jpg etc.die lasse ich mir dann anzeigen.
     
    es gibt nur 3 Weltstädte,New York,Tokio und Erfurt

  11. #11
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Hi

    das ist doch korrekt. Die Bilder sollten ja auch nicht in die DB, ist doch völlig in Ordnung, wenn er sich das Bild aufgrund der ID aus dem Ordner zieht. Wenn die bereits gevoteten ids in der Session stehen, werden sie eh nicht mehr aufgerufen.

    Es ist auch völlig egal, ob Du die Felder aus einer Tabelle liest und darein votest oder in eine 2.Tabelle und die dann beide verknüpfst. Die Anweisungen in meinem Beispiel sind doch eigentlich eindeutig, nutze nur eine Tabelle.

    Du kannst auch ein neues Vote updaten anstelle des Inserts.

    Die Echos legst Du in einen <body> Teil und packst dann die Tabelle drumrum.

    Ansonsten such Dir die Teile, die für Dich aus meinem Beispiel nützlich sind heraus und updatest Deinen Scriptteil damit.
     
    liebe Grüße, die Luzie

Ähnliche Themen

  1. Bilder anzeigen
    Von la_sol im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 31.01.09, 16:12
  2. Bilder anzeigen
    Von Snowowl im Forum PHP
    Antworten: 5
    Letzter Beitrag: 12.08.05, 13:42
  3. Bilder anzeigen
    Von Hooksieler im Forum PHP
    Antworten: 34
    Letzter Beitrag: 23.06.05, 09:20
  4. Bilder anzeigen
    Von Hooksieler im Forum PHP
    Antworten: 2
    Letzter Beitrag: 20.06.05, 17:27
  5. Bilder anzeigen in VB
    Von Bieka im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 01.11.04, 03:12