2013-05-23 2 views
-1

Я пытаюсь написать проект PHP. На этом сайте люди могут обмениваться фотографиями путем входа в систему, а фотографии отображаются в index.php, который является главной страницей программы. Теперь у меня есть три пользователя и изображения пользователей базы данных. может предоставить пользователям возможность делиться фотографиями, сохраняя информацию о фотографиях, а затем извлекать их из базы данных из таблицы изображений. Теперь я хочу предоставить пользователю возможность сделать комментарий о фотографии на главной странице. Есть текстовое поле и сообщение под изображениями. Но когда я делаю комментарий для изображения, он регистрируется не только связанным идентификатором изображения, но и другими идентификаторами изображения. Почему это происходит?Почему я не могу отправить только один комментарий в PHP?

Вот некоторая часть PHP-кода, я также открываю и закрываю соединение с базой данных в необходимых частях.

while($x < mysql_num_rows($result)) 
     { 
     $picid=mysql_result($result, $x, 'id'); 
     $name=mysql_result($result, $x, 'imageName'); 
     $date=mysql_result($result, $x, 'imageDate'); 

     echo "<div><img src = 'upload/$name' height='300 width='300' /></div>"; 
     echo "Name: $name Date: $date"; 
     echo "<br/>"; 
     ?> 
     <p>Post a Comment</p> 

     <form action="<?= $_SERVER['PHP_SELF']?>" method="POST"> 
     <textarea name="message" cols="70" rows="6" placeholder="Enter a comment"> 

    </textarea><br/><br/><br/><br/><br/><br/> 
     <input type="submit" name="submit" value="Post" style="float:left"><br/><br/>  
     <br/> 
     </form> 
    <!--<textarea name="message" cols="70" rows="6" ></textarea><br/><br/><br/><br/> 
    <br/><br/>--> 
     <?php 

     extract($_REQUEST); 
     if (isset($submit)) { 
      $y=0; 
      $email=$_SESSION['email']; 
      $asdf = mysql_query("SELECT * from users WHERE email='$email'"); 
      //var_dump(mysql_error()); 
      while($y<mysql_num_rows($asdf)) 
      { 
      $iduser=mysql_result($asdf,$y,'id'); 
      $y++; 
      } 

       echo "$iduser"; 
       $sql ="INSERT INTO messages (id_user, message,picid) VALUES 
       ('$iduser','$message','$picid');"; 

       $rslt = mysql_query($sql); 

       if ($rslt== false) { 
       echo '<p>Error: cannot execute query</p>'; 
       } 

       } ?> 
       <?php 

     $x++; 

    } 
+0

yourpage.com?message= '); УДАЛИТЬ * ОТ сообщений # –

+0

Почему это в цикле while. – Orangepill

+0

@ Находите сначала первое, чтобы получить количество фотографий из таблицы изображений базы данных. Второй, для которого пользователь отправляет этот комментарий, чтобы найти пользователя из таблицы пользователей с совпадением с текущим пользователем. – user1548222

ответ

0

Попробуйте это:

while($x < mysql_num_rows($result)) { 
     $picid=mysql_result($result, $x, 'id'); 
     $name=mysql_result($result, $x, 'imageName'); 
     $date=mysql_result($result, $x, 'imageDate'); 

     echo "<div><img src = 'upload/$name' height='300 width='300' /></div>"; 
     echo "Name: $name Date: $date"; 
     echo "<br/>"; 
     ?> 
     <p>Post a Comment</p> 

     <form action="<?= $_SERVER['PHP_SELF']?>" method="POST"> 
     <textarea name="message" cols="70" rows="6" placeholder="Enter a comment"> 
    </textarea><br/><br/><br/><br/><br/><br/> 
     <input tyep='hidden' name='pic_id' value='<?php= $picid; ?>' /> 
     <input type="submit" name="submit" value="Post" style="float:left"><br/><br/>  
     <br/> 
     </form> 
    <?php 
    $x++; 

    } 
?> 

Это генерирует форму и с фотографии, и когда вы отправите форму, вы получите pic_id и message в post и у вас уже есть email в $_SESSION ,

сейчас, попробуйте вставить.

+0

это правда написать user1548222

+0

Это была опечатка с моей стороны. Спасибо, что указали это. Я отредактировал ответ – draxxxeus

+0

Спасибо за вашу помощь :) – user1548222

0

Лучше вы должны попробовать АЯКС для комментирования системы, вы получаете эту проблему, вероятно, из-за этого code-

$asdf = mysql_query("SELECT * from users WHERE email='$email'"); 
      //var_dump(mysql_error()); 
      while($y<mysql_num_rows($asdf)) 
      { 
      $iduser=mysql_result($asdf,$y,'id'); 
      $y++; 
      } 
