Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 393 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

Natheedo

Eroberer

Dabei seit: 04.10.2005

Beiträge: 53

 

1 Zum Seitenanfang

Freitag, 23. November 2007, 03:14

Mysql Eintrag mit Leerzeichen wird nicht eingefügt, soll aber!

Halli Hallo,

ich versuche mich gerade ein bisschen an PHP + MySql.

Habe hier einen Befehl von einem Ranking Skript :

PHP-Quelltext

1
<?php echo rating_bar('Test'); ?>


Wenn ich das ganze so lasse und das Skripte ausführe, wird der Eintrag Test auch in die Datenbank übernommen!

Wenn ich jedoch :

PHP-Quelltext

1
<?php echo rating_bar('Ein weiterer Test'); ?>


ausführen möchte, geht das nicht und das Skript hängt inner Endlosschleife, wahrscheinlich wegen den Leerzeichen.

Mir wäre es aber wichtig wenn ich das auch mit Leerzeichen irgendwie übernehmen kann. Geht das denn überhaupt ???

Vielen Dank !

Natheedo
 

Skittles

Moderator

Dabei seit: 14.02.2004

Beiträge: 3 014

 

2 Zum Seitenanfang

Freitag, 23. November 2007, 07:13

also gehen sollte es, da muss wohl ein fehler in der funktion vorliegen

~!__/
..o.o

This is Einkaufswagen.
Copy Einkaufswagen into your signature to help him on his way to world domination.
 

Natheedo

Eroberer

Dabei seit: 04.10.2005

Beiträge: 53

 

3 Zum Seitenanfang

Freitag, 23. November 2007, 13:50

Hallo,

hm und wo soll hier der Fehler sein?

Die Funktion samt MySQL hier :

_drawrating.php

PHP-Quelltext

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
function rating_bar($id,$units='',$static='') { 

  require('_config-rating.php'); // get the db connection info
    
//set some variables
  $ip $_SERVER['REMOTE_ADDR'];
  if (!$units) {$units 10;}
  if (!$static) {$static FALSE;}

// get votes, values, ips for the current rating bar
  $query=mysql_query("SELECT total_votes, total_value, used_ips FROM $rating_dbname.$rating_tableName WHERE id='$id' ")or die(" Error: ".mysql_error());


// insert the id in the DB if it doesn't exist already
// see: http://www.masugadesign.com/the-lab/scripts/unobtrusive-ajax-star-rating-bar/#comment-121
  if (mysql_num_rows($query) == 0) {
    $sql "INSERT INTO $rating_dbname.$rating_tableName (`id`,`total_votes`, `total_value`, `used_ips`) VALUES ('$id', '0', '0', '')";
    $result mysql_query($sql);
  }

  $numbers=mysql_fetch_assoc($query);


  if ($numbers['total_votes'] < 1) {
    $count 0;
  } else {
    $count=$numbers['total_votes']; //how many votes total
  }
  $current_rating=$numbers['total_value']; //total number of rating added together and stored
  $tense=($count==1) ? "vote" "votes"//plural form votes/vote

// determine whether the user has voted, so we know how to draw the ul/li
  $voted=mysql_num_rows(mysql_query("SELECT used_ips FROM $rating_dbname.$rating_tableName WHERE used_ips LIKE '%".$ip."%' AND id='".$id."' ")); 

// now draw the rating bar
  $rating_width = @number_format($current_rating/$count,2)*$rating_unitwidth;
  $rating1 = @number_format($current_rating/$count,1);
  $rating2 = @number_format($current_rating/$count,2);


  if ($static == 'static') {

        $static_rater = array();
        $static_rater[] .= "\n".'<div class="ratingblock">';
        $static_rater[] .= '<div id="unit_long'.$id.'">';
        $static_rater[] .= '<ul id="unit_ul'.$id.'" class="unit-rating" style="width:'.$rating_unitwidth*$units.'px;">';
        $static_rater[] .= '<li class="current-rating" style="width:'.$rating_width.'px;">Currently '.$rating2.'/'.$units.'</li>';
        $static_rater[] .= '</ul>';
        $static_rater[] .= '<p class="static">'.$id.'. Bewertung: <strong> '.$rating1.'</strong>/'.$units.' ('.$count.' '.$tense.' insgesamt) <em>This is \'static\'.</em></p>';
        $static_rater[] .= '</div>';
        $static_rater[] .= '</div>'."\n\n";
        return join("\n"$static_rater);


  } else {

      $rater ='';
      $rater.='<div class="ratingblock">';

      $rater.='<div id="unit_long'.$id.'">';
      $rater.='  <ul id="unit_ul'.$id.'" class="unit-rating" style="width:'.$rating_unitwidth*$units.'px;">';
      $rater.='     <li class="current-rating" style="width:'.$rating_width.'px;">Currently '.$rating2.'/'.$units.'</li>';

      for ($ncount 1$ncount <= $units$ncount++) { // loop from 1 to the number of units
           if(!$voted) { // if the user hasn't yet voted, draw the voting stars
              $rater.='<li><a href="../rating/db.php?j='.$ncount.'&amp;q='.$id.'&amp;t='.$ip.'&amp;c='.$units.'" title="'.$ncount.' von '.$units.' Sternen" class="r'.$ncount.'-unit rater" rel="nofollow">'.$ncount.'</a></li>';
           }
      }
      $ncount=0// resets the count

      $rater.='  </ul>';
      $rater.='  <p';
      if($voted){ $rater.=' class="voted"'; }
      $rater.='>'.$id.' Bewertung: <strong> '.$rating1.'</strong>/'.$units.' ('.$count.' '.$tense.' insgesamt)';
      $rater.='  </p>';
      $rater.='</div>';
      $rater.='</div>';
      return $rater;
  }
}
?>


