2010-12-05 2 views
0

У меня есть это:PHP: Создание чистых и более короткий код

<?php 
if($_GET['wE'] && is_numeric($_GET['wE'])){ 
$we = mysql_real_escape_string($_GET['wE']); 
$query_find_we = "SELECT id FROM users_wall WHERE id = '$we' AND uID = '$showU[id]'"; 
$query_find_we = mysql_query($query_find_we)or die(mysql_error()); 
$grab_wall_comment = (mysql_num_rows($query_find_we) == 1) ? "window.location.hash = '#comment$we';" : "alert('Vägginlägg kunde ej hittas.');"; 
?> 
<script> 
$(function() { 
<?php echo $grab_wall_comment; ?> 
}); 
</script> 
<?php 
}elseif($_GET['sE'] && is_numeric($_GET['sE'])){ 
$se = mysql_real_escape_string($_GET['sE']); 
$query_find_se = "SELECT id FROM users_statuslog WHERE id = '$se' AND uID = '$showU[id]'"; 
$query_find_se = mysql_query($query_find_se)or die(mysql_error()); 
$grab_status_comment = (mysql_num_rows($query_find_se) == 1) ? "window.location.hash = '#comment$se';" : "alert('Status kunde ej hittas.');"; 
?> 
<script> 
$(function() { 
<?php echo $grab_status_comment; ?> 
}); 
</script> 
<?php 
    } 
?> 

проверяет, является ли какой-либо $ _GET [ 'мы'] или $ _GET [ 'се'], и если он существует. и запускает <script>.

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

+0

Оберните его функцией. – Radu 2010-12-05 16:00:19

+0

ответьте и укажите пример того, как вы подразумеваете, обернув его в функцию. – Karem 2010-12-05 16:03:22

ответ

1

Разве вы не видите это сами?

Есть, очевидно, две идентичные части кода.
Вы должны просто превратить переменные части этого кода в переменные PHP. Это все.
И, конечно же, должна быть какая-то функция API db. Функция

<? 
if (!empty($_GET['wE'])) { 
    $id = $_GET['wE'] 
    $table = "users_wall"; 
    $alert = "Vagginlagg kunde ej hittas."; 
} elseif (!empty($_GET['sE'])) { 
    $id = $_GET['sE']; 
    $table = "users_statuslog"; 
    $alert = "Status kunde ej hittas."; 
} 
$query = "SELECT count(id) FROM `$table` HERE id = %d AND uID = %d"; 
$count = db::getOne($query,$id,$showU['id']); 

//Separate your main PHP logic from presentation as much as possible. 
//leave only necessary operators. 
?> 
<script> 
$(function() { 
<? if($count): ?>window.location.hash = '#comment<?=$id?>'; 
<? else: ?>alert('<?=$alert?>'); 
<? endif ?> 
}); 
</script> 

getone() похожа на getarr() я упоминал в this answer, но возвращает скалярное значение вместо массива.

0
<?php 
    $param = (isset($_GET['wE']) && is_numeric($_GET['wE']))?"wE":((isset($_GET['sE']) && is_numeric($_GET['sE']))?"sE":false); 
    if($param){ 
     echo showScript($param); 
    } else { 
     //TODO: do something if there's no 'wE' nor 'sE' maybe? 
    } 

    function showScript($param){ 
     if($param == "wE"){ 
      $table = "users_wall"; 
      $alert = "Vägginlägg kunde ej hittas."; 
     } else { 
      $table = "users_statuslog"; 
      $alert = "Status kunde ej hittas."; 
     } 
     $e = mysql_real_escape_string($_GET[$param]); 
     $query_find = "SELECT id FROM ".$table." WHERE id = '".$e."' AND uID = '$showU[id]'"; 
     $query_find = mysql_query($query_find)or die(mysql_error()); 
     $grab_status_comment = (mysql_num_rows($query_find) == 1) ? "window.location.hash = '#comment$e';" : "alert('$alert');"; 
     return '<script>$(function() {'.$grab_wall_comment.'});</script>'; 
    } 
    ?> 

я не проверял ... но вот главная идея: P

удачи, надеюсь, что это помогает

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