php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 09-01-2008, 11:10
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Wie erstelle ich einen Zähler,der die Klicks auf einen Link zählt.

Hallo zusammen,

ich hab ein kleines Problem zum Thema Counter. Die Suche habe ich schon bemüht, aber nicht das gefunden was mir weiterhelfen könnte. Es geht darum, dass das angeführte script einen Datensatz aus der Datenbank holt, wenn der entsprechende Link geklickt wurde. Nun muss ein Zähler um eins erhöht werden und der neue Zählerstand im entsprechenden Datensatz hinterlegt werden.

<?php
//Header laden
require_once ($_SERVER["DOCUMENT_ROOT"] . "/head.php");

//Datenbank verbinden
require_once ($_SERVER["DOCUMENT_ROOT"] . "/functions/connect.php");

//alle Datensätze für das linke Menü im passenden div laden
echo "<div id='menu'>";
echo "<ul>";
$query = "SELECT * FROM daten";
$result = mysql_query($query);
if (!$result)
{
die('Ungültige Abfrage: ' . mysql_error());
}
//Daten ausgeben und Link ermitteln
while($row = mysql_fetch_array($result))
{
echo "<li><a href='datensatz.php?id=" . $row['id'] . "'>" . $row['vorname'] . " " . $row['nachname'] . "</a></li>";
}

//angeklickten Datensatz im passenden div laden
$query = "SELECT * FROM daten WHERE (id = '" . $_GET['id'] . "')";;
$result = mysql_query($query);
if (!$result)
{
die('Ungültige Abfrage: ' . mysql_error());
}
echo "</ul>";
echo "</div>";
echo "<div id='contents'>";
print_r ($result);
//geladenen Datensatz ausgeben
while($row = mysql_fetch_array($result))
{
echo $row['id'];
$zahl = $row['counter']; //Zählerstand in $zahl festhalten
echo $row['vorname'];
echo $row['nachname'];
echo $row['counter'];
}
echo "</div>";
$zaehler = 1;
$nzahl = $zahl + $zaehler; //neuen Zählerstand erstellen
//Zähler erhöhen und in Datenbank schreiben

//$query = "UPDATE daten SET aktiv=1 WHERE email='" . $_POST["username"] . "' && passwort='" . $_POST["passwort"] . "'";
// $result = mysql_query($query);
// if(!$result)
// {
// die("Datenbank zu Wartungszwecken down !");
// }

//Footer anfügen
require_once ($_SERVER["DOCUMENT_ROOT"] . "/foot.php");
?>

Problem ist nun, das der neue Zählerstand nur einmal neu erstellt wird. Wie muss ich das machen, das jeder klick erkannt wird und $nzahl dabei um eins erhöht wird? Gibts da ne Funktion in php die ich nicht kenne die sowas macht?



Gruß

Michael
Mit Zitat antworten
  #2 (permalink)  
Alt 09-01-2008, 11:13
MelloPie
 PHP Master
Links : Onlinestatus : MelloPie ist offline
Registriert seit: Jan 2002
Ort: Hessen
Beiträge: 4.380
MelloPie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

UPDATE counter eben
__________________
Beantworte nie Threads mit mehr als 15 followups...
Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