db.php

PHP-Quelltext

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
require('../rating/_config-rating.php'); // get the db connection info

//getting the values
$vote_sent preg_replace("/[^0-9]/","",$_REQUEST['j']);
$id_sent preg_replace("/[^0-9a-zA-Z]/","",$_REQUEST['q']);
$ip_num preg_replace("/[^0-9\.]/","",$_REQUEST['t']);
$units preg_replace("/[^0-9]/","",$_REQUEST['c']);
$ip $_SERVER['REMOTE_ADDR'];
$referer  $_SERVER['HTTP_REFERER'];

if ($vote_sent $units) die("Sorry, vote appears to be invalid."); // kill the script because normal users will never see this.

//connecting to the database to get some information
$query mysql_query("SELECT total_votes, total_value, used_ips FROM $rating_dbname.$rating_tableName WHERE id='$id_sent' ")or die(" Error: ".mysql_error());
$numbers mysql_fetch_assoc($query);
$checkIP unserialize($numbers['used_ips']);
$count $numbers['total_votes']; //how many votes total
$current_rating $numbers['total_value']; //total number of rating added together and stored
$sum $vote_sent+$current_rating// add together the current vote value and the total vote value
$tense = ($count==1) ? "vote" "votes"//plural form votes/vote

// checking to see if the first vote has been tallied
// or increment the current number of votes
($sum==$added=$added=$count+1);

// if it is an array i.e. already has entries the push in another value
((is_array($checkIP)) ? array_push($checkIP,$ip_num) : $checkIP=array($ip_num));
$insertip=serialize($checkIP);

//IP check when voting
$voted=mysql_num_rows(mysql_query("SELECT used_ips FROM $rating_dbname.$rating_tableName WHERE used_ips LIKE '%".$ip."%' AND id='".$id_sent."' "));
if(!$voted) {     //if the user hasn't yet voted, then vote normally...


if (($vote_sent >= && $vote_sent <= $units) && ($ip == $ip_num)) { // keep votes within range
    $update "UPDATE $rating_dbname.$rating_tableName SET total_votes='".$added."', total_value='".$sum."', used_ips='".$insertip."' WHERE id='$id_sent'";
    $result mysql_query($update);        
} 
header("Location: $referer"); // go back to the page we came from 
exit;
} //end for the "if(!$voted)"
?>


Vielleicht sieht ja jemand den Fehler!

Natheedo

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Natheedo« (23. November 2007, 17:35)

 

ospx

Kaiser

Dabei seit: 11.11.2006

Beiträge: 1 131

 

4 Zum Seitenanfang

Freitag, 23. November 2007, 14:48

In Zeile 17 steht folgendes:

PHP-Quelltext

1
$sql "INSERT INTO $rating_dbname.$rating_tableName (`id`,`total_votes`, `total_value`, `used_ips`) VALUES ('$id', '0', '0', '')";


