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 :
Wenn ich das ganze so lasse und das Skripte ausführe, wird der Eintrag Test auch in die Datenbank übernommen!
Wenn ich jedoch :
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
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
Hallo,
hm und wo soll hier der Fehler sein?
Die Funktion samt MySQL hier :
_drawrating.php
db.php
Vielleicht sieht ja jemand den Fehler!
Natheedo
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.'&q='.$id.'&t='.$ip.'&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==0 ? $added=0 : $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 >= 1 && $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)
In Zeile 17 steht folgendes:
Kann es sein, dass die Zeichensetzung bei VALUES('$id',... falsch ist?
Ich würde hier eher das daraus machen:
Selbes Problem sehe ich in Zeile 11:
(berichtigt
Lag es daran?
|
|
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?
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.
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.
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
Also meine MySQL Datenbank hab ich so eingerichtet :
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.
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)
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.
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.
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
Zeile 66:
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...
|
|
PHP-Quelltext |
1 |
$rater.='<li><a href="../rating/db.php?j='.$ncount.'&q='.urlencode($id).'&t='.urlencode($ip).'&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.
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
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
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
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==0 ? $added=0 : $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 >= 1 && $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ü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)


