bilder anzeigen

jensef

Grünschnabel
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:
<?
  @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();
?>
 
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:
   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
 

Luzie

Erfahrenes Mitglied
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.
 

jensef

Grünschnabel
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.
 

Luzie

Erfahrenes Mitglied
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:
<?
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.
 

jensef

Grünschnabel
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:
 $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;
 

Luzie

Erfahrenes Mitglied
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:
<?
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);
?>
 
Zuletzt bearbeitet:

Luzie

Erfahrenes Mitglied
jensef hat gesagt.:
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.
 

jensef

Grünschnabel
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.
 

Neue Beiträge