+0

, но по этому коду я просто связал пользователя с соответствующим рисунком, потому что тот, который делает комментарий, необходим для меня. Как можно Я использую Ajax, я не знаю, как его скрывать. :( – user1548222

+0

В сеансе вы можете поддерживать iduser (то есть уникальный идентификатор пользователя), а затем просто извлекать его оттуда, когда вам это нужно. сделать дополнительный que ry, чтобы найти его из базы данных каждый раз. –

+0

Вопрос от OP заключается не в том, как отправить запрос. AJAXifying не решает проблему здесь. – draxxxeus

0

Вы используете время цикла while($x < mysql_num_rows($result)) что не делать вставки до конца условия.

Предоставление всех $ picid в $picid =mysql_result($result, $x, 'id');, и поскольку isset ($ submit) является истинным, программа будет вставлять сообщение во все строки.

+0

да, но как я могу подойти к этой проблеме, чтобы ее решить, отправить комментарий только связанный picid? – user1548222

+0

вы должны знать «" для сообщения. –

+0

вы должны знать «" для сообщения. как $ postpicid = $ _POST ["picid"] и $ postmessage = trim ($ _ POST ["message"]) ... $ lengthmessage = strlen ($ postmessage) .... если lengthmessage <1 не делает вставку –

0

Во-первых, вы выполняете инструкцию INSERT внутри цикла while. Это означает, что когда они отправляют форму, ваш выходной цикл (верхний while) собирается извлекать записи, а когда он создает вывод HTML, он будет выполнять INSERT для каждой выходной записи. Переменная $picid устанавливается на следующий идентификатор изображения, так как while проходит выходные записи. Но INSERT работает внутри этого цикла, добавляя один и тот же комментарий к каждому $picid.

Оставим в стороне, что существует намного более чистый способ написать этот код. Либо вы новичок-программист, либо не имеете большого контроля над структурой вашего проекта - ни одна из них не является негативной вещью, но давайте придерживаться того, что у вас есть на данный момент.

Даже в пределах структуры, которую у вас есть, этот код необходимо существенно изменить.

while($row < mysql_fetch_assoc($result)) 
{ 
    // $row is an array with all the columns, 
    // No need to keep calling a separate function to get the columns. 
    // 
    //$picid=mysql_result($result, $x, 'id'); 
    //$name=mysql_result($result, $x, 'imageName'); 
    //$date=mysql_result($result, $x, 'imageDate'); 

    echo "<div><img src = 'upload/{$row['name']}' height='300 width='300' /></div>"; 
    echo "Name: {$row['name']} Date: {$row['date']}"; 
    echo "<br/>"; 

    // Notice the new <input> tag in the FORM below. 
    // You still need to identify which picid to add the message to. 
?> 
    <p>Post a Comment</p> 

    <form action="<?= $_SERVER['PHP_SELF']?>" method="POST"> 
    <input type="hidden" name="picid" value="<?= $row['id']; ?>"/> 
    <textarea name="message" cols="70" rows="6" placeholder="Enter a comment"> 
    </textarea> 
    <br/><br/><br/><br/><br/><br/> 
    <input type="submit" name="submit" value="Post" style="float:left"> 
    <br/><br/><br/> 
    </form> 

    <?php 
} // END RESULTS OUTPUT (while) 

// BEGIN SUBMIT DATA PROCESSING 
if (isset($submit)) 
{ 
    // This is not recommended, but it's not the point here. 
    extract($_REQUEST); 
    //$y=0; 
    $email=$_SESSION['email']; 
    $result = mysql_query("SELECT * from users WHERE email='{$email}'"); 

    // Unless an email can have multiple records in [users] table, 
    // the loop is unnecessary. 
    //while ($row = mysql_fetch_assoc($result)) 
    //{ 
    // $row is an array with all the columns, 
    // No need to keep calling a separate function to get the columns. 
    // $iduser=mysql_result($asdf,$y,'id'); 
    //  $y++; 
    //} 
    // Instead... This automatically gets the first row from $result. 
    $row = mysql_fetch_assoc($result); 
    $iduser = $row['id']; 

    //echo "$iduser"; 
    $sql ="INSERT INTO messages (id_user, message,picid) VALUES 
    ('{$iduser}','{$message}','{$picid}');"; 

    $result = mysql_query($sql); 

    if ($result === false) 
    { 
    echo '<p>Error: cannot execute query</p>'; 
    } 
} // END IF isset($submit) 

?> 

Это не проверено, но, надеюсь, это поможет вам двигаться в лучшем направлении.

+0

Мне жаль, что это не сработало. – user1548222

Смежные вопросы