login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Post, update id als 1 (Opgelost)

Offline arthurheijm - 12/12/2013 16:32
Avatar van arthurheijmLid Ik heb een script van internet gehaald, voor mijn fotoalbum met commentaar.
Het script werk bijna helemaal goed op een ding na.
Als ik er een commentaar bij plaats, post hij altijd als foto id een 1.
Wie kan hier op zien wat er hier fout in zit ?
  1. <?php
  2.  
  3. class CMyComments {
  4.  
  5. // constructor
  6. function CMyComments() {
  7. }
  8.  
  9. // return comments block
  10. function getComments($i) {
  11. // draw last 10 comments
  12. $sComments = '';
  13. $aComments = $GLOBALS['MySQL']->getAll("SELECT * FROM `s281_items_cmts` WHERE `c_item_id` = '{$i}' ORDER BY `c_when` DESC LIMIT 10");
  14. foreach ($aComments as $i => $aCmtsInfo) {
  15. $sWhen = date('F j, Y H:i', $aCmtsInfo['c_when']);
  16. $sComments .= <<<EOF
  17. <div class="comment" id="{$aCmtsInfo['c_id']}">
  18.   <p>Comment from {$aCmtsInfo['c_name']} <span>({$sWhen})</span>:</p>
  19.   <p>{$aCmtsInfo['c_text']}</p>
  20. </div>
  21. EOF;
  22. }
  23.  
  24. return <<<EOF
  25. <div class="comments" id="comments">
  26.   <h2>Comments</h2>
  27.   <div id="comments_warning1" style="display:none">Don`t forget to fill both fields (Name and Comment)</div>
  28.   <div id="comments_warning2" style="display:none">You can't post more than one comment per 10 minutes (spam protection)</div>
  29.   <form onsubmit="return false;">
  30.   <table>
  31.   <tr><td class="label"><label>Your name: </label></td><td class="field"><input type="text" value="" title="Please enter your name" id="name" /></td></tr>
  32.   <tr><td class="label"><label>Comment: </label></td><td class="field"><textarea name="text" id="text"></textarea></td></tr>
  33.   <tr><td class="label">&nbsp;</td><td class="field"><button onclick="submitComment({$i}); return false;">Post comment</button></td></tr>
  34.   </table>
  35.   </form>
  36.   <div id="comments_list">{$sComments}</div>
  37. </div>
  38. EOF;
  39. }
  40.  
  41. function acceptComment() {
  42. $iItemId = (int)$_POST['id']; // prepare necessary information
  43. $sIp = $this->getVisitorIP();
  44. $sName = $GLOBALS['MySQL']->escape(strip_tags($_POST['name']));
  45. $sText = $GLOBALS['MySQL']->escape(strip_tags($_POST['text']));
  46.  
  47. if ($sName && $sText) {
  48. // check - if there is any recent post from you or not
  49. $iOldId = $GLOBALS['MySQL']->getOne("SELECT `c_item_id` FROM `s281_items_cmts` WHERE `c_item_id` = '{$iItemId}' AND `c_ip` = '{$sIp}' AND `c_when` >= UNIX_TIMESTAMP() - 600 LIMIT 1");
  50. if (! $iOldId) {
  51. // if everything is fine - allow to add comment
  52. $GLOBALS['MySQL']->res("INSERT INTO `s281_items_cmts` SET `c_item_id` = '{$iItemId}', `c_ip` = '{$sIp}', `c_when` = UNIX_TIMESTAMP(), `c_name` = '{$sName}', `c_text` = '{$sText}'");
  53. $GLOBALS['MySQL']->res("UPDATE `s281_photos` SET `comments_count` = `comments_count` + 1 WHERE `id` = '{$iItemId}'");
  54.  
  55. // and print out last 10 comments
  56. $sOut = '';
  57. $aComments = $GLOBALS['MySQL']->getAll("SELECT * FROM `s281_items_cmts` WHERE `c_item_id` = '{$iItemId}' ORDER BY `c_when` DESC LIMIT 10");
  58. foreach ($aComments as $i => $aCmtsInfo) {
  59. $sWhen = date('F j, Y H:i', $aCmtsInfo['c_when']);
  60. $sOut .= <<<EOF
  61. <div class="comment" id="{$aCmtsInfo['c_id']}">
  62.   <p>Comment from {$aCmtsInfo['c_name']} <span>({$sWhen})</span>:</p>
  63.   <p>{$aCmtsInfo['c_text']}</p>
  64. </div>
  65. EOF;
  66. }
  67. return $sOut;
  68. }
  69. }
  70. return 1;
  71. }
  72.  
  73. // get visitor IP
  74. function getVisitorIP() {
  75. $ip = "0.0.0.0";
  76. if( ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) && ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) ) {
  77. $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  78. } elseif( ( isset( $_SERVER['HTTP_CLIENT_IP'])) && (!empty($_SERVER['HTTP_CLIENT_IP'] ) ) ) {
  79. $ip = explode(".",$_SERVER['HTTP_CLIENT_IP']);
  80. $ip = $ip[3].".".$ip[2].".".$ip[1].".".$ip[0];
  81. } elseif((!isset( $_SERVER['HTTP_X_FORWARDED_FOR'])) || (empty($_SERVER['HTTP_X_FORWARDED_FOR']))) {
  82. if ((!isset( $_SERVER['HTTP_CLIENT_IP'])) && (empty($_SERVER['HTTP_CLIENT_IP']))) {
  83. $ip = $_SERVER['REMOTE_ADDR'];
  84. }
  85. }
  86. return $ip;
  87. }
  88. }
  89.  
  90. $GLOBALS['MyComments'] = new CMyComments();
  91.  
  92. ?>

Ik zelf zie de fout niet zitten.

4 antwoorden

Gesponsorde links
Offline Thomas - 12/12/2013 18:09
Avatar van Thomas Moderator regel 10: $i in functie-aanroep (waarde: item_id)
regel 14: foreach met key $i (waarde: een of andere index, weet niet wat getAll() als index teruggeeft?)
regel 33: submitComment() met $i (waarde: ???)

Dat lijkt mij sowieso niet lekker werken.

Als de submitComment() de goede waarde bevat zit de fout waarschijnlijk in de JavaScript (AJAX?) afhandeling? Kwestie van stapsgewijs nalopen...

Daarnaast: wellicht kan de maker van dit script op internet je hier meer over vertellen?
Offline arthurheijm - 12/12/2013 21:28
Avatar van arthurheijm Lid Kom hier toch nog even op terug, het eerst commentaar is namelijk wel goed in de database gezet.
Maar als je er een tweede commentaar in wil zetten, dan is de ( $iItemId = (int)$_POST['id']; )
een 0 geworden.
Offline Thomas - 13/12/2013 13:55
Avatar van Thomas Moderator Volg het kruimelpad terug: wat POST er naar acceptComment en hoe komt $_POST['id'] aan zijn waarde?

Krijg je bericht dat $_POST['id'] niet gedefinieerd is (zet error reporting aan)? De (int) typecast van zo'n element is "0" (blijkbaar).
Offline arthurheijm - 18/12/2013 16:58
Avatar van arthurheijm Lid Ik heb het script laten vervallen.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.209s