Seite 1 von 1

vote wird immer auf null gesetzt

Verfasst: Mi 22.Mär, 2023 09:54
von Icke
Hallo Leute,

PHP 8.2

Mein Votingsystem setzt '$vote' nach betätigung 'Bewerten' immer auf 0, egal was drin steht.

Code: Alles auswählen

 Vote-anzahl abfragen
	$sql = " SELECT * FROM $tbl_ WHERE id = ".(int)$id." ";
	if($result = mysqli_query($db, $sql))
		{
 		while($row = $result->fetch_assoc())
			{
			$vote_poi_ALT = $row['vote_poi'];
			$vote	= $row['vote'];
			$vote_ALT	= $row['vote'];
			}
		}
// Voting um eins  erhöhen 
	(int) $vote_poi = $vote_poi_ALT + 1;
// Vote-Ranking um Wert erhöhen
	(int) $vote = $vote_ALT + $vote;
	echo "/".$vote;
// Session setzen das gevotet wurde
if($vote!=0)
	{
	$sql = " UPDATE $tbl_ SET vote = ".(int) $vote." 
	AND vote_poi = ".(int) $vote_poi."
	WHERE id = ".(int)$id." ";
	mysqli_query($db, $sql);

	echo  "<script type='text/javascript'> self.close();  </script>";
	}
	
	kann da Jemand helfen :eek: 

Re: vote wird immer auf null gesetzt

Verfasst: Mi 22.Mär, 2023 16:47
von oxpus
Ich kann das Script nicht so ganz verstehen, denn (int) $vote = $vote_ALT + $vote; wäre nach diesem Ausschnitt doch das gleiche wie
(int) $vote = $vote_ALT * 2;.
Letztlich wird der Wert aus dem Feld "vote" zu sich selber addiert, also verdoppelt.
Denn:
$vote = $row['vote']; entspricht $vote_ALT = $row['vote'];, also wäre $vode = $vote_ALT; immer true, da identisch.

Aber zum eigentlichen Thema:

Um die Aktion (int) $vote = $vote_ALT + $vote; korrekt ausführen zu können, muss sichergestellt sein, dass das Feld "vote" in der Tabelle auch tatsächlich ein numerischer Wert ist.
Andernfalls würde der Plus-Operator aus einem String lediglich eine "0" herauslesen, wenn dieser nicht mit einer Zahl beginnt und 0 + 0 ist eben immer noch mathematisch 0.

Um den Zahlwert aus dem Feld zu gewinnen, sollte die Rechenanweisung besser so lauten, wenn schon kein rein nummerischer Wert dort vorhanden ist:

Code: Alles auswählen

$vote = (int) $vote_ALT + (int) $vote;
Denn nur dann werden die Inhalte in $vote_ALT und $vote, welche nach dem SELECT den gleichen Wert aus dem Feld "vote" beinhalten, zu einer möglichen Zahl umgewandelt.
Das "führende" (int) beim Ergebnis ist dann unnötig, da ein Wert + ein Wert immer auch ein nummerisches Ergebnis hervorbringt.

Kurzum:
Der Wert im Feld "vote" in der abgefragten Tabelle muss nummerisch sein, sonst würde PHP die Ziffer 0 annehmen, um damit zu rechnen.
Das dürfte dann auch wohl der Grund sein, warum $vote immer 0 ist.

Re: vote wird immer auf null gesetzt

Verfasst: Do 30.Mär, 2023 18:29
von Icke
Hallo Oxpus,

danke für deine Ausfürung. :)

wie werden den numerische Zahlen in der DB gespeichert?

oder wie erkennt man denn diese beim Abfragen.?

Gruß Icke :!:

Re: vote wird immer auf null gesetzt

Verfasst: Do 30.Mär, 2023 19:18
von oxpus
Das kommt auf den Feldtyp in der Tabelle an, die eben die einzelnen Felder definiert sind.
In der Abfrage sieht man das nicht.
Beispiel:
Screenshot 2023-03-30 191754.png
Mehr Details siehe hier: https://mariadb.com/kb/en/data-types/

Re: vote wird immer auf null gesetzt

Verfasst: Sa 01.Apr, 2023 17:59
von Icke
Hallo Oxpus,

danke für den Tipp mt 'Maria'. Habe jetzt die Daten angepasst, melde mich Morgen nochmal. :p

Gruß Icke

Re: vote wird immer auf null gesetzt