Kann es sein, dass die Zeichensetzung bei VALUES('$id',... falsch ist?
Ich würde hier eher das daraus machen:

PHP-Quelltext

1
$sql "INSERT INTO $rating_dbname.$rating_tableName (`id`,`total_votes`, `total_value`, `used_ips`) VALUES ('".$id."', '0', '0', '')";


Selbes Problem sehe ich in Zeile 11:
(berichtigt:)

PHP-Quelltext

1
$query=mysql_query("SELECT total_votes, total_value, used_ips FROM $rating_dbname.$rating_tableName WHERE id='".$id."' ")or die(" Error: ".mysql_error());


Lag es daran?
 

Natheedo

Eroberer

Dabei seit: 04.10.2005

Beiträge: 53

 

5 Zum Seitenanfang

Freitag, 23. November 2007, 15:29

Vielen Danke, aber leider nein, gleiches Ergebniss.
 

heinervdm

Technik-Admin

Dabei seit: 02.10.2002

Beiträge: 3 772

 

6 Zum Seitenanfang

Freitag, 23. November 2007, 16:46

Wie sieht denn die Struktur deiner MySQL DB aus?
Existiert schon ein Eintrag mit der ID?
Wenn keiner existiert wird mit dem Code auch nichts angezeigt.
Über mich: www.heinervdm.de
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
 

Natheedo

Eroberer

Dabei seit: 04.10.2005

Beiträge: 53

 

7 Zum Seitenanfang

Freitag, 23. November 2007, 17:01

Also meine MySQL Datenbank hab ich so eingerichtet :

Zitat


CREATE TABLE `ratings` (
`id` varchar(20) NOT NULL,
`total_votes` int(11) NOT NULL default 0,
`total_value` int(11) NOT NULL default 0,
`used_ips` longtext,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=3;


Wenn ich die ID _ohne_ Leerzeichen nehme, wird der Eintrag auch korrekt geschrieben. Also es geht dann, IP, total votes usw. wird alles übernommen.

Sofern die ID aber Leerzeichen, - Zeichen oder _ Zeichen drin hat. Wird zwar der ID Eintrag in die Datenbank eingetragen, aber die anderen bleiben leer und das Skript hängt sozusagen in ner Endlosschelife, weil es vermutlich nix schreiben konnte.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Natheedo« (23. November 2007, 17:30)

 

heinervdm

Technik-Admin

Dabei seit: 02.10.2002

Beiträge: 3 772

 

8 Zum Seitenanfang

Freitag, 23. November 2007, 17:20

Ah, das ist ja schon mal eine Andere Aussage!
Der Eintrag der ID in die DB funktioniert also, nur die der restlichen Daten nicht.

Wenn du jetzt mal noch den Code oben korrigierst finden wir im fehlenden Teil vieleicht auch noch die Lösung.
Über mich: www.heinervdm.de
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
 

Natheedo

Eroberer

Dabei seit: 04.10.2005

Beiträge: 53

 

9 Zum Seitenanfang

Freitag, 23. November 2007, 17:37

So wie Du das sagst, weckst du Hoffnungen in mir :)

Hab die Codes oben angepasst und die db.php mit eingefügt, vielleicht liegt der Fehler ja auch da.
 

heinervdm

Technik-Admin

Dabei seit: 02.10.2002

Beiträge: 3 772

 

10 Zum Seitenanfang

Samstag, 24. November 2007, 10:38

Zeile 66:

PHP-Quelltext

1
$rater.='<li><a href="../rating/db.php?j='.$ncount.'&amp;q='.urlencode($id).'&amp;t='.urlencode($ip).'&amp;c='.$units.'" title="'.$ncount.' von '.$units.' Sternen" class="r'.$ncount.'-unit rater" rel="nofollow">'.$ncount.'</a></li>';

Das Problem liegt nicht an der Datenbank sondern an der Übergabe der ID.
Entweder hilft das hier jetzt oder wir müssen in der db.php weitermachen.
Dort verstehe ich noch nicht, was die preg_replace dort am Anfang sollen...
Über mich: www.heinervdm.de
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
 

Natheedo

Eroberer

Dabei seit: 04.10.2005

Beiträge: 53

 

11 Zum Seitenanfang

Samstag, 24. November 2007, 15:58

Danke sehr! Die Änderung hat jetzt zwar den Effekt gehabt dass das Skript nicht mehr in der Endlosschleife hängt, jedoch ist es jetzt so das beim "Stern anklicken" also Bewertung abgeben, die Seite neu geladen wird und die Bewertung nicht gezählt hat.

In der Datenbank ist jedoch das selbe, wie zuvor. ID steht drin, der rest nicht.

Vielleicht ist ja auch hier der Fehler, wobei ich da schon x mal drüber geguckt habe ....

rpc.php

PHP-Quelltext

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
require('../rating/_config-rating.php'); // get the db connection info

//getting the values
$vote_sent preg_replace("/[^0-9]/","",$_REQUEST['j']);
$id_sent preg_replace("/[^0-9a-zA-Z]/","",$_REQUEST['q']);
$ip_num preg_replace("/[^0-9\.]/","",$_REQUEST['t']);
$units preg_replace("/[^0-9]/","",$_REQUEST['c']);
$ip $_SERVER['REMOTE_ADDR'];

if ($vote_sent $units) die("Sorry, vote appears to be invalid."); // kill the script because normal users will never see this.


//connecting to the database to get some information
$query mysql_query("SELECT total_votes, total_value, used_ips FROM $rating_dbname.$rating_tableName WHERE id='$id_sent' ")or die(" Error: ".mysql_error());
$numbers mysql_fetch_assoc($query);
$checkIP unserialize($numbers['used_ips']);
$count $numbers['total_votes']; //how many votes total
$current_rating $numbers['total_value']; //total number of rating added together and stored
$sum $vote_sent+$current_rating// add together the current vote value and the total vote value
$tense = ($count==1) ? "vote" "votes"//plural form votes/vote

// checking to see if the first vote has been tallied
// or increment the current number of votes
($sum==$added=$added=$count+1);

// if it is an array i.e. already has entries the push in another value
((is_array($checkIP)) ? array_push($checkIP,$ip_num) : $checkIP=array($ip_num));
$insertip=serialize($checkIP);

//IP check when voting
$voted=mysql_num_rows(mysql_query("SELECT used_ips FROM $rating_dbname.$rating_tableName WHERE used_ips LIKE '%".$ip."%' AND id='".$id_sent."' "));
if(!$voted) {     //if the user hasn't yet voted, then vote normally...

    if (($vote_sent >= && $vote_sent <= $units) && ($ip == $ip_num)) { // keep votes within range, make sure IP matches - no monkey business!
        $update "UPDATE $rating_dbname.$rating_tableName SET total_votes='".$added."', total_value='".$sum."', used_ips='".$insertip."' WHERE id='$id_sent'";
        $result mysql_query($update);        
    } 
} //end for the "if(!$voted)"
// these are new queries to get the new values!
$newtotals mysql_query("SELECT total_votes, total_value, used_ips FROM $rating_dbname.$rating_tableName WHERE id='$id_sent' ")or die(" Error: ".mysql_error());
$numbers mysql_fetch_assoc($newtotals);
$count $numbers['total_votes'];//how many votes total
$current_rating $numbers['total_value'];//total number of rating added together and stored
$tense = ($count==1) ? "vote" "votes"//plural form votes/vote

// $new_back is what gets 'drawn' on your page after a successful 'AJAX/Javascript' vote

$new_back = array();

$new_back[] .= '<ul class="unit-rating" style="width:'.$units*$rating_unitwidth.'px;">';
$new_back[] .= '<li class="current-rating" style="width:'.@number_format($current_rating/$count,2)*$rating_unitwidth.'px;">Current rating.</li>';
$new_back[] .= '<li class="r1-unit">1</li>';
$new_back[] .= '<li class="r2-unit">2</li>';
$new_back[] .= '<li class="r3-unit">3</li>';
$new_back[] .= '<li class="r4-unit">4</li>';
$new_back[] .= '<li class="r5-unit">5</li>';
$new_back[] .= '<li class="r6-unit">6</li>';
$new_back[] .= '<li class="r7-unit">7</li>';
$new_back[] .= '<li class="r8-unit">8</li>';
$new_back[] .= '<li class="r9-unit">9</li>';
$new_back[] .= '<li class="r10-unit">10</li>';
$new_back[] .= '</ul>';
$new_back[] .= '<p class="voted">'.$id_sent.'. Bewertung: <strong>'.@number_format($sum/$added,1).'</strong>/'.$units.' ('.$count.' '.$tense.' insgesamt) ';
$new_back[] .= '<span class="thanks">Danke f&uuml;r die Stimme!</span></p>';
$allnewback join("\n"$new_back);

// ========================

//name of the div id to be updated | the html that needs to be changed
$output "unit_long$id_sent|$allnewback";
echo $output;
?>


Aber weißte bevor Du dir da jetzt nen Zacken abbrichst auf gut Deutsch, werde ich nicht weiter deine kostbare Zeit verschwenden und das Skript entweder verwerfen oder gucken das ich nur Einträge ohne Leerzeichen und nichts mache.

Vielen lieben Dank jedenfalls.

Natheedo

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Natheedo« (24. November 2007, 15:59)