vote wird immer auf null gesetzt

PHP, Ajax, CSS, HTML, Javascript
Eben für die wirklich Harten, die alles selber machen.
Antworten
Icke
Beiträge: 104
Registriert: So 20.Jun, 2021 16:15

vote wird immer auf null gesetzt

Beitrag 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: 
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: vote wird immer auf null gesetzt

Beitrag 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.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Icke
Beiträge: 104
Registriert: So 20.Jun, 2021 16:15

Re: vote wird immer auf null gesetzt

Beitrag 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 :!:
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: vote wird immer auf null gesetzt

Beitrag 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/
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Icke
Beiträge: 104
Registriert: So 20.Jun, 2021 16:15

Re: vote wird immer auf null gesetzt

Beitrag von Icke »

Hallo Oxpus,

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

Gruß Icke
Icke
Beiträge: 104
Registriert: So 20.Jun, 2021 16:15

Re: vote wird immer auf null gesetzt

Beitrag 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?
Icke
Beiträge: 104
Registriert: So 20.Jun, 2021 16:15

Re: vote wird immer auf null gesetzt

Beitrag von Icke »

Bild
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: vote wird immer auf null gesetzt

Beitrag von oxpus »

Welche Werte stehen denn jetzt im Feld Vote in der Datenbank Tabelle?
Alles 0?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Icke
Beiträge: 104
Registriert: So 20.Jun, 2021 16:15

Re: vote wird immer auf null gesetzt

Beitrag 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ß
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: vote wird immer auf null gesetzt

Beitrag 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
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Icke
Beiträge: 104
Registriert: So 20.Jun, 2021 16:15

Re: vote wird immer auf null gesetzt

Beitrag von Icke »

Hallo Oxpus,

danke für deine Hilfe :p
Antworten