2013-03-14 4 views
0

Я создаю видео-поисковую систему и хочу создать для всех так же, как и youtube. Проблема в том, что у меня проблемы с php foreach(). Я получаю неверную аргумент аргумента аргумента. Вот код:php foreach недействительный аргумент

<?php 
$sql=mysql_query("SELECT*FROM videos WHERE Name='$nemo'"); 
while($row=mysql_fetch_array($sql,MYSQL_ASSOC)){ 
$name=$row['Name']; 
} 
foreach($name as $key=>values) { 
echo '<div id="block'><h1>'.$name.'</h1></div>';  
}?> 

Благодаря

+2

это было бы, потому что '$ name' не * массив *. – deceze

+0

'$ name = $ row ['Name'];'. Вы устанавливаете '$ name' в строку. –

ответ

2
<?php 
    $sql=mysql_query("SELECT*FROM videos WHERE Name='$nemo'"); 
    while($row=mysql_fetch_array($sql,MYSQL_ASSOC)){ 
    echo '<div id="block"><h1>'.$row['Name'].'</h1></div>'; 
    } 
?> 

$ имя не является массивом. также вы не хотите использовать foreach здесь. в то время как цикл работает там. так что делайте так. если вам нужно foreach, тогда $ name используется как массив.

$name[] = $row['Name']; 
+1

Пожалуйста, убедитесь, что вы указали письменное объяснение любых решений, а также пример кода :-) – DaveRandom

+0

, так что я должен что-то заменить с помощью строки $? – user2120032

1

Попробуйте это вместо этого, вы можете просто пройти через результирующий набор и распечатать $ row ['Name'].

<?php 
    $sql=mysql_query("SELECT*FROM videos WHERE Name='$nemo'"); 
    while($row=mysql_fetch_array($sql,MYSQL_ASSOC)){ 
     echo '<div id="block"><h1>'.$row['Name'].'</h1></div>';  
    } 
?> 
1

Еогеасп используется с массивами, но $name является строка, потому что вы присвоить значение ячейки к нему. сделать это массив и добавлять элементы к нему, он должен быть как $name[]=$row['Name']; теперь ваш код должен стать:

<?php 
$sql=mysql_query("SELECT*FROM videos WHERE Name='$nemo'"); 
while($row=mysql_fetch_array($sql,MYSQL_ASSOC)){ 
$name[]=$row['Name']; 
} 
foreach($name as $key=>values) { 
    echo '<div id="block"><h1>'.$name.'</h1></div>';  
} 
?> 
+0

неожиданный ')', ожидающий T_PAAMAYIM_NEKUDOTAYIM в /home/content/58/10512158/html/hom.php в строке 14 – user2120032

2

Вы не должны использовать расширение mysql, потому что это не рекомендуется использовать вместо PDO.

Во всяком случае, это, как я хотел бы сделать это:

$sql = mysql_query("SELECT * FROM videos WHERE Name='$nemo'"); //be careful you might need to secure the $nemo var. 

while($row = mysql_fetch_assoc($sql)) //fetch_assoc to have an associated array 
{ 
    $name = $row['Name']; 

    echo '<div id="block"><h1>'.$name.'</h1></div>'; //here you placed a ' instead of a " 
    //Do the rest of your stuff here 
} 

Вашие данные являются неоспоримым разобран из mysql_query в while, вам не нужно разбирать их снова с помощью foreach или любой другой.

Другой пример для написания всех имен:

$sql = mysql_query("SELECT * FROM videos WHERE Name='$nemo'"); 

echo '<div id="block"><h1>'; 

while($row = mysql_fetch_assoc($sql)) 
    echo $row['Name'] . ','; 

echo '</h1></div>'; 
+0

Вы хотите сказать, что он создаст блок для каждого найденного имени? – user2120032

+0

Да, но вы могли бы написать все имена внутри блока, см. Мое редактирование. – soyuka

+0

Спасибо, он работает – user2120032

0

Вы получаете эту ошибку, если вы даете foeach() любой параметр, кроме массива .... Первое, что я, что пришло на ум после прочтения вашего вопрос заключается в том, что параметры не является допустимым массив ... Соответствующий код будет

 <?php 
     $name = array(); // declare $name as array 
     $sql=mysql_query("SELECT*FROM videos WHERE Name='$nemo'"); 
     while($row=mysql_fetch_array($sql,MYSQL_ASSOC)) 
     { 
     $name[]=$row['Name']; 
     // now even $name = $row['Name'] means $name[0] = 'value of $row['Name']' 
     } 
     // Now it will definately work 
     foreach($name as $key=>values) 
     { 
      echo '<div id="block'><h1>'.$name.'</h1></div>';  
     } 
    ?> 
Смежные вопросы