Geändert von MelloPie (09-01-2008 um 11:16 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 09-01-2008, 11:23
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ähm, dass ist jetzt nicht aufschlussreich für mich. Ich interpretier das mal so, dass ich da in php gar nichts zu machen brauche sondern mit nem update-query einfach den Counter erhöhen kann. Wenn ja wie funktioniert das?

Das anzeigen des aktuellen Standes ist ja kein Akt, der kommt ja im select-query mit rüber.


Gruß

Michael
Mit Zitat antworten
  #4 (permalink)  
Alt 09-01-2008, 11:24
MelloPie
 PHP Master
Links : Onlinestatus : MelloPie ist offline
Registriert seit: Jan 2002
Ort: Hessen
Beiträge: 4.380
MelloPie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

jap in der datenbank den wert für 'counter' um eins erhöhen mittels UPDATE statement
__________________
Beantworte nie Threads mit mehr als 15 followups...
Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25
Mit Zitat antworten
  #5 (permalink)  
Alt 09-01-2008, 11:29
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Mach es doch direkt via SQL. Ich würde jetzt für die Klicks eine Tabelle anlegen mit dem Pfad der Datei ausgehend vom DOC ROOT (als UNIQUE) und einer Spalte für die Klicks.
Zum Eintragen dann einfach
PHP-Code:
$sql "INSERT INTO table (pfad,hits) VALUES ('".$_SERVER['PHP_SELF']."',1) ON DUPLICATE KEY UPDATE hits=hits+1"
Gruss

tobi
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #6 (permalink)  
Alt 09-01-2008, 11:33
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wieso eine neue Tabelle? In der letzten Spalte der Tabelle mit den Datensätzen habe ich den Zählerstand schon vorgesehen. Der muss einfach nur beim Klick auf den Satz, genauer gesagt, wenn der Satz per Select geholt wird einfach um eins erhöht werden.
Mit Zitat antworten
  #7 (permalink)  
Alt 09-01-2008, 11:45
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
In der letzten Spalte der Tabelle mit den Datensätzen habe ich den Zählerstand schon vorgesehen.
Ist das die Tabelle daten wo auch die Userdaten drin stehen? Ich habe dich so verstanden, dass du die Klicks pro Seite willst und nicht pro User. Wenn du die Klicks pro Seite willst würde ich eine neue Tabelle empfehlen, damit diese Daten getrennt sind. Wenn du sie pro User willst, dann kannst du es so lassen... (musst aber ggf den Code anpassen, weil der SELECT nach $_GET['id'] dann mehrere Datensätze liefern kann)
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #8 (permalink)  
Alt 09-01-2008, 11:50
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Und lies mal die Forumsregeln(gilt auch für hwk06). Konkret benutze, auch im eigenen Interesse, PHP-Tags. Die Wahrscheinlichkeit, dass jemand dann deinen Code anschaut ist bedeutend grösser.
Mindestens ich schau mir solch unformatiertes Zeugs sonst nicht an.
__________________
Gruss
H2O
Mit Zitat antworten
  #9 (permalink)  
Alt 09-01-2008, 11:55
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von H2O
Mindestens ich schau mir solch unformatiertes Zeugs sonst nicht an.
OffTopic:
Ich auch nicht
Mit Zitat antworten
  #10 (permalink)  
Alt 09-01-2008, 11:57
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Genau, jeder Datensatz entspricht einem User. Jeder Klick darauf muss den Zähler dieses Users um eins erhöhen. Also kann ich das alles zusammen in einer Tabelle lassen. Den select brauche ich eigentlich nicht zu ändern, da per Script sichergestellt ist, das jeder User einen neuen Datensatz erhält. Die Spalte ist eine auto_increment.

Aber wie muss der Query dann aussehen? Die Tabelle heissst daten und die Spalte counter.


@h2o. Werde dann ab sofort die Tags benutzen.
Mit Zitat antworten
  #11 (permalink)  
Alt 09-01-2008, 12:48
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Irgendwie so
PHP-Code:
$query "UPDATE daten SET aktiv=1, counter=counter+1 WHERE 
email='" 
$_POST["username"] . "' && passwort='" $_POST["passwort"] . "'"
würde ich das mal probieren.
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

Geändert von jahlives (09-01-2008 um 13:03 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 09-01-2008, 13:38
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
$query "UPDATE daten SET counter=counter+1 WHERE (id = '" $_GET['id'] . "')"
Das ist das Statement, mit dem ich pro Datensatz den Zähler um eins hochsetzen kann. Über $_GET['id'] ist auch sichergestellt, das der richtige Datensatz gezählt wird.


btw, noch ne weitere Frage. Gesetzt den Fall, es werden per Script mehrere Datensätze importiert. Sagen wir mal fünf Stück. Diese bleiben dann eine gewisse Zeit online und werden dann wieder exportiert. Wie kann ich das jetzt realsieren, dass ich zum Exportzeitpunkt auch genau diese 5 Sätze wieder erwische. Meiner Meinung nach, müsste es dann noch ne Spalte Import geben, in die dann eine Zahl, sprich die Importnummer geschrieben wird. Beim Export müsste ich dem Select doch eigentlich nur mitgeben, das er die Sätze suchen soll, die die passende Importnummer haben. Richtig? Wie würdet ihr das aufziehen?
Mit Zitat antworten
  #13 (permalink)  
Alt 09-01-2008, 13:42
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich nehme an dass id ein Integer ist und darum weg mit ' und ' um GET
Mach dich auch mal über mysql Injections schlau. Und überleg dir mal wie du es anstellen willst, dass dieser counter möglichst nicht gefaked werden kann. Ich kann einfach eine exisitierende id angeben und dein counter legt los.
Was genau du mit dem Import/Export meinst erschliesst sich mir momentan nicht ganz.

Gruss

tobi
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #14 (permalink)  
Alt 09-01-2008, 13:59
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hab das Script schon korrigiert. Wie kriegt man so einen counter sicher und was sind injections? Habs mal in der Suche der Handbücher con php und mysql eingegeben, aber nichts gefunden (oder falsch eingegeben).

Ich importiere per Query Daten aus eine csv-Datei. Diese werden dann dargestellt und die Klicks drauf gezählt. Dann werden sie wieder in eine csv exportiert.

Import - Datei
PHP-Code:
//Datenbank verbinden
require_once ($_SERVER["DOCUMENT_ROOT"] . "/functions/connect.php");
// einlesen der Datei
$datei "input.csv";
$csv file($datei);// Liest die Datei zeilenweise in ein Array
foreach($csv as $value)
    {
     
$parts explode(";"$value);// Zerbrechen der Zeile anhand des Trenners ";"
     
$partquery implode("','"$parts);
     
$partquery "'" $partquery "'"// Ergebnis soll 'Hallo', 'Welt', 'Michael' sein
// Reinschreiben in die datenbank (spalte1 ist autoincrement PRIMARY KEY) $query = "INSERT INTO testtab (spalte2, spalte3, spalte4) VALUES(" . 
     
$query "INSERT INTO daten (vorname, nachname, strasse, plz, ort, geburtsdatum) VALUES(" $partquery ")";
     
$result mysql_query($query);
     if (!
$result)
     {
      die(
'Ungültige Abfrage: ' mysql_error());
     }
     } 
Hier müsste es dann eben so sein, dass ich immer wieder die Sätze erwische die von einem import in die DB geschriebn wurden. So kann ich immer genau den Zeitraum bestimmen, den der Datensatz online war.
Mit Zitat antworten
  #15 (permalink)  
Alt 09-01-2008, 14:21
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von fritzje610
Ich importiere per Query Daten aus eine csv-Datei.
Das geht dann auch noch viel einfacher mit fgetvsc().
Und für den Import hängst du halt noch ein Attribut für das Importdatum an.
Das könnte dann etwa so aussehen:
PHP-Code:
<?php
//Datenbank verbinden
require_once ($_SERVER["DOCUMENT_ROOT"] . "/functions/connect.php");
// einlesen der Datei
$fp fopen('input.csv''r');
while(
$parts fgetcsv($fp512';')){
     
$partquery[] = "('" implode("','"$parts) . "', CURDATE())";
}
$query "INSERT INTO daten (vorname, nachname, strasse, plz, ort, geburtsdatum, importdat) 
                VALUES " 
implode('\n, '$partquery);
echo 
"$query<br />";        // Nur zum Testen
$result mysql_query($query) || die('Ungültige Abfrage: ' mysql_error());
?>
Bist du übrigens sicher, dass das geburtsdatum richtig formatiert in der Datei steht?
__________________
Gruss
H2O

Geändert von H2O (09-01-2008 um 14:33 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:12 Uhr.