Verfasst: So 02.Apr, 2023 09:32
von Icke
Guten Morgen,

hallo Oxpus habe wie gesagt die tabellenwerte angepast, die datei etwas abgeändert und das habe ich jetzt.
$sql = " SELECT * FROM $tbl_ WHERE id = ".(int)$id." ";
if($result = mysqli_query($db, $sql))
{
while($row = $result->fetch_assoc())
{
$vote_poi_ALT = $row['vote_poi'];
$vote = $row['vote'];
}
}
$vote = $vote * 2;
// Voting um eins erhöhen
$vote_poi = $vote_poi_ALT + 1;
// Session setzen das gevotet wurde
$sql = " UPDATE $tbl_ SET vote = $vote AND vote_poi = $vote_poi WHERE id = ".(int)$id." ";

!!! Leider schreibt PHP immernoch 0 an. was muss ich jetzt noch ändern?

Re: vote wird immer auf null gesetzt

Verfasst: So 02.Apr, 2023 09:41
von Icke
Bild

Re: vote wird immer auf null gesetzt

Verfasst: So 02.Apr, 2023 11:36
von oxpus
Welche Werte stehen denn jetzt im Feld Vote in der Datenbank Tabelle?
Alles 0?

Re: vote wird immer auf null gesetzt

Verfasst: So 02.Apr, 2023 13:29
von Icke
Hallo Oxpus,

ja alle Möglichen werte, je nach dem wie voiting vorliegen.

Wenn du https://wasserwelt.org/vote.php?id=33090&tbl=4 anklickst öffnet sich eine neue Seite und dort wird dir der wert '$vote' angezeigt.

Gruß

Re: vote wird immer auf null gesetzt

Verfasst: So 02.Apr, 2023 22:04
von oxpus
Das Formular soll den Wert für $vote übergeben.
Ist das korrekt?

Dann wäre doch die Abfrage dieses Wertes aus der Datenbank und die anschließende Berechnung komplett falsch.
$vote müsste dann nicht den Wert aus der Datenbank * 2 beinhalten, sondern den Datenbankwert + intval($_POST['vote'])

Nur auf diese Weise würde doch die Bewertung aus dem Formular mit gespeichert werden können.
Sofern ich Dein Script jetzt korrekt interpretiere.

Aber noch einmal:
Was ist an Wert in der Datenbank gespeichert?
Steht dort im Feld "vote" 0 drinnen?
Muss es wohl, wenn der angezeigte Wert auf deiner Seite aus $vote stammt.
Dann wäre somit $vode = $row['vote'] * 2; mathematisch immer noch 0 ;)

Und zu guter Letzt:
Wie soll die vom Besucher Deiner Seite vorgenommene Bewertung mit gespeichert werden, wenn $vote aus in der Datenbank * 2 genommen wird und der Wert aus dem Formular dabei augenscheinlich überhaupt nicht berücksichtigt wird?

Anders ausgedrückt:
$vote_poi_ALT = $row['vote_poi']; beinhaltet wohl die Anzahl Abstimmungen. Diese wird jedes Mal um 1 erhöht und wieder abgespeichert.
$cote soll die Bewertung als solches beinhalten, also die Summe aller bisherigen Bewertungspunkte, wobei man von 1 bis 5 Punkte vergeben können soll.
Laut Deinem Script wird $vote aus der Datenbank ausgelesen aber lediglich verdoppelt.
Wie gesagt: Wenn 0 in der Tabelle steht, also in dem Moment, wo z. B. noch keine Bewertung vorliegt, wird 0 * 2 gerechnet und das Ergebnis ist dann immer noch 0!!
Wenn Du den Wert aus dem Abstimmungsformular verwenden willst, musst Du stattdessen $vode = $row['vote'] + intval($_POST['vote']); verwenden, sonst bleibt $vote immer 0.

Soviel zum logischen Verständnis der eigenen Programmierung ^a :pfff
Da solltest Du mal eher prüfen, was daran nicht stimmt, bevor andere um Rat gefragt werden.
Denn zum einen musste ich jetzt mehrfach nachfragen und rätseln, was das Script denn nun genau machen soll und erst mit dem "lebenden" Beispiel kam ich wohl erst der möglichen Lösung näher.
Wenn meine Vermutungen auch zutreffen. ^6

Re: vote wird immer auf null gesetzt

Verfasst: Mi 05.Apr, 2023 08:03
von Icke
Hallo Oxpus,

danke für deine Hilfe :p