ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
908
908
EMPFEHLEN
-
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("<","<",$name); $name = str_replace(">",">",$name); $name = stripslashes($name); $text = $_GET["comment_text"]; $text = str_replace("<","<",$text); $text = str_replace(">",">",$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\"> </td>"; for($i=1;$i<=$max_points;$i++){ echo " <td align=\"center\">$i</td>"; } echo " <td rowspan=\"2\" width=\"10\"> </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\"> </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\"> </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> </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
-
06.03.05 11:45 #2
- 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:
in dem Fall werden nnun nur die Aktuellen 10 aus der Datebank dagestellt. Kannst ja mal versuchen ob das auch bei dir gehtPHP-Code:LIMIT 10;

Gruß Claudia
-
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
-
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
-
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.
Wie aber gesagt, ich bin auch kein Profi, es gibt bestimmt noch andere Möglichkeiten.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";
[...]
?>liebe Grüße, die Luzie
-
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\"> </td>"; for($i=1;$i<=$max_points;$i++){ echo " <td align=\"center\">$i</td>"; } echo " <td rowspan=\"2\" width=\"10\"> </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\"> </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
-
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
-
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
-
Hi
Zitat von jensef
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
-
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
-
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
-
Bilder anzeigen
Von la_sol im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 31.01.09, 16:12 -
Bilder anzeigen
Von Snowowl im Forum PHPAntworten: 5Letzter Beitrag: 12.08.05, 13:42 -
Bilder anzeigen
Von Hooksieler im Forum PHPAntworten: 34Letzter Beitrag: 23.06.05, 09:20 -
Bilder anzeigen
Von Hooksieler im Forum PHPAntworten: 2Letzter Beitrag: 20.06.05, 17:27 -
Bilder anzeigen in VB
Von Bieka im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 01.11.04, 03:12